blob: 8cf422baf806269e12dd9e07936e14722ed7ced8 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001From d49e5ea2988b2086c7deaa40d3e077531e449844 Mon Sep 17 00:00:00 2001
2From: Xue Liu <liuxuenetmail@gmail.com>
3Date: Thu, 21 Feb 2019 00:27:42 +0100
4Subject: [PATCH 1/3] - add cmake support
5
6Signed-off-by: Xue Liu <liuxuenetmail@gmail.com>
7---
8 CMakeLists.txt | 77 +++++++++++++++
9 cmake/loragw-config.cmake | 1 +
10 libloragw/CMakeLists.txt | 150 ++++++++++++++++++++++++++++++
11 libloragw/loragw.pc.in | 10 ++
12 libloragw/loragw_config.h.in | 14 +++
13 util_lbt_test/CMakeLists.txt | 23 +++++
14 util_pkt_logger/CMakeLists.txt | 29 ++++++
15 util_spectral_scan/CMakeLists.txt | 23 +++++
16 util_spi_stress/CMakeLists.txt | 23 +++++
17 util_tx_continuous/CMakeLists.txt | 23 +++++
18 util_tx_test/CMakeLists.txt | 23 +++++
19 11 files changed, 396 insertions(+)
20 create mode 100644 CMakeLists.txt
21 create mode 100644 cmake/loragw-config.cmake
22 create mode 100644 libloragw/CMakeLists.txt
23 create mode 100644 libloragw/loragw.pc.in
24 create mode 100644 libloragw/loragw_config.h.in
25 create mode 100644 util_lbt_test/CMakeLists.txt
26 create mode 100644 util_pkt_logger/CMakeLists.txt
27 create mode 100644 util_spectral_scan/CMakeLists.txt
28 create mode 100644 util_spi_stress/CMakeLists.txt
29 create mode 100644 util_tx_continuous/CMakeLists.txt
30 create mode 100644 util_tx_test/CMakeLists.txt
31
32--- /dev/null
33+++ b/CMakeLists.txt
34@@ -0,0 +1,77 @@
35+# -- Minimum required version
36+cmake_minimum_required (VERSION 3.2)
37+
38+# -- Project name
39+project (lora_gateway)
40+
41+# -- Various includes
42+include (CMakePackageConfigHelpers)
43+include (GNUInstallDirs)
44+include (CheckFunctionExists)
45+
46+# -- set c99 standard default
47+set(CMAKE_C_STANDARD 99)
48+
49+# -- options for shared lib (defaults off)
50+option(lora_gateway_build_shared_libs "build as a shared library" OFF)
51+set(BUILD_SHARED_LIBS ${lora_gateway_build_shared_libs})
52+
53+# -- Required to build
54+set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
55+set(THREADS_PREFER_PTHREAD_FLAG TRUE)
56+find_package(Threads REQUIRED)
57+
58+# -- Versioning with git tag
59+if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
60+ execute_process(
61+ COMMAND git describe --tags --always
62+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
63+ OUTPUT_VARIABLE "lora_gateway_VERSION"
64+ ERROR_QUIET
65+ OUTPUT_STRIP_TRAILING_WHITESPACE)
66+ if(lora_gateway_VERSION STREQUAL "")
67+ set(lora_gateway_VERSION 0)
68+ endif(lora_gateway_VERSION STREQUAL "")
69+ message( STATUS "Git full version: ${lora_gateway_VERSION}" )
70+ execute_process(
71+ COMMAND /bin/bash -c "git describe --tags --abbrev=0 | cut --delimiter='v' --fields=2"
72+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
73+ OUTPUT_VARIABLE "lora_gateway_VERSION_SHORT"
74+ ERROR_QUIET
75+ OUTPUT_STRIP_TRAILING_WHITESPACE)
76+ if(lora_gateway_VERSION_SHORT STREQUAL "")
77+ set(lora_gateway_VERSION_SHORT 0)
78+ endif(lora_gateway_VERSION_SHORT STREQUAL "")
79+ message( STATUS "Git version: ${lora_gateway_VERSION_SHORT}" )
80+else(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
81+ set(lora_gateway_VERSION_SHORT 0)
82+ set(lora_gateway_VERSION 0)
83+endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
84+
85+# when building, don't use the install RPATH already
86+# (but later on when installing)
87+SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
88+if (NOT (${CMAKE_INSTALL_PREFIX} STREQUAL "/usr" ) )
89+ SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
90+endif()
91+
92+# -- add the core library
93+add_subdirectory(libloragw)
94+
95+# -- add util_lbt_test
96+add_subdirectory(util_lbt_test)
97+
98+# -- add util_pkt_logger
99+add_subdirectory(util_pkt_logger)
100+
101+# -- add util_pkt_logger
102+add_subdirectory(util_spectral_scan)
103+
104+# -- add util_spi_stress
105+add_subdirectory(util_spi_stress)
106+
107+# -- add util_tx_continuous
108+add_subdirectory(util_tx_continuous)
109+
110+# -- add util_tx_test
111+add_subdirectory(util_tx_test)
112--- /dev/null
113+++ b/cmake/loragw-config.cmake
114@@ -0,0 +1 @@
115+include("${CMAKE_CURRENT_LIST_DIR}/loragw-targets.cmake")
116--- /dev/null
117+++ b/libloragw/CMakeLists.txt
118@@ -0,0 +1,150 @@
119+set(TARGET loragw)
120+
121+add_library(${TARGET} "")
122+
123+# -- add additional debug options
124+# Set the DEBUG_* to 1 to activate debug mode in individual modules.
125+# Warning: that makes the module *very verbose*, do not use for production
126+option(DEBUG_AUX "Active debug mode in AUX module" OFF)
127+option(DEBUG_SPI "Active debug mode in SPI module" OFF)
128+option(DEBUG_REG "Active debug mode in REG module" OFF)
129+option(DEBUG_HAL "Active debug mode in HAL module" OFF)
130+option(DEBUG_GPIO "Active debug mode in GPIO module" OFF)
131+option(DEBUG_LBT "Active debug mode in LBT module" OFF)
132+option(DEBUG_GPS "Active debug mode in GPS module" OFF)
133+
134+message("-- Build with debug AUX: ${DEBUG_AUX}")
135+message("-- Build with debug SPI: ${DEBUG_SPI}")
136+message("-- Build with debug REG: ${DEBUG_REG}")
137+message("-- Build with debug HAL: ${DEBUG_HAL}")
138+message("-- Build with debug GPIO: ${DEBUG_GPIO}")
139+message("-- Build with debug LBT: ${DEBUG_LBT}")
140+message("-- Build with debug GPS: ${DEBUG_GPS}")
141+
142+# -- add the compile options
143+target_compile_options(
144+ ${TARGET}
145+ PRIVATE
146+ -Werror
147+ -Wall
148+ -Wextra
149+)
150+
151+target_sources(${TARGET}
152+ PRIVATE
153+ ${CMAKE_CURRENT_LIST_DIR}/src/loragw_aux.c
154+ ${CMAKE_CURRENT_LIST_DIR}/src/loragw_fpga.c
155+ ${CMAKE_CURRENT_LIST_DIR}/src/loragw_gps.c
156+ ${CMAKE_CURRENT_LIST_DIR}/src/loragw_hal.c
157+ ${CMAKE_CURRENT_LIST_DIR}/src/loragw_lbt.c
158+ ${CMAKE_CURRENT_LIST_DIR}/src/loragw_radio.c
159+ ${CMAKE_CURRENT_LIST_DIR}/src/loragw_reg.c
160+ ${CMAKE_CURRENT_LIST_DIR}/src/loragw_spi.native.c
161+)
162+
163+# -- add the public headers
164+set (${TARGET}_PUBLIC_HEADERS
165+ ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_aux.h
166+ ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_fpga.h
167+ ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_gps.h
168+ ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_hal.h
169+ ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_lbt.h
170+ ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_radio.h
171+ ${CMAKE_CURRENT_LIST_DIR}/inc/loragw_reg.h
172+)
173+
174+target_include_directories(${TARGET}
175+ PRIVATE
176+ ${CMAKE_CURRENT_LIST_DIR}
177+ ${CMAKE_CURRENT_LIST_DIR}/inc
178+ PUBLIC
179+ $<INSTALL_INTERFACE:include>
180+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
181+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/inc>
182+)
183+
184+configure_file(${CMAKE_CURRENT_LIST_DIR}/${TARGET}_config.h.in "${CMAKE_CURRENT_BINARY_DIR}/config.h" @ONLY)
185+
186+target_link_libraries(${TARGET}
187+ PUBLIC
188+ Threads::Threads
189+ m
190+)
191+
192+set_target_properties(${TARGET} PROPERTIES VERSION ${lora_gateway_VERSION_SHORT})
193+set_target_properties(${TARGET} PROPERTIES SOVERSION ${lora_gateway_VERSION_SHORT})
194+set_target_properties(${TARGET} PROPERTIES PUBLIC_HEADER "${CMAKE_CURRENT_BINARY_DIR}/config.h;${${TARGET}_PUBLIC_HEADERS}")
195+
196+# -- add the install targets
197+install (TARGETS ${TARGET}
198+ EXPORT ${TARGET}_targets
199+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib
200+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
201+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TARGET}
202+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TARGET}
203+)
204+
205+# -- add pkg config file
206+configure_file ("${CMAKE_CURRENT_LIST_DIR}/${TARGET}.pc.in" "${PROJECT_BINARY_DIR}/${TARGET}.pc" @ONLY)
207+install (FILES ${PROJECT_BINARY_DIR}/${TARGET}.pc DESTINATION lib/pkgconfig)
208+
209+# -- write cmake package config file
210+write_basic_package_version_file(
211+ "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}/${TARGET}-config-version.cmake"
212+ VERSION ${lora_gateway_VERSION}
213+ COMPATIBILITY AnyNewerVersion
214+)
215+
216+export(EXPORT ${TARGET}_targets
217+ FILE "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}/${TARGET}-targets.cmake"
218+ NAMESPACE Semtech::
219+)
220+
221+configure_file(${PROJECT_SOURCE_DIR}/cmake/${TARGET}-config.cmake
222+ "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}/${TARGET}-config.cmake"
223+ COPYONLY
224+)
225+
226+set(ConfigPackageLocation lib/cmake/${TARGET})
227+
228+install(EXPORT ${TARGET}_targets
229+ FILE ${TARGET}-targets.cmake
230+ NAMESPACE Semtech::
231+ DESTINATION ${ConfigPackageLocation}
232+)
233+
234+install(
235+ FILES ${PROJECT_SOURCE_DIR}/cmake/${TARGET}-config.cmake "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}/${TARGET}-config-version.cmake"
236+ DESTINATION ${ConfigPackageLocation}
237+ COMPONENT Devel
238+)
239+
240+# -- add test programs
241+foreach(TEST test_loragw_spi test_loragw_gps test_loragw_reg test_loragw_hal test_loragw_cal)
242+ add_executable(${TEST} "")
243+
244+ target_sources(${TEST}
245+ PRIVATE
246+ ${CMAKE_CURRENT_LIST_DIR}/tst/${TEST}.c
247+ )
248+
249+ target_include_directories(${TEST}
250+ PRIVATE
251+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
252+ $<INSTALL_INTERFACE:include>
253+ ${CMAKE_CURRENT_LIST_DIR}/inc
254+ ${CMAKE_CURRENT_BINARY_DIR}
255+ )
256+
257+ target_link_libraries(${TEST}
258+ PRIVATE
259+ loragw
260+ )
261+
262+ install (
263+ TARGETS ${TEST}
264+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
265+ )
266+
267+endforeach()
268+
269--- /dev/null
270+++ b/libloragw/loragw.pc.in
271@@ -0,0 +1,10 @@
272+prefix=@CMAKE_INSTALL_PREFIX@
273+exec_prefix=${prefix}/bin
274+includedir=${prefix}/include/libloragw
275+libdir=${prefix}/lib
276+
277+Name: LIBLORAGW
278+Description: BLANK_TEXT
279+Version: @lora_gateway_VERSION@
280+Cflags: -I${includedir}
281+Libs: -L${libdir} -lloragw
282--- /dev/null
283+++ b/libloragw/loragw_config.h.in
284@@ -0,0 +1,14 @@
285+#ifndef _LORAGW_CONFIGURATION_H
286+#define _LORAGW_CONFIGURATION_H
287+
288+#define LIBLORAGW_VERSION "@lora_gateway_VERSION_SHORT@"
289+
290+#cmakedefine01 DEBUG_AUX
291+#cmakedefine01 DEBUG_SPI
292+#cmakedefine01 DEBUG_REG
293+#cmakedefine01 DEBUG_HAL
294+#cmakedefine01 DEBUG_GPS
295+#cmakedefine01 DEBUG_GPIO
296+#cmakedefine01 DEBUG_LBT
297+
298+#endif
299--- /dev/null
300+++ b/util_lbt_test/CMakeLists.txt
301@@ -0,0 +1,23 @@
302+
303+add_executable(util_lbt_test "")
304+target_sources(util_lbt_test
305+ PRIVATE
306+ ${CMAKE_CURRENT_LIST_DIR}/src/util_lbt_test.c
307+)
308+
309+target_link_libraries(util_lbt_test
310+ PUBLIC
311+ loragw
312+)
313+
314+set_target_properties(util_lbt_test PROPERTIES
315+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
316+)
317+
318+# add the install targets
319+install (
320+ TARGETS util_lbt_test
321+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib
322+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
323+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
324+)
325--- /dev/null
326+++ b/util_pkt_logger/CMakeLists.txt
327@@ -0,0 +1,29 @@
328+
329+add_executable(util_pkt_logger "")
330+target_sources(util_pkt_logger
331+ PRIVATE
332+ ${CMAKE_CURRENT_LIST_DIR}/src/util_pkt_logger.c
333+ ${CMAKE_CURRENT_LIST_DIR}/src/parson.c
334+)
335+
336+target_include_directories(util_pkt_logger
337+ PRIVATE
338+ ${CMAKE_CURRENT_LIST_DIR}/inc
339+)
340+
341+target_link_libraries(util_pkt_logger
342+ PUBLIC
343+ loragw
344+)
345+
346+set_target_properties(util_pkt_logger PROPERTIES
347+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
348+)
349+
350+# add the install targets
351+install (
352+ TARGETS util_pkt_logger
353+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib
354+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
355+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
356+)
357--- /dev/null
358+++ b/util_spectral_scan/CMakeLists.txt
359@@ -0,0 +1,23 @@
360+
361+add_executable(util_spectral_scan "")
362+target_sources(util_spectral_scan
363+ PRIVATE
364+ ${CMAKE_CURRENT_LIST_DIR}/src/util_spectral_scan.c
365+)
366+
367+target_link_libraries(util_spectral_scan
368+ PUBLIC
369+ loragw
370+)
371+
372+set_target_properties(util_spectral_scan PROPERTIES
373+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
374+)
375+
376+# add the install targets
377+install (
378+ TARGETS util_spectral_scan
379+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib
380+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
381+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
382+)
383--- /dev/null
384+++ b/util_spi_stress/CMakeLists.txt
385@@ -0,0 +1,23 @@
386+
387+add_executable(util_spi_stress "")
388+target_sources(util_spi_stress
389+ PRIVATE
390+ ${CMAKE_CURRENT_LIST_DIR}/src/util_spi_stress.c
391+)
392+
393+target_link_libraries(util_spi_stress
394+ PUBLIC
395+ loragw
396+)
397+
398+set_target_properties(util_spi_stress PROPERTIES
399+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
400+)
401+
402+# add the install targets
403+install (
404+ TARGETS util_spi_stress
405+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib
406+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
407+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
408+)
409--- /dev/null
410+++ b/util_tx_continuous/CMakeLists.txt
411@@ -0,0 +1,23 @@
412+
413+add_executable(util_tx_continuous "")
414+target_sources(util_tx_continuous
415+ PRIVATE
416+ ${CMAKE_CURRENT_LIST_DIR}/src/util_tx_continuous.c
417+)
418+
419+target_link_libraries(util_tx_continuous
420+ PUBLIC
421+ loragw
422+)
423+
424+set_target_properties(util_tx_continuous PROPERTIES
425+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
426+)
427+
428+# add the install targets
429+install (
430+ TARGETS util_tx_continuous
431+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib
432+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
433+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
434+)
435--- /dev/null
436+++ b/util_tx_test/CMakeLists.txt
437@@ -0,0 +1,23 @@
438+
439+add_executable(util_tx_test "")
440+target_sources(util_tx_test
441+ PRIVATE
442+ ${CMAKE_CURRENT_LIST_DIR}/src/util_tx_test.c
443+)
444+
445+target_link_libraries(util_tx_test
446+ PUBLIC
447+ loragw
448+)
449+
450+set_target_properties(util_tx_test PROPERTIES
451+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
452+)
453+
454+# add the install targets
455+install (
456+ TARGETS util_tx_test
457+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT shlib
458+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
459+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
460+)