Skip to content
Snippets Groups Projects
Unverified Commit 4157a071 authored by Gaëtan Harter's avatar Gaëtan Harter
Browse files

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.
parent 6b534a93
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
APPLICATION = external_module_dirs
BOARD ?= native
RIOTBASE ?= $(CURDIR)/../..
USEMODULE += random
USEMODULE += external_module
EXTERNAL_MODULE_DIRS += $(CURDIR)/external_module
include $(RIOTBASE)/Makefile.include
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.
include $(RIOTBASE)/Makefile.base
USEMODULE += random
# Set a different prng than the default prng_tinymt32
USEMODULE += prng_xorshift
# 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)
/*
* 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";
/*
* 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 */
/*
* 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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment