From a8172308fef035a64b0faed0321054b675e14adb Mon Sep 17 00:00:00 2001 From: Alistair Francis Date: Thu, 22 Jun 2023 22:28:39 +1000 Subject: [PATCH] examples: NonArduino: Tock: Initial commit Add support for running RadioLib on Tock. Tock is an embedded operating system designed for running multiple concurrent, mutually distrustful applications on Cortex-M and RISC-V based embedded platforms (https://github.com/tock/tock). This PR uses libtock-c (https://github.com/tock/libtock-c) to add support to running RadioLib as a Tock userspace application. This has been tested on the SparkFun LoRa Thing Plus - expLoRaBLE board (https://github.com/tock/tock/tree/master/boards/apollo3/lora_things_plus) but will work on any LoRa compatible Tock board (currently only the expLoRaBLE board). Signed-off-by: Alistair Francis --- .gitmodules | 3 + examples/NonArduino/Tock/.gitignore | 1 + examples/NonArduino/Tock/CMakeLists.txt | 61 ++++++ examples/NonArduino/Tock/build.sh | 16 ++ examples/NonArduino/Tock/libtock-c | 1 + examples/NonArduino/Tock/libtockHal.h | 196 ++++++++++++++++++ examples/NonArduino/Tock/main.cpp | 77 +++++++ examples/NonArduino/Tock/tock.cmake | 51 +++++ .../Tock/toolchain-arm-none-eabi.cmake | 98 +++++++++ 9 files changed, 504 insertions(+) create mode 100644 .gitmodules create mode 100644 examples/NonArduino/Tock/.gitignore create mode 100644 examples/NonArduino/Tock/CMakeLists.txt create mode 100755 examples/NonArduino/Tock/build.sh create mode 160000 examples/NonArduino/Tock/libtock-c create mode 100644 examples/NonArduino/Tock/libtockHal.h create mode 100644 examples/NonArduino/Tock/main.cpp create mode 100644 examples/NonArduino/Tock/tock.cmake create mode 100644 examples/NonArduino/Tock/toolchain-arm-none-eabi.cmake diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..7eb86944 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "examples/NonArduino/Tock/libtock-c"] + path = examples/NonArduino/Tock/libtock-c + url = https://github.com/tock/libtock-c.git diff --git a/examples/NonArduino/Tock/.gitignore b/examples/NonArduino/Tock/.gitignore new file mode 100644 index 00000000..567609b1 --- /dev/null +++ b/examples/NonArduino/Tock/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/examples/NonArduino/Tock/CMakeLists.txt b/examples/NonArduino/Tock/CMakeLists.txt new file mode 100644 index 00000000..19f6e2b4 --- /dev/null +++ b/examples/NonArduino/Tock/CMakeLists.txt @@ -0,0 +1,61 @@ +# RadioLib Non-Arduino Tock Library CMake script +# +# Licensed under the MIT License +# +# Copyright (c) 2023 Alistair Francis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +cmake_minimum_required(VERSION 3.18) + +# create the project +project(tock-sx1261) + +set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/libtock-c/userland_generic.ld) + +include("tock.cmake") + +# when using debuggers such as gdb, the following line can be used +#set(CMAKE_BUILD_TYPE Debug) + +# if you did not build RadioLib as shared library (see wiki), +# you will have to add it as source directory +# the following is just an example, yours will likely be different +add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/../../../../RadioLib" "${CMAKE_CURRENT_BINARY_DIR}/RadioLib") + +# add the executable +add_executable(${PROJECT_NAME} main.cpp) + +# link with RadioLib and libtock-c +target_link_libraries(${PROJECT_NAME} PUBLIC + RadioLib + gcc + ${CMAKE_CURRENT_SOURCE_DIR}/libtock-c/libtock/build/cortex-m4/libtock.a + ${CMAKE_CURRENT_SOURCE_DIR}/libtock-c/libc++/cortex-m/libstdc++.a + ${CMAKE_CURRENT_SOURCE_DIR}/libtock-c/newlib/cortex-m/v7-m/libc.a + ${CMAKE_CURRENT_SOURCE_DIR}/libtock-c/newlib/cortex-m/v7-m/libm.a +) + +target_include_directories(${PROJECT_NAME} PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/libtock-c +) + +# you can also specify RadioLib compile-time flags here +#target_compile_definitions(${PROJECT_NAME} PUBLIC RADIOLIB_DEBUG RADIOLIB_VERBOSE) diff --git a/examples/NonArduino/Tock/build.sh b/examples/NonArduino/Tock/build.sh new file mode 100755 index 00000000..b7b21caa --- /dev/null +++ b/examples/NonArduino/Tock/build.sh @@ -0,0 +1,16 @@ +#!/bin/bash +set -e + +rm -rf ./build + +mkdir -p build +cd build + +cmake -G "CodeBlocks - Unix Makefiles" .. +make -j4 + +cd .. + +elf2tab -n radio-lib --stack 4096 --app-heap 2048 --kernel-heap 2048 \ + --kernel-major 2 --kernel-minor 1 \ + -v ./build/tock-sx1261 diff --git a/examples/NonArduino/Tock/libtock-c b/examples/NonArduino/Tock/libtock-c new file mode 160000 index 00000000..1c1f4c08 --- /dev/null +++ b/examples/NonArduino/Tock/libtock-c @@ -0,0 +1 @@ +Subproject commit 1c1f4c0810aa0fbd50aa91a11aaa7c05d2abb1bc diff --git a/examples/NonArduino/Tock/libtockHal.h b/examples/NonArduino/Tock/libtockHal.h new file mode 100644 index 00000000..34af2dfc --- /dev/null +++ b/examples/NonArduino/Tock/libtockHal.h @@ -0,0 +1,196 @@ +/* + RadioLib Non-Arduino Tock Library helper functions + + Licensed under the MIT License + + Copyright (c) 2023 Alistair Francis + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +#ifndef TOCK_HAL_H +#define TOCK_HAL_H + +// include RadioLib +#include + +// include all the dependencies +#include "libtock/lora_phy.h" +#include "libtock/gpio.h" +#include "libtock/timer.h" +#include "libtock/read_only_state.h" + +#define RADIO_BUSY 1 +#define RADIO_DIO_1 2 +#define RADIO_DIO_3 3 +#define RADIO_RESET 4 +// Skip the chips select as Tock handles this for us +#define RADIO_NSS RADIOLIB_NC + +// define Arduino-style macros +#define PIN_LOW (0x0) +#define PIN_HIGH (0x1) +#define PIN_INPUT (0x01) +#define PIN_OUTPUT (0x03) +#define PIN_RISING (0x01) +#define PIN_FALLING (0x02) + +typedef void (*gpioIrqFn)(void); + +/* + * Get the the timer frequency in Hz. + */ +int alarm_internal_frequency(uint32_t* frequency) { + syscall_return_t rval = command(0x0, 1, 0, 0); + return tock_command_return_u32_to_returncode(rval, frequency); +} + +int alarm_internal_read(uint32_t* time) { + syscall_return_t rval = command(0x0, 2, 0, 0); + return tock_command_return_u32_to_returncode(rval, time); +} + +static void lora_phy_gpio_Callback (int gpioPin, + __attribute__ ((unused)) int arg2, + __attribute__ ((unused)) int arg3, + void* userdata) +{ + gpioIrqFn fn = *(gpioIrqFn*)(&userdata); + + if (fn != NULL ) { + fn(); + } +} + +class TockHal : public RadioLibHal { + public: + // default constructor - initializes the base HAL and any needed private members + TockHal() + : RadioLibHal(PIN_INPUT, PIN_OUTPUT, PIN_LOW, PIN_HIGH, PIN_RISING, PIN_FALLING) { + } + + void init() override { + } + + void term() override { + } + + // GPIO-related methods (pinMode, digitalWrite etc.) should check + // RADIOLIB_NC as an alias for non-connected pins + void pinMode(uint32_t pin, uint32_t mode) override { + if(pin == RADIOLIB_NC) { + return; + } + + if (mode == PIN_OUTPUT) { + lora_phy_gpio_enable_output(pin); + } else if (mode == PIN_INPUT) { + lora_phy_gpio_enable_input(pin, PullDown); + } + } + + void digitalWrite(uint32_t pin, uint32_t value) override { + if(pin == RADIOLIB_NC) { + return; + } + + if (value) { + lora_phy_gpio_set(pin); + } else { + lora_phy_gpio_clear(pin); + } + } + + uint32_t digitalRead(uint32_t pin) override { + int value; + + if(pin == RADIOLIB_NC) { + return 0; + } + + lora_phy_gpio_read(pin, &value); + + return value; + } + + void attachInterrupt(uint32_t interruptNum, gpioIrqFn interruptCb, uint32_t mode) override { + if(interruptNum == RADIOLIB_NC) { + return; + } + + lora_phy_gpio_interrupt_callback(lora_phy_gpio_Callback, &interruptCb); + + // set GPIO as input and enable interrupts on it + lora_phy_gpio_enable_input(interruptNum, PullDown); + lora_phy_gpio_enable_interrupt(interruptNum, Change); + } + + void detachInterrupt(uint32_t interruptNum) override { + if(interruptNum == RADIOLIB_NC) { + return; + } + + lora_phy_gpio_disable_interrupt(interruptNum); + } + + void delay(unsigned long ms) override { + delay_ms( ms ); + } + + void delayMicroseconds(unsigned long us) override { + delay_ms( us * 1000 ); + } + + unsigned long millis() override { + uint32_t frequency, now; + + alarm_internal_frequency(&frequency); + alarm_internal_read(&now); + + return (now / frequency) * 1000; + } + + unsigned long micros() override { + return millis() / 1000; + } + + long pulseIn(uint32_t pin, uint32_t state, unsigned long timeout) override { + return 0; + } + + void spiBegin() { + } + + void spiBeginTransaction() { + } + + void spiTransfer(uint8_t* out, size_t len, uint8_t* in) { + lora_phy_read_write_sync((const char*) out, (char*) in, len); + } + + void spiEndTransaction() { + } + + void spiEnd() { + } + + private: +}; + +#endif diff --git a/examples/NonArduino/Tock/main.cpp b/examples/NonArduino/Tock/main.cpp new file mode 100644 index 00000000..56df5fb4 --- /dev/null +++ b/examples/NonArduino/Tock/main.cpp @@ -0,0 +1,77 @@ +/* + RadioLib Non-Arduino Tock Library test application + + Licensed under the MIT License + + Copyright (c) 2023 Alistair Francis + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +// include the library +#include + +// include the hardware abstraction layer +#include "libtockHal.h" + +// the entry point for the program +int main(void) { + printf("[SX1261] Initializing ... \n"); + + // create a new instance of the HAL class + TockHal* hal = new TockHal(); + + // now we can create the radio module + // pinout corresponds to the SparkFun LoRa Thing Plus - expLoRaBLE + // NSS pin: 0 + // DIO1 pin: 2 + // NRST pin: 4 + // BUSY pin: 1 + Module* tock_module = new Module(hal, RADIO_NSS, RADIO_DIO_1, RADIO_RESET, RADIO_BUSY); + SX1262* radio = new SX1262(tock_module); + + int state = radio->begin(); + if (state != RADIOLIB_ERR_NONE) { + printf("failed, code %d\n", state); + return 1; + } + printf("success!\n"); + + // loop forever + for(;;) { + yield_no_wait(); + // send a packet + printf("[SX1261] Transmitting packet ... \n"); + + state = radio->transmit("Hello World!"); + + if(state == RADIOLIB_ERR_NONE) { + // the packet was successfully transmitted + printf("success!\n"); + + // wait for a second before transmitting again + hal->delay(1000); + } else { + printf("failed, code %d\n", state); + } + + } + + return 0; +} diff --git a/examples/NonArduino/Tock/tock.cmake b/examples/NonArduino/Tock/tock.cmake new file mode 100644 index 00000000..fb3682fc --- /dev/null +++ b/examples/NonArduino/Tock/tock.cmake @@ -0,0 +1,51 @@ +# Tock target specific CMake file +# +# Licensed under the MIT License +# +# Copyright (c) 2023 Alistair Francis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# This is copied from https://github.com/Lora-net/LoRaMac-node/pull/1390 +# and has been relicensed by the original author + +include("toolchain-arm-none-eabi.cmake") + +if(NOT DEFINED LINKER_SCRIPT) +message(FATAL_ERROR "No linker script defined") +endif(NOT DEFINED LINKER_SCRIPT) +message("Linker script: ${LINKER_SCRIPT}") + +#--------------------------------------------------------------------------------------- +# Set compiler/linker flags +#--------------------------------------------------------------------------------------- + +set(STACK_SIZE 4096) +set(APP_HEAP_SIZE 2048) +set(KERNEL_HEAP_SIZE 2048) + +# Object build options +set(OBJECT_GEN_FLAGS "-mthumb -g2 -fno-builtin -mcpu=cortex-m4 -Wall -Wextra -pedantic -Wno-unused-parameter -ffunction-sections -fdata-sections -fomit-frame-pointer -mabi=aapcs -fno-unroll-loops -ffast-math -ftree-vectorize -frecord-gcc-switches -gdwarf-2 -Os -fdata-sections -ffunction-sections -fstack-usage -Wl,--emit-relocs -fPIC -mthumb -mfloat-abi=soft -msingle-pic-base -mpic-register=r9 -mno-pic-data-is-text-relative -D__TOCK__ -DSVCALL_AS_NORMAL_FUNCTION -DSOFTDEVICE_s130") + +set(CMAKE_C_FLAGS "${OBJECT_GEN_FLAGS} -std=gnu99 " CACHE INTERNAL "C Compiler options") +set(CMAKE_CXX_FLAGS "${OBJECT_GEN_FLAGS} -std=c++20 " CACHE INTERNAL "C++ Compiler options") +set(CMAKE_ASM_FLAGS "${OBJECT_GEN_FLAGS} -x assembler-with-cpp " CACHE INTERNAL "ASM Compiler options") + +# Linker flags +set(CMAKE_EXE_LINKER_FLAGS "-Wl,--gc-sections --specs=nano.specs --specs=nosys.specs -mthumb -g2 -mcpu=cortex-m4 -mabi=aapcs -T${LINKER_SCRIPT} -Wl,-Map=${CMAKE_PROJECT_NAME}.map -Xlinker --defsym=STACK_SIZE=${STACK_SIZE} -Xlinker --defsym=APP_HEAP_SIZE=${APP_HEAP_SIZE} -Xlinker --defsym=KERNEL_HEAP_SIZE=${KERNEL_HEAP_SIZE} -nostdlib -Wl,--start-group" CACHE INTERNAL "Linker options") diff --git a/examples/NonArduino/Tock/toolchain-arm-none-eabi.cmake b/examples/NonArduino/Tock/toolchain-arm-none-eabi.cmake new file mode 100644 index 00000000..685b070f --- /dev/null +++ b/examples/NonArduino/Tock/toolchain-arm-none-eabi.cmake @@ -0,0 +1,98 @@ +# Arm specific CMake file +# +# This is copied from: +# https://github.com/Lora-net/LoRaMac-node/blob/2bf36bde72f68257eb96b5c00900619546bedca8/cmake/toolchain-arm-none-eabi.cmake +# +# The below file is licensed as Revised BSD License +# See https://github.com/Lora-net/LoRaMac-node/blob/master/LICENSE for details + +## +## ______ _ +## / _____) _ | | +## ( (____ _____ ____ _| |_ _____ ____| |__ +## \____ \| ___ | (_ _) ___ |/ ___) _ \ +## _____) ) ____| | | || |_| ____( (___| | | | +## (______/|_____)_|_|_| \__)_____)\____)_| |_| +## (C)2013-2017 Semtech +## ___ _____ _ ___ _ _____ ___ ___ ___ ___ +## / __|_ _/_\ / __| |/ / __/ _ \| _ \/ __| __| +## \__ \ | |/ _ \ (__| ' <| _| (_) | / (__| _| +## |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___| +## embedded.connectivity.solutions.============== +## +## License: Revised BSD License, see LICENSE.TXT file included in the project +## Authors: Johannes Bruder ( STACKFORCE ), Miguel Luis ( Semtech ) +## +## +## CMake arm-none-eabi toolchain file +## + +# Append current directory to CMAKE_MODULE_PATH for making device specific cmake modules visible +list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) + +# Target definition +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR ARM) + +#--------------------------------------------------------------------------------------- +# Set toolchain paths +#--------------------------------------------------------------------------------------- +set(TOOLCHAIN arm-none-eabi) +if(NOT DEFINED TOOLCHAIN_PREFIX) + if(CMAKE_HOST_SYSTEM_NAME STREQUAL Linux) + set(TOOLCHAIN_PREFIX "/usr") + elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Darwin) + set(TOOLCHAIN_PREFIX "/usr/local") + elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL Windows) + message(STATUS "Please specify the TOOLCHAIN_PREFIX !\n For example: -DTOOLCHAIN_PREFIX=\"C:/Program Files/GNU Tools ARM Embedded\" ") + else() + set(TOOLCHAIN_PREFIX "/usr") + message(STATUS "No TOOLCHAIN_PREFIX specified, using default: " ${TOOLCHAIN_PREFIX}) + endif() +endif() +set(TOOLCHAIN_BIN_DIR ${TOOLCHAIN_PREFIX}/bin) +set(TOOLCHAIN_INC_DIR ${TOOLCHAIN_PREFIX}/${TOOLCHAIN}/include) +set(TOOLCHAIN_LIB_DIR ${TOOLCHAIN_PREFIX}/${TOOLCHAIN}/lib) + +# Set system depended extensions +if(WIN32) + set(TOOLCHAIN_EXT ".exe" ) +else() + set(TOOLCHAIN_EXT "" ) +endif() + +# Perform compiler test with static library +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +#--------------------------------------------------------------------------------------- +# Preset some general GCC Options +#--------------------------------------------------------------------------------------- + +# Options for DEBUG build +# -Og enables optimizations that do not interfere with debugging +# -g produce debugging information in the operating system's native format +set(CMAKE_C_FLAGS_DEBUG "-Og -g -DDEBUG" CACHE INTERNAL "C Compiler options for debug build type") +set(CMAKE_CXX_FLAGS_DEBUG "-Og -g -DDEBUG" CACHE INTERNAL "C++ Compiler options for debug build type") +set(CMAKE_ASM_FLAGS_DEBUG "-g" CACHE INTERNAL "ASM Compiler options for debug build type") +set(CMAKE_EXE_LINKER_FLAGS_DEBUG "" CACHE INTERNAL "Linker options for debug build type") + +# Options for RELEASE build +# -Os Optimize for size. -Os enables all -O2 optimizations +set(CMAKE_C_FLAGS_RELEASE "-Os" CACHE INTERNAL "C Compiler options for release build type") +set(CMAKE_CXX_FLAGS_RELEASE "-Os" CACHE INTERNAL "C++ Compiler options for release build type") +set(CMAKE_ASM_FLAGS_RELEASE "" CACHE INTERNAL "ASM Compiler options for release build type") +set(CMAKE_EXE_LINKER_FLAGS_RELEASE "" CACHE INTERNAL "Linker options for release build type") + +#--------------------------------------------------------------------------------------- +# Set compilers +#--------------------------------------------------------------------------------------- +set(CMAKE_C_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-gcc${TOOLCHAIN_EXT} CACHE INTERNAL "C Compiler") +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-g++${TOOLCHAIN_EXT} CACHE INTERNAL "C++ Compiler") +set(CMAKE_ASM_COMPILER ${TOOLCHAIN_BIN_DIR}/${TOOLCHAIN}-gcc${TOOLCHAIN_EXT} CACHE INTERNAL "ASM Compiler") + +set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_PREFIX}/${${TOOLCHAIN}} ${CMAKE_PREFIX_PATH}) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +