CMake now takes the option ASN1C_EXEC to select an asn1c to use for compilation. For instance, run with cmake .. -GNinja -DASN1C_EXEC=/opt/asn1c/bin/asn1c or ./build_oai --cmake-opt -DASN1C_EXEC=/opt/asn1c/bin/asn1c to select the alternative asn1c. For instance, this is important for the CI to allow to build multiple versions of OAI in parallel that might use different commits of OAI. Further, this patch introduces functionality to check for the support of asn1c options that we require, and alerts the user if they are missing, alongside a message of how to resolve the problem.
110 lines
3.2 KiB
CMake
110 lines
3.2 KiB
CMake
###########################################
|
|
# macros to define options as there is numerous options in oai
|
|
################################################
|
|
macro(add_option name val helpstr)
|
|
if(DEFINED ${name})
|
|
set(value ${${name}})
|
|
else(DEFINED ${name})
|
|
set(value ${val})
|
|
endif()
|
|
set(${name} ${value} CACHE STRING "${helpstr}")
|
|
add_definitions("-D${name}=${value}")
|
|
endmacro(add_option)
|
|
|
|
macro(add_boolean_option name val helpstr adddef)
|
|
if(DEFINED ${name})
|
|
set(value ${${name}})
|
|
else(DEFINED ${name})
|
|
set(value ${val})
|
|
endif()
|
|
set(${name} ${value} CACHE STRING "${helpstr}")
|
|
set_property(CACHE ${name} PROPERTY TYPE BOOL)
|
|
if (${value} AND ${adddef})
|
|
add_definitions("-D${name}")
|
|
endif (${value} AND ${adddef})
|
|
endmacro(add_boolean_option)
|
|
|
|
macro(add_integer_option name val helpstr)
|
|
if(DEFINED ${name})
|
|
set(value ${${name}})
|
|
else(DEFINED ${name})
|
|
set(value ${val})
|
|
endif()
|
|
set(${name} ${value} CACHE STRING "${helpstr}")
|
|
add_definitions("-D${name}=${value}")
|
|
endmacro(add_integer_option)
|
|
|
|
macro(add_list1_option name val helpstr)
|
|
if(DEFINED ${name})
|
|
set(value ${${name}})
|
|
else(DEFINED ${name})
|
|
set(value ${val})
|
|
endif()
|
|
set(${name} ${value} CACHE STRING "${helpstr}")
|
|
set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
|
|
if(NOT "${value}" STREQUAL "False")
|
|
add_definitions("-D${name}=${value}")
|
|
endif()
|
|
endmacro(add_list1_option)
|
|
|
|
macro(add_list2_option name val helpstr)
|
|
if(DEFINED ${name})
|
|
set(value ${${name}})
|
|
else(DEFINED ${name})
|
|
set(value ${val})
|
|
endif()
|
|
set(${name} ${value} CACHE STRING "${helpstr}")
|
|
set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
|
|
if(NOT "${value}" STREQUAL "None")
|
|
add_definitions("-D${value}=1")
|
|
endif()
|
|
endmacro(add_list2_option)
|
|
|
|
macro(add_list_string_option name val helpstr)
|
|
if(DEFINED ${name})
|
|
set(value ${${name}})
|
|
else(DEFINED ${name})
|
|
set(value ${val})
|
|
endif()
|
|
set(${name} ${value} CACHE STRING "${helpstr}")
|
|
set_property(CACHE ${name} PROPERTY STRINGS ${ARGN})
|
|
if(NOT "${value}" STREQUAL "False")
|
|
add_definitions("-D${name}=\"${value}\"")
|
|
endif()
|
|
endmacro(add_list_string_option)
|
|
|
|
# this function should produce the same value as the macro MAKE_VERSION defined in the C code (file types.h)
|
|
function(make_version VERSION_VALUE)
|
|
math(EXPR RESULT "0")
|
|
foreach (ARG ${ARGN})
|
|
math(EXPR RESULT "${RESULT} * 256 + ${ARG}")
|
|
endforeach()
|
|
set(${VERSION_VALUE} "${RESULT}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
macro(eval_boolean VARIABLE)
|
|
if(${ARGN})
|
|
set(${VARIABLE} ON)
|
|
else()
|
|
set(${VARIABLE} OFF)
|
|
endif()
|
|
endmacro()
|
|
|
|
function(check_option EXEC TEST_OPTION EXEC_HINT)
|
|
message(STATUS "Check if ${EXEC} supports ${TEST_OPTION}")
|
|
execute_process(COMMAND ${EXEC} ${TEST_OPTION}
|
|
RESULT_VARIABLE CHECK_STATUS
|
|
OUTPUT_VARIABLE CHECK_OUTPUT
|
|
ERROR_VARIABLE CHECK_OUTPUT)
|
|
if(NOT ${CHECK_STATUS} EQUAL 1)
|
|
get_filename_component(EXEC_FILE ${EXEC} NAME)
|
|
message(FATAL_ERROR "Error message: ${CHECK_OUTPUT}\
|
|
You might want to re-run ./build_oai -I
|
|
Or provide a path to ${EXEC_FILE} using
|
|
./build_oai ... --cmake-opt -D${EXEC_HINT}=/path/to/${EXEC_FILE}
|
|
or directly with
|
|
cmake .. -D${EXEC_HINT}=/path/to/${EXEC_FILE}
|
|
")
|
|
endif()
|
|
endfunction()
|