forked from arduino/ArduinoCore-zephyr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgen_arduino_files.cmake
61 lines (50 loc) · 2.09 KB
/
gen_arduino_files.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# get root dir for the project
cmake_path(SET TOP_DIR NORMALIZE ${CMAKE_CURRENT_LIST_DIR}/..)
# get list of variants to be applied
if(CMAKE_ARGC GREATER 3)
# cmake -P <script> <variant> ...
foreach(index RANGE 4 ${CMAKE_ARGC})
math(EXPR index "${index} - 1")
list(APPEND VARIANTS "${CMAKE_ARGV${index}}")
endforeach()
list(TRANSFORM VARIANTS REPLACE "/$" "")
list(TRANSFORM VARIANTS REPLACE ".*/" "")
else()
# build for all valid variants
file(GLOB VARIANTS RELATIVE ${TOP_DIR}/variants variants/*)
list(REMOVE_ITEM VARIANTS llext linked)
endif()
foreach(variant ${VARIANTS})
if(NOT IS_DIRECTORY variants/${variant})
continue()
endif()
cmake_path(SET dir ${TOP_DIR}/variants/${variant})
if(NOT EXISTS ${dir}/llext-edk/cmake.cflags)
continue()
endif()
message(STATUS "Processing ${variant}")
include(${dir}/llext-edk/cmake.cflags)
list(TRANSFORM LLEXT_ALL_INCLUDE_CFLAGS REPLACE "-I${dir}" "-iwithprefixbefore")
list(JOIN LLEXT_ALL_INCLUDE_CFLAGS "\n" EDK_INCLUDES)
file(WRITE ${dir}/includes.txt "${EDK_INCLUDES}")
# exclude -imacros entries in platform from the list, make sure no others are present
list(FILTER LLEXT_BASE_CFLAGS EXCLUDE REGEX "-imacros.*autoconf.h")
list(FILTER LLEXT_BASE_CFLAGS EXCLUDE REGEX "-imacros.*zephyr_stdint.h")
set(other_imacros "${LLEXT_BASE_CFLAGS}")
list(FILTER other_imacros INCLUDE REGEX "-imacros.*")
if(other_imacros)
message(FATAL_ERROR "Unexpected -imacros in LLEXT_BASE_CFLAGS: ${other_imacros}")
endif()
# exclude other problematic macros shared between C and C++
list(FILTER LLEXT_BASE_CFLAGS EXCLUDE REGEX "-fdiagnostics-color=always")
# (temp) generate C++ flags from C flags
set(LLEXT_BASE_CXXFLAGS ${LLEXT_BASE_CFLAGS})
list(FILTER LLEXT_BASE_CXXFLAGS EXCLUDE REGEX "-Wno-pointer-sign")
list(FILTER LLEXT_BASE_CXXFLAGS EXCLUDE REGEX "-Werror=implicit-int")
list(FILTER LLEXT_BASE_CXXFLAGS EXCLUDE REGEX "-std=c.*")
# save flag files
list(JOIN LLEXT_BASE_CFLAGS "\n" EDK_CFLAGS)
file(WRITE ${dir}/cflags.txt "${EDK_CFLAGS}")
list(JOIN LLEXT_BASE_CXXFLAGS "\n" EDK_CXXFLAGS)
file(WRITE ${dir}/cxxflags.txt "${EDK_CXXFLAGS}")
endforeach()