From 4157a07152941c5c070ca8a8a93364395307c53f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Harter?= <gaetan.harter@fu-berlin.de> Date: Thu, 19 Apr 2018 17:10:51 +0200 Subject: [PATCH] tests/external_module_dir: test for `EXTERNAL_MODULE_DIRS` It demonstrates: * Adding a module with source code * Setting a header include directory * Adding dependences, which are evaluated before other modules dependencies If the application compiles, everything is ok. --- doc/doxygen/src/creating-modules.md | 3 ++ tests/external_module_dirs/Makefile | 10 +++++ tests/external_module_dirs/README.md | 12 ++++++ .../external_module/Makefile | 1 + .../external_module/Makefile.dep | 3 ++ .../external_module/Makefile.include | 3 ++ .../external_module/external_module.c | 24 ++++++++++++ .../external_module/include/external_module.h | 37 ++++++++++++++++++ tests/external_module_dirs/main.c | 38 +++++++++++++++++++ 9 files changed, 131 insertions(+) create mode 100644 tests/external_module_dirs/Makefile create mode 100644 tests/external_module_dirs/README.md create mode 100644 tests/external_module_dirs/external_module/Makefile create mode 100644 tests/external_module_dirs/external_module/Makefile.dep create mode 100644 tests/external_module_dirs/external_module/Makefile.include create mode 100644 tests/external_module_dirs/external_module/external_module.c create mode 100644 tests/external_module_dirs/external_module/include/external_module.h create mode 100644 tests/external_module_dirs/main.c diff --git a/doc/doxygen/src/creating-modules.md b/doc/doxygen/src/creating-modules.md index 776024be7f..55ad515e2d 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 0000000000..0a0c17fb7e --- /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 0000000000..e19e6b36b8 --- /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 0000000000..48422e909a --- /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 0000000000..970cc1be9d --- /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 0000000000..ced920dbfb --- /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 0000000000..31b679f8aa --- /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 0000000000..f358ef4786 --- /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 0000000000..9695fb6826 --- /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; +} -- GitLab