diff --git a/doc/doxygen/src/creating-modules.md b/doc/doxygen/src/creating-modules.md index 776024be7fa223df943790b3035041e0758f8592..55ad515e2dcbefe74bc6c76e28b2128c5a4568a9 100644 --- a/doc/doxygen/src/creating-modules.md +++ b/doc/doxygen/src/creating-modules.md @@ -74,6 +74,9 @@ The external module can optionally define the following files: API headers include paths to the `USEMODULE_INCLUDES` variable. * `Makefile.dep` file to set module dependencies +An example can be found in +[`tests/external_module_dirs`](https://github.com/RIOT-OS/RIOT/tree/master/tests/external_module_dirs) + Pseudomodules {#pseudomodules} ============= Pseudomodules are modules that do not have any code. Their main use cases are diff --git a/tests/external_module_dirs/Makefile b/tests/external_module_dirs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..0a0c17fb7e7242f2fc5f08173239b5250531a4d1 --- /dev/null +++ b/tests/external_module_dirs/Makefile @@ -0,0 +1,10 @@ +APPLICATION = external_module_dirs +BOARD ?= native +RIOTBASE ?= $(CURDIR)/../.. + +USEMODULE += random + +USEMODULE += external_module +EXTERNAL_MODULE_DIRS += $(CURDIR)/external_module + +include $(RIOTBASE)/Makefile.include diff --git a/tests/external_module_dirs/README.md b/tests/external_module_dirs/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e19e6b36b873619cd8207fdf2f5fbcb595a43aa3 --- /dev/null +++ b/tests/external_module_dirs/README.md @@ -0,0 +1,12 @@ +Test of `EXTERNAL_MODULE_DIRS` handling +======================================= + +This is a test for the `EXTERNAL_MODULE_DIRS` variable. + +It demonstrates: + + * Adding a module with source code + * Setting a header include directory + * Adding dependencies, which are evaluated before other modules dependencies + +If the application compiles, everything is ok. diff --git a/tests/external_module_dirs/external_module/Makefile b/tests/external_module_dirs/external_module/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..48422e909a47d7cd428d10fa73825060ccc8d8c2 --- /dev/null +++ b/tests/external_module_dirs/external_module/Makefile @@ -0,0 +1 @@ +include $(RIOTBASE)/Makefile.base diff --git a/tests/external_module_dirs/external_module/Makefile.dep b/tests/external_module_dirs/external_module/Makefile.dep new file mode 100644 index 0000000000000000000000000000000000000000..970cc1be9dc573422d171b84d328d82acdb3c2fd --- /dev/null +++ b/tests/external_module_dirs/external_module/Makefile.dep @@ -0,0 +1,3 @@ +USEMODULE += random +# Set a different prng than the default prng_tinymt32 +USEMODULE += prng_xorshift diff --git a/tests/external_module_dirs/external_module/Makefile.include b/tests/external_module_dirs/external_module/Makefile.include new file mode 100644 index 0000000000000000000000000000000000000000..ced920dbfb8b3f883aff2274ab986a301c0c6eec --- /dev/null +++ b/tests/external_module_dirs/external_module/Makefile.include @@ -0,0 +1,3 @@ +# Use an immediate variable to evaluate `MAKEFILE_LIST` now +USEMODULE_INCLUDES_external_module := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))/include +USEMODULE_INCLUDES += $(USEMODULE_INCLUDES_external_module) diff --git a/tests/external_module_dirs/external_module/external_module.c b/tests/external_module_dirs/external_module/external_module.c new file mode 100644 index 0000000000000000000000000000000000000000..31b679f8aa5f88f1b106d07dcc7f2d3272ca5843 --- /dev/null +++ b/tests/external_module_dirs/external_module/external_module.c @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2018 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Test the EXTERNAL_MODULE_DIRS feature + * @note Define a shared variable + * + * @author Gaëtan Harter <gaetan.harter@fu-berlin.de> + * + * @} + */ + +#include "external_module.h" + +char *external_module_message = "Linking worked"; diff --git a/tests/external_module_dirs/external_module/include/external_module.h b/tests/external_module_dirs/external_module/include/external_module.h new file mode 100644 index 0000000000000000000000000000000000000000..f358ef4786d881db7800b7dc206d5bc82f00f5ab --- /dev/null +++ b/tests/external_module_dirs/external_module/include/external_module.h @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2018 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @defgroup + * @ingroup + * @brief + * @{ + * + * @file + * @brief + * + * @author Gaëtan Harter <gaetan.harter@fu-berlin.de> + */ +#ifndef EXTERNAL_MODULE_H +#define EXTERNAL_MODULE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief A simple string message + */ +extern char *external_module_message; + +#ifdef __cplusplus +} +#endif + +/** @} */ +#endif /* EXTERNAL_MODULE_H */ diff --git a/tests/external_module_dirs/main.c b/tests/external_module_dirs/main.c new file mode 100644 index 0000000000000000000000000000000000000000..9695fb682611a7442ec3f04996d85e0f606e95ef --- /dev/null +++ b/tests/external_module_dirs/main.c @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2018 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Test the EXTERNAL_MODULE_DIRS feature + * + * @author Gaëtan Harter <gaetan.harter@fu-berlin.de> + * + * @} + */ + +#include <stdio.h> + +#include "external_module.h" + +#ifdef MODULE_PRNG_TINYMT32 +#error "Error: it included the default dependency" +#endif + +#ifndef MODULE_PRNG_XORSHIFT +#error "Dependency not included" +#endif + +int main(void) +{ + puts("If it compiles, it works!"); + printf("Message: %s\n", external_module_message); + return 0; +}