tests/external_board_native: show an example of external board

Add an example that implements an external board based on native.
It relies on 'BOARDSDIR' and uses common files from 'RIOT/boards'
through 'RIOTBOARDS'.

This application also works with the docker integration.
This commit is contained in:
Gaëtan Harter 2019-09-09 17:58:00 +02:00 committed by Alexandre Abadie
parent 1427ef998f
commit 633f050d1f
No known key found for this signature in database
GPG Key ID: 1C919A403CAE1405
10 changed files with 142 additions and 0 deletions

View File

@ -0,0 +1,15 @@
APPLICATION = external_board
RIOTBASE ?= $(CURDIR)/../../
# Only support this board
# No need for a `WHITELIST` as there is only one board in `external_boards`.
#
# HACK I named the external board as 'native' to be in murdock test path for
# 'native'
# In practice it should be something else
BOARD ?= native
# Set without '?=' to also verify the docker integration when set with =
BOARDSDIR = $(CURDIR)/external_boards
include $(RIOTBASE)/Makefile.include

View File

@ -0,0 +1,14 @@
Example with an external board
==============================
This tests an external board implementation.
The goal is to show using an external board that still needs to use the
'RIOT/boards' directory.
To allow automated testing by `murdock` this board is named 'native'.
As it wants to extend native, which is not a common board, some hacks must be
done as the 'board' module is implemented directly by the 'RIOT/boards/native'.
If you are running an 'ubuntu-bionic' you could even compile the example in
docker and run the test.

View File

@ -0,0 +1,6 @@
# This must be a different name than 'board' as it is implemented by 'native'
MODULE = board_external_native
DIRS += $(RIOTBOARD)/native
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,4 @@
# This must be a different name than 'board' as it is implemented by 'native'
USEMODULE += board_external_native
include $(RIOTBOARD)/native/Makefile.dep

View File

@ -0,0 +1 @@
include $(RIOTBOARD)/native/Makefile.features

View File

@ -0,0 +1,7 @@
CFLAGS += -DTHIS_BOARD_IS='"external_native"'
# We must duplicate the include done by $(RIOTBASE)/Makefile.include
# to also include the main board header
INCLUDES += $(addprefix -I,$(wildcard $(RIOTBOARD)/native/include))
include $(RIOTBOARD)/native/Makefile.include

View File

@ -0,0 +1,3 @@
#include "external_native.h"
char* external_native_board_description = "An external extended native";

View File

@ -0,0 +1,36 @@
/*
* Copyright (C) 2019 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 boards_external_native
* @{
*
* @file
* @brief A header for an external native
*
* @author Gaëtan Harter <gaetan.harter@fu-berlin.de>
*/
#ifndef EXTERNAL_NATIVE_H
#define EXTERNAL_NATIVE_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief A variable defined in the external header
*/
extern char* external_native_board_description;
#ifdef __cplusplus
}
#endif
#endif /* EXTERNAL_NATIVE_H */
/** @} */

View File

@ -0,0 +1,34 @@
/*
* Copyright (C) 2019 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 External Native application
*
* @author Gaëtan Harter <gaetan.harter@fu-berlin.de>
*
* @}
*/
#include <stdio.h>
#include "external_native.h"
int main(void)
{
puts("Hello World!");
printf("You are running RIOT on a(n) %s board.\n", RIOT_BOARD);
printf("THIS_BOARD_IS %s\n", THIS_BOARD_IS);
printf("This board is '%s'\n", external_native_board_description);
return 0;
}

View File

@ -0,0 +1,22 @@
#!/usr/bin/env python3
# Copyright (C) 2019 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.
import sys
from testrunner import run
def testfunc(child):
child.expect_exact("Hello World!")
child.expect_exact("You are running RIOT on a(n) native board.")
child.expect_exact("THIS_BOARD_IS external_native")
child.expect_exact("This board is 'An external extended native")
print("Test successful!!")
if __name__ == "__main__":
sys.exit(run(testfunc))