1
0
Fork 0
mirror of https://github.com/iNavFlight/inav.git synced 2025-07-17 13:25:27 +03:00
inav/cmake/inav.cmake
Alberto García Hierro 8035a59639 [BUILD] Initial and very basic support for CMake
Only F411 based targets have been ported for now
2020-07-24 21:41:51 +01:00

65 lines
2 KiB
CMake

set(INAV_INCLUDE_DIRS
"${INAV_LIB_DIR}"
"${INAV_MAIN_SRC_DIR}"
"${INAV_LIB_DIR}/main/MAVLink"
)
# TODO: We need a way to override HSE_VALUE
set(INAV_DEFINITIONS
__FORKNAME__=inav
__REVISION__="${GIT_SHORT_HASH}"
HSE_VALUE=8000000
)
set(INAV_COMPILE_OPTIONS
-Wall
-Wextra
-Wunsafe-loop-optimizations
-Wdouble-promotion
-Wstrict-prototypes
-Werror=switch
)
macro(main_sources) # list-var
list(TRANSFORM ${ARGV0} PREPEND "${INAV_MAIN_SRC_DIR}/")
endmacro()
macro(exclude_basenames) # list-var excludes-var
set(_filtered "")
foreach(item ${${ARGV0}})
get_filename_component(basename ${item} NAME)
if (NOT ${basename} IN_LIST ${ARGV1})
list(APPEND _filtered ${item})
endif()
endforeach()
set(${ARGV0} ${_filtered})
endmacro()
macro(glob_except) # var-name pattern excludes-var
file(GLOB ${ARGV0} ${ARGV1})
exclude_basenames(${ARGV0} ${ARGV2})
endmacro()
function(setup_firmware_target name)
target_compile_options(${name} PRIVATE ${INAV_COMPILE_OPTIONS})
target_include_directories(${name} PRIVATE ${INAV_INCLUDE_DIRS})
target_compile_definitions(${name} PRIVATE ${INAV_DEFINITIONS} __TARGET__="${name}")
enable_settings(${name})
# XXX: Don't make SETTINGS_GENERATED_C part of the build,
# since it's compiled via #include in settings.c. This will
# change once we move off PGs
target_sources(${name} PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/${name}/${SETTINGS_GENERATED_H}")
set_target_properties(${name} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)
get_property(targets GLOBAL PROPERTY VALID_TARGETS)
set_property(GLOBAL PROPERTY VALID_TARGETS "${targets} ${name}")
endfunction()
function(collect_targets)
get_property(targets GLOBAL PROPERTY VALID_TARGETS)
list(SORT targets)
add_custom_target("targets"
COMMAND cmake -E echo "Valid targets: ${targets}")
set_property(TARGET "targets" PROPERTY TARGET_MESSAGES OFF)
endfunction()