Regarding the use of multiple levels of directories containing headers:

All the header files listed in the `Client_HFILES` variable are copied into a staging area, and the files in the staging area are included during compilation. Importantly, only the files listed in that variable are copied - not directories. The simplest way to recursively list all header files in a directory structure is using the `shell` builtin to run find (e.g. `Client_HFILES := $(shell find ${SOURCE_DIR}/components/Client/include -name '*.h')` ).


Regarding boost support, we don't explicitly support it (ie. none of our tests use it), but it will really depend on what you're doing with it. If all you're using it for is C preprocessor macros, I can't see any reason it why it shouldn't work. I can't speak for more complicated boost or C++ features.


Hope this helps!



From: Devel <devel-bounces@sel4.systems> on behalf of Tran Cuong <cuongtd4@gmail.com>
Sent: Tuesday, 13 June 2017 7:47 AM
To: devel@sel4.systems
Subject: [seL4] [Camkes] Is there any way to declare hierarchical header files and does CamKES support C++ boost preprocessor?
 
Hello everybody,

I'm conducting a C-project, in which the code is utilizing boost library to define several macros. This source code is running well in Linux and using only standard C library (I had tested this libraries individually by some mini-programs on CamKES). 

My project is organized as follows:
 - Top folder: 
 + "components" folder contains my c code
 + "include" folder contains 1 .h file boost1.h and 1 folder test
       ++ sub-folder "test" contains 1 file boost2.h
       ++ content of boost1.h is just include "test/boost2.h"
 + "Makefile" is declared as below:

 TARGETS := $(notdir ${SOURCE_DIR}).cdl
ADL := tst-macro.camkes

Client_CFILES := \
    $(patsubst ${SOURCE_DIR}/%,%,$(wildcard ${SOURCE_DIR}/components/Client/src/*.c)) \
    $(patsubst ${SOURCE_DIR}/%,%,$(wildcard ${SOURCE_DIR}/components/Client/src/plat/${PLAT}/*.c)) \
    $(patsubst ${SOURCE_DIR}/%,%,$(wildcard ${SOURCE_DIR}/components/Client/src/arch/${ARCH}/*.c))

Client_ASMFILES := \
    $(patsubst ${SOURCE_DIR}/%,%,$(wildcard ${SOURCE_DIR}/components/Client/crt/arch-${ARCH}/crt0.S)) \
    $(patsubst ${SOURCE_DIR}/%,%,$(wildcard ${SOURCE_DIR}/components/Client/src/*.S)) \
    $(patsubst ${SOURCE_DIR}/%,%,$(wildcard ${SOURCE_DIR}/components/Client/src/arch/${ARCH}/*.S)) \
    $(patsubst ${SOURCE_DIR}/%,%,$(wildcard ${SOURCE_DIR}/components/Client/src/plat/${PLAT}/*.S))

Client_HFILES := \
    $(patsubst ${SOURCE_DIR}/%,%,$(wildcard ${SOURCE_DIR}/components/Client/include/*))
     
include ${PWD}/tools/camkes/camkes.mk    

- This above Makefile, I imitated from another application, and when I compiled the project, there are some errors related to directory of "test/boost2.h". I suspect that there is something wrong with Client_HFILES declaration, since maybe it is only valid for a list of .h files, not for hierarchical folders.
 - I really want to dive into CamKES, but I only have a little knowledge about this. My project is due so I hope to get some positive advice from you for 2 questions:
  + The right way to declare multi-level libraries as in my example.
  + Besides, does CamKES support boost preprocessing lib. Currently I'm using the toolchain arm-none-eabi-

Thank all of you for the time and attention.

Dinh-Cuong 

--
-------------------
TRAN Dinh Cuong (Mr)