The default module system used by XMOS application makefiles includes common modules at the source code level. However, it is possible to build a module into a binary library for distribution without the source.
A module that is to be built into a library needs to be split into source that is used to build the library and source/includes that are to be distributed with the library. For example, you could specify the following structure.
module_my_library/ Makefile module_build_info libsrc/ my_library.xc src/ support_fns.xc include/ my_library.h
The intention with this structure is that the source file my_library.xcis compiled into a library and that library will be distributed along with the src and include directories (but not thelibsrc directory).
The module_build_info file
To build a binary library some extra variables need to be set in themodule_build_info file. One of the LIBRARY or LIBRARIESvariables must be set.
LIBRARY
This variable specifies the name of the library to be created, for example:
LIBRARY = my_library
LIBRARIES
This variable can be set instead of the LIBRARY variable to specify that several libraries should be built (with different build flags), for example:
LIBRARY = my_library my_library_debug
The first library in this list is the default library that will be linked in when an application includes this module. The application can specify one of the other libraries by adding its name to itsMODULE_LIBRARIES list.
LIB_XCC_FLAGS_libname
This variable can be set to the flags passed to xcc when compiling the library libname. This option can be used to pass different compilation flags to different variants of the library.
EXPORT_SOURCE_DIRS
This variable should contain a space separated list of directories that are not to be compiled into the library and distributed as source instead, for example:
EXPORT_SOURCE_DIRS = src include
The module Makefile
Modules that build to a library can have a Makefile (unlike normal, source-only modules). The contents of this Makefile just needs to be:
XMOS_MAKE_PATH ?= ../.. include $(XMOS_MAKE_PATH)/xcommon/module_xcommon/build/Makefile.library
This Makefile has two targets. Running make all will build the libraries. Calling the target make export will create a copy of the module in a directory called export which does not contain the library source. For the above example, the exported module would look like the following.
export/ module_my_library/ module_build_info lib/ xs1b/ libmy_library.a src/ support_fns.xc include/ my_library.h
Using the module
An application can use a library module in the same way as a source module (including the module name in the USED_MODULESlist). Either the module with the library source or the exported module can be used with the same end result.