1##
2##   ______                              _
3##  / _____)             _              | |
4## ( (____  _____ ____ _| |_ _____  ____| |__
5##  \____ \| ___ |    (_   _) ___ |/ ___)  _ \
6##  _____) ) ____| | | || |_| ____( (___| | | |
7## (______/|_____)_|_|_| \__)_____)\____)_| |_|
8## (C)2013-2017 Semtech
9##  ___ _____ _   ___ _  _____ ___  ___  ___ ___
10## / __|_   _/_\ / __| |/ / __/ _ \| _ \/ __| __|
11## \__ \ | |/ _ \ (__| ' <| _| (_) |   / (__| _|
12## |___/ |_/_/ \_\___|_|\_\_| \___/|_|_\\___|___|
13## embedded.connectivity.solutions.==============
14##
15## License:  Revised BSD License, see LICENSE.TXT file included in the project
16## Authors:  Johannes Bruder (STACKFORCE), Miguel Luis (Semtech)
17##
18project(lora-mac)
19cmake_minimum_required(VERSION 3.6)
20
21#---------------------------------------------------------------------------------------
22# Options
23#---------------------------------------------------------------------------------------
24
25# Allow switching of target platform
26set(BOARD_LIST NAMote72 NucleoL073 NucleoL152 NucleoL476 SAMR34 SKiM880B SKiM980A SKiM881AXL B-L072Z-LRWAN1)
27set(BOARD NucleoL073 CACHE STRING "Default target platform is NucleoL073")
28set_property(CACHE BOARD PROPERTY STRINGS ${BOARD_LIST})
29
30# Allow switching of MBED shields
31set(MBED_RADIO_SHIELD_LIST SX1272MB2DAS SX1276MB1LAS SX1276MB1MAS SX1261MBXBAS SX1262MBXCAS SX1262MBXDAS )
32set(MBED_RADIO_SHIELD SX1261MBXBAS CACHE STRING "Default MBED radio shield is SX1261MBXBAS")
33set_property(CACHE MBED_RADIO_SHIELD PROPERTY STRINGS ${MBED_RADIO_SHIELD_LIST})
34
35# Allow switching of secure-elements
36set(SECURE_ELEMENT_LIST SOFT_SE LR1110_SE ATECC608A_TNGLORA_SE)
37set(SECURE_ELEMENT SOFT_SE CACHE STRING "Default secure element is SOFT_SE")
38set_property(CACHE SECURE_ELEMENT PROPERTY STRINGS ${SECURE_ELEMENT_LIST})
39
40# Allow switching of Applications
41set(APPLICATION_LIST LoRaMac ping-pong rx-sensi tx-cw )
42set(APPLICATION LoRaMac CACHE STRING "Default Application is LoRaMac")
43set_property(CACHE APPLICATION PROPERTY STRINGS ${APPLICATION_LIST})
44
45# Switch for USB-Uart support, enable it for some Applications who needs it.
46option(USE_USB_CDC "Use USB-Uart" OFF)
47
48# Switch for debugger support.
49option(USE_DEBUGGER "Use Debugger" ON)
50
51# Switch for Class B support of LoRaMac.
52option(CLASSB_ENABLED "Class B support of LoRaMac" OFF)
53
54#---------------------------------------------------------------------------------------
55# Target Boards
56#---------------------------------------------------------------------------------------
57
58if(BOARD STREQUAL NAMote72)
59    # Configure toolchain for NAMote72
60    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/NAMote72/cmsis/arm-gcc/stm32l152xc_flash.ld)
61    include(stm32l1)
62
63    # Build platform specific board implementation
64    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/NAMote72)
65
66    # Configure radio
67    set(RADIO sx1272 CACHE INTERNAL "Radio sx1272 selected")
68
69elseif(BOARD STREQUAL NucleoL073)
70    # Configure toolchain for NucleoL073
71    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/NucleoL073/cmsis/arm-gcc/stm32l073xx_flash.ld)
72    include(stm32l0)
73
74    # Build platform specific board implementation
75    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/NucleoL073)
76
77    # Configure radio
78    if(MBED_RADIO_SHIELD STREQUAL SX1272MB2DAS)
79        set(RADIO sx1272 CACHE INTERNAL "Radio sx1272 selected")
80    elseif(MBED_RADIO_SHIELD STREQUAL SX1276MB1LAS OR MBED_RADIO_SHIELD STREQUAL SX1276MB1MAS)
81        set(RADIO sx1276 CACHE INTERNAL "Radio sx1276 selected")
82    elseif(MBED_RADIO_SHIELD STREQUAL SX1261MBXBAS OR MBED_RADIO_SHIELD STREQUAL SX1262MBXCAS OR MBED_RADIO_SHIELD STREQUAL SX1262MBXDAS)
83        set(RADIO sx126x CACHE INTERNAL "Radio sx126x selected")
84    elseif(MBED_RADIO_SHIELD STREQUAL LR1110MB1XXS)
85        set(RADIO lr1110 CACHE INTERNAL "Radio lr1110 selected")
86    else()
87        message(STATUS "Please specify the MBED_RADIO_SHIELD!\nPossible values are: SX1272MB2DAS, SX1276MB1LAS, SX1276MB1MAS, SX1261MBXBAS, SX1262MBXCAS, SX1262MBXDAS and LR1110MB1XXS.")
88    endif()
89
90elseif(BOARD STREQUAL NucleoL152)
91    # Configure toolchain for NucleoL152
92    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/NucleoL152/cmsis/arm-gcc/stm32l152xe_flash.ld)
93    include(stm32l1)
94
95    # Build platform specific board implementation
96    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/NucleoL152)
97
98    # Configure radio
99    if(MBED_RADIO_SHIELD STREQUAL SX1272MB2DAS)
100        set(RADIO sx1272 CACHE INTERNAL "Radio sx1272 selected")
101    elseif(MBED_RADIO_SHIELD STREQUAL SX1276MB1LAS OR MBED_RADIO_SHIELD STREQUAL SX1276MB1MAS)
102        set(RADIO sx1276 CACHE INTERNAL "Radio sx1276 selected")
103    elseif(MBED_RADIO_SHIELD STREQUAL SX1261MBXBAS OR MBED_RADIO_SHIELD STREQUAL SX1262MBXCAS OR MBED_RADIO_SHIELD STREQUAL SX1262MBXDAS)
104        set(RADIO sx126x CACHE INTERNAL "Radio sx126x selected")
105    elseif(MBED_RADIO_SHIELD STREQUAL LR1110MB1XXS)
106        set(RADIO lr1110 CACHE INTERNAL "Radio lr1110 selected")
107    else()
108        message(STATUS "Please specify the MBED_RADIO_SHIELD!\nPossible values are: SX1272MB2DAS, SX1276MB1LAS, SX1276MB1MAS, SX1261MBXBAS, SX1262MBXCAS, SX1262MBXDAS and  LR1110MB1XXS.")
109    endif()
110
111elseif(BOARD STREQUAL NucleoL476)
112    # Configure toolchain for NucleoL476
113    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/NucleoL476/cmsis/arm-gcc/stm32l476rgtx_flash.ld)
114    include(stm32l4)
115
116    # Build platform specific board implementation
117    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/NucleoL476)
118
119    # Configure radio
120    if(MBED_RADIO_SHIELD STREQUAL SX1272MB2DAS)
121        set(RADIO sx1272 CACHE INTERNAL "Radio sx1272 selected")
122    elseif(MBED_RADIO_SHIELD STREQUAL SX1276MB1LAS OR MBED_RADIO_SHIELD STREQUAL SX1276MB1MAS)
123        set(RADIO sx1276 CACHE INTERNAL "Radio sx1276 selected")
124    elseif(MBED_RADIO_SHIELD STREQUAL SX1261MBXBAS OR MBED_RADIO_SHIELD STREQUAL SX1262MBXCAS OR MBED_RADIO_SHIELD STREQUAL SX1262MBXDAS)
125        set(RADIO sx126x CACHE INTERNAL "Radio sx126x selected")
126    elseif(MBED_RADIO_SHIELD STREQUAL LR1110MB1XXS)
127        set(RADIO lr1110 CACHE INTERNAL "Radio lr1110 selected")
128    else()
129        message(STATUS "Please specify the MBED_RADIO_SHIELD!\nPossible values are: SX1272MB2DAS, SX1276MB1LAS, SX1276MB1MAS, SX1261MBXBAS, SX1262MBXCAS, SX1262MBXDAS and  LR1110MB1XXS.")
130    endif()
131
132elseif(BOARD STREQUAL SAMR34)
133    # Configure toolchain for SAMR34
134    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/mcu/saml21/saml21b/gcc/gcc/saml21j18b_flash.ld)
135    include(samr34)
136
137    # Build platform specific board implementation
138    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/SAMR34)
139
140    # Configure radio
141    set(RADIO sx1276 CACHE INTERNAL "Radio sx1276 selected")
142
143elseif(BOARD STREQUAL SKiM880B)
144    # Configure toolchain for SKiM881AXL
145    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/SKiM880B/cmsis/arm-gcc/stm32l151xba_flash.ld)
146    include(stm32l1)
147
148    # Build platform specific board implementation
149    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/SKiM880B)
150
151    # Configure radio
152    set(RADIO sx1272 CACHE INTERNAL "Radio sx1272 selected")
153
154elseif(BOARD STREQUAL SKiM980A)
155    # Configure toolchain for SKiM881AXL
156    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/SKiM980A/cmsis/arm-gcc/stm32l151xba_flash.ld)
157    include(stm32l1)
158
159    # Build platform specific board implementation
160    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/SKiM980A)
161
162    # Configure radio
163    set(RADIO sx1272 CACHE INTERNAL "Radio sx1272 selected")
164
165elseif(BOARD STREQUAL SKiM881AXL)
166    # Configure toolchain for SKiM881AXL
167    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/SKiM881AXL/cmsis/arm-gcc/stm32l081xx_flash.ld)
168    include(stm32l0)
169
170    # Build platform specific board implementation
171    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/SKiM881AXL)
172
173    # Configure radio
174    set(RADIO sx1272 CACHE INTERNAL "Radio sx1272 selected")
175
176elseif(BOARD STREQUAL B-L072Z-LRWAN1)
177    # Configure toolchain for B-L072Z-LRWAN1
178    set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/boards/B-L072Z-LRWAN1/cmsis/arm-gcc/stm32l072xx_flash.ld)
179    include(stm32l0)
180
181    # Build platform specific board implementation
182    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards/B-L072Z-LRWAN1)
183
184    # Configure radio
185    set(RADIO sx1276 CACHE INTERNAL "Radio sx1276 selected")
186endif()
187
188#---------------------------------------------------------------------------------------
189# General Components
190#---------------------------------------------------------------------------------------
191
192add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/boards)
193
194add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/radio)
195
196add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/system)
197
198add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/mac)
199
200add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/peripherals)
201
202#---------------------------------------------------------------------------------------
203# Applications
204#---------------------------------------------------------------------------------------
205
206if(APPLICATION STREQUAL LoRaMac)
207
208    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/apps/LoRaMac)
209
210elseif(APPLICATION STREQUAL ping-pong)
211
212    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/apps/ping-pong)
213
214elseif(APPLICATION STREQUAL rx-sensi)
215
216    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/apps/rx-sensi)
217
218elseif(APPLICATION STREQUAL tx-cw)
219
220    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/apps/tx-cw)
221
222endif()
223