|
|
@ -1,6 +1,26 @@ |
|
|
|
|
|
|
|
# apm_option: options parsing for ardupilotmega |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# OPTIONS: |
|
|
|
|
|
|
|
# ADVANCED - indicates this option is advaned (hidden in gui unless advanced selected) |
|
|
|
|
|
|
|
# DEFINE_ONLY - this flag is either indicates that the variable is defined if true, and not defined if false |
|
|
|
|
|
|
|
# BUILD_FLAG - this flag forces the variable to be added to build flags, for files that |
|
|
|
|
|
|
|
# don't include the config header |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# SINGLE INPUT ARGUMENTS: (can only pass one arguments) |
|
|
|
|
|
|
|
# TYPE - the type of the argument (BOOL for on/off variables/ STRING for all others) |
|
|
|
|
|
|
|
# DESCRIPTION - description of option, shown as tool-tip and written in config file |
|
|
|
|
|
|
|
# DEFAULT - the default value of the option |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# MULTIPLE VARIABLE ARGUMENTS: (can pass a lit of items) |
|
|
|
|
|
|
|
# OPTIONS - values that this option may take, if only a finite set is possible, creates combo-box in gui |
|
|
|
|
|
|
|
# DEPENDS - a list of booleans that this argument depends on, can be used to disable options when the |
|
|
|
|
|
|
|
# are not appropriate |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# Author: James Goppert |
|
|
|
|
|
|
|
# |
|
|
|
function(apm_option NAME) |
|
|
|
function(apm_option NAME) |
|
|
|
cmake_parse_arguments(ARG |
|
|
|
cmake_parse_arguments(ARG |
|
|
|
"ADVANCED;DEFINE_ONLY" |
|
|
|
"ADVANCED;DEFINE_ONLY;BUILD_FLAG" |
|
|
|
"TYPE;DESCRIPTION;DEFAULT" "OPTIONS;DEPENDS" ${ARGN}) |
|
|
|
"TYPE;DESCRIPTION;DEFAULT" "OPTIONS;DEPENDS" ${ARGN}) |
|
|
|
|
|
|
|
|
|
|
|
#message(STATUS "parsing argument: ${NAME}") |
|
|
|
#message(STATUS "parsing argument: ${NAME}") |
|
|
@ -21,18 +41,30 @@ function(apm_option NAME) |
|
|
|
# force variable reinit if it was internal (hidden) |
|
|
|
# force variable reinit if it was internal (hidden) |
|
|
|
get_property(VAR_TYPE CACHE ${NAME} PROPERTY TYPE) |
|
|
|
get_property(VAR_TYPE CACHE ${NAME} PROPERTY TYPE) |
|
|
|
if ("${VAR_TYPE}" STREQUAL "INTERNAL") |
|
|
|
if ("${VAR_TYPE}" STREQUAL "INTERNAL") |
|
|
|
message(STATUS "\tVAR_TYPE: ${VAR_TYPE}") |
|
|
|
#message(STATUS "\tVAR_TYPE: ${VAR_TYPE}") |
|
|
|
set("${NAME}" "${ARG_DEFAULT}" CACHE "${ARG_TYPE}" "${ARG_DESCRIPTION}" FORCE) |
|
|
|
set("${NAME}" "${ARG_DEFAULT}" CACHE "${ARG_TYPE}" "${ARG_DESCRIPTION}" FORCE) |
|
|
|
|
|
|
|
|
|
|
|
# if not hidden, add it to the global options list |
|
|
|
# if a build flag, initialize it and add it to the global options list |
|
|
|
else() |
|
|
|
elseif(${ARG_BUILD_FLAG}) |
|
|
|
set(APM_OPTIONS ${APM_OPTIONS} ${NAME} CACHE INTERNAL "list of all options") |
|
|
|
#message(STATUS "build flag found for item ${NAME}") |
|
|
|
list(REMOVE_DUPLICATES APM_OPTIONS) |
|
|
|
set(APM_BUILD_FLAGS_LIST ${APM_BUILD_FLAGS_LIST} ${NAME} CACHE INTERNAL "list of all build flags") |
|
|
|
#message(STATUS "APM_OPTIONS: ${APM_OPTIONS}") |
|
|
|
list(REMOVE_DUPLICATES APM_BUILD_FLAGS_LIST) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# if not hidden, and not a build flag, add it to the global options list |
|
|
|
|
|
|
|
else() |
|
|
|
|
|
|
|
set(APM_OPTIONS_LIST ${APM_OPTIONS_LIST} ${NAME} CACHE INTERNAL "list of all options") |
|
|
|
|
|
|
|
list(REMOVE_DUPLICATES APM_OPTIONS_LIST) |
|
|
|
|
|
|
|
|
|
|
|
endif() |
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
|
|
# set options for combo box |
|
|
|
# set list of options |
|
|
|
set_property(CACHE "${NAME}" PROPERTY STRINGS ${ARG_OPTIONS}) |
|
|
|
if (NOT "${ARG_OPTIONS}" STREQUAL "") |
|
|
|
|
|
|
|
set_property(CACHE "${NAME}" PROPERTY STRINGS ${ARG_OPTIONS}) |
|
|
|
|
|
|
|
list(FIND ARG_OPTIONS "${ARG_DEFAULT}" ARG_POSITION) |
|
|
|
|
|
|
|
if (ARG_POSITION EQUAL -1) |
|
|
|
|
|
|
|
message(FATAL_ERROR "default value: ${ARG_DEFAULT} not in given set of options: ${ARG_OPTIONS}") |
|
|
|
|
|
|
|
endif() |
|
|
|
|
|
|
|
endif() |
|
|
|
|
|
|
|
|
|
|
|
# mark as advanced if advanced option given |
|
|
|
# mark as advanced if advanced option given |
|
|
|
if(ARG_ADVANCED) |
|
|
|
if(ARG_ADVANCED) |
|
|
@ -47,17 +79,27 @@ function(apm_option NAME) |
|
|
|
|
|
|
|
|
|
|
|
endfunction() |
|
|
|
endfunction() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# apm_option_generate_config: generates a config file using the list of options. |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# SINGLE INPUT ARGUMENTS: (can only pass one arguments) |
|
|
|
|
|
|
|
# FILE - the file to write the config to |
|
|
|
|
|
|
|
# BUILD_FLAGS - variable to store build flags in |
|
|
|
|
|
|
|
# |
|
|
|
|
|
|
|
# Author: James Goppert |
|
|
|
|
|
|
|
# |
|
|
|
function(apm_option_generate_config) |
|
|
|
function(apm_option_generate_config) |
|
|
|
cmake_parse_arguments(ARG "" "FILE" "" ${ARGN}) |
|
|
|
cmake_parse_arguments(ARG "" "FILE;BUILD_FLAGS" "" ${ARGN}) |
|
|
|
list(REMOVE_DUPLICATES APM_OPTIONS) |
|
|
|
|
|
|
|
|
|
|
|
# options |
|
|
|
|
|
|
|
list(REMOVE_DUPLICATES APM_OPTIONS_LIST) |
|
|
|
file (WRITE "${CMAKE_BINARY_DIR}/${ARG_FILE}" "//automatically generated, do not edit\n") |
|
|
|
file (WRITE "${CMAKE_BINARY_DIR}/${ARG_FILE}" "//automatically generated, do not edit\n") |
|
|
|
file (APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "#define OFF 0\n#define ON 1\n") |
|
|
|
file (APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "#define OFF 0\n#define ON 1\n") |
|
|
|
foreach(ITEM ${APM_OPTIONS}) |
|
|
|
foreach(ITEM ${APM_OPTIONS_LIST}) |
|
|
|
#message(STATUS "item: ${ITEM}") |
|
|
|
#message(STATUS "option: ${ITEM}") |
|
|
|
get_property(ITEM_VALUE CACHE ${ITEM} PROPERTY VALUE) |
|
|
|
get_property(ITEM_VALUE CACHE ${ITEM} PROPERTY VALUE) |
|
|
|
get_property(ITEM_HELP CACHE ${ITEM} PROPERTY HELPSTRING) |
|
|
|
get_property(ITEM_HELP CACHE ${ITEM} PROPERTY HELPSTRING) |
|
|
|
if (${ITEM}_DEFINE_ONLY) |
|
|
|
if (${${ITEM}_DEFINE_ONLY}) |
|
|
|
if (${ITEM}_VALUE) |
|
|
|
if (${ITEM_VALUE}) |
|
|
|
file(APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "\n#define ${ITEM} // ${ITEM_HELP}") |
|
|
|
file(APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "\n#define ${ITEM} // ${ITEM_HELP}") |
|
|
|
else() |
|
|
|
else() |
|
|
|
file(APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "\n//#define ${ITEM} // ${ITEM_HELP}") |
|
|
|
file(APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "\n//#define ${ITEM} // ${ITEM_HELP}") |
|
|
@ -66,4 +108,19 @@ function(apm_option_generate_config) |
|
|
|
file(APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "\n#define ${ITEM} ${ITEM_VALUE} // ${ITEM_HELP}") |
|
|
|
file(APPEND "${CMAKE_BINARY_DIR}/${ARG_FILE}" "\n#define ${ITEM} ${ITEM_VALUE} // ${ITEM_HELP}") |
|
|
|
endif() |
|
|
|
endif() |
|
|
|
endforeach() |
|
|
|
endforeach() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# build flags |
|
|
|
|
|
|
|
list(REMOVE_DUPLICATES APM_BUILD_FLAGS_LIST) |
|
|
|
|
|
|
|
foreach(ITEM ${APM_BUILD_FLAGS_LIST}) |
|
|
|
|
|
|
|
#message(STATUS "build flags: ${ITEM}") |
|
|
|
|
|
|
|
get_property(ITEM_VALUE CACHE ${ITEM} PROPERTY VALUE) |
|
|
|
|
|
|
|
if (${${ITEM}_DEFINE_ONLY}) |
|
|
|
|
|
|
|
if (${ITEM_VALUE}) |
|
|
|
|
|
|
|
set(${ARG_BUILD_FLAGS} ${${ARG_BUILD_FLAGS}} "-D${ITEM}" CACHE INTERNAL "build flags") |
|
|
|
|
|
|
|
endif() |
|
|
|
|
|
|
|
else() |
|
|
|
|
|
|
|
set(${ARG_BUILD_FLAGS} ${${ARG_BUILD_FLAGS}} "-D${ITEM}=${ITEM_VALUE}" CACHE INTERNAL "build flags") |
|
|
|
|
|
|
|
endif() |
|
|
|
|
|
|
|
endforeach() |
|
|
|
|
|
|
|
|
|
|
|
endfunction() |
|
|
|
endfunction() |
|
|
|