endif()
endif(gcc_minimal_version)
-# Check Kernel minimal version
+# Check Kernel mandatory version, will fail the configuration if required version not matched.
+if (kernel_mandatory_version)
+ message (STATUS "${Cyan}-- Check kernel_mandatory_version (found kernel version ${KERNEL_VERSION})${ColourReset}")
+ if (KERNEL_VERSION VERSION_LESS ${kernel_mandatory_version})
+ message(FATAL_ERROR "${Red}**** FATAL: Require at least ${kernel_mandatory_version} please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.")
+ endif (KERNEL_VERSION VERSION_LESS ${kernel_mandatory_version})
+endif(kernel_mandatory_version)
+
+# Check Kernel minimal version just print a Warning about missing features
+# and set a definition to be used as preprocessor condition in code to disable
+# incompatibles features.
if (kernel_minimal_version)
- if(DEFINED ENV{SDKTARGETSYSROOT})
- file(STRINGS $ENV{SDKTARGETSYSROOT}/usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
- elseif(DEFINED ENV{PKG_CONFIG_SYSROOT_DIR})
- file(STRINGS $ENV{PKG_CONFIG_SYSROOT_DIR}/usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
- else()
- file(STRINGS /usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
- endif()
-
- string(REGEX MATCH "[0-9]+" LINUX_VERSION_CODE ${LINUX_VERSION_CODE_LINE})
- math(EXPR a "${LINUX_VERSION_CODE} >> 16")
- math(EXPR b "(${LINUX_VERSION_CODE} >> 8) & 255")
- math(EXPR c "(${LINUX_VERSION_CODE} & 255)")
-
- set(KERNEL_VERSION "${a}.${b}.${c}")
message (STATUS "${Cyan}-- Check kernel_minimal_version (found kernel version ${KERNEL_VERSION})${ColourReset}")
-
if (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
- message(FATAL_ERROR "${Red}**** FATAL: Require at least ${kernel_minimal_version} please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.")
+ message(WARNING "${Yellow}**** Warning: Some feature(s) require at least ${kernel_minimal_version}. Please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.${ColourReset}")
+ else (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
+ add_definitions(-DKERNEL_MINIMAL_VERSION_OK)
endif (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
endif(kernel_minimal_version)
add_compile_options(-ffunction-sections -fdata-sections)
add_compile_options(-fPIC)
-set(CMAKE_C_FLAGS_PROFILING "-g -O0 -pg -Wp,-U_FORTIFY_SOURCE" CACHE STRING "Flags for profiling")
-set(CMAKE_C_FLAGS_DEBUG "-g -Og -ggdb -Wp,-U_FORTIFY_SOURCE" CACHE STRING "Flags for debugging")
-set(CMAKE_C_FLAGS_RELEASE "-O2" CACHE STRING "Flags for releasing")
-set(CMAKE_C_FLAGS_CCOV "-g -O2 --coverage" CACHE STRING "Flags for coverage test")
-
-set(CMAKE_CXX_FLAGS_PROFILING "-g -O0 -pg -Wp,-U_FORTIFY_SOURCE" CACHE STRING "Flags for profiling")
-set(CMAKE_CXX_FLAGS_DEBUG "-g -Og -ggdb -Wp,-U_FORTIFY_SOURCE" CACHE STRING "Flags for debugging")
-set(CMAKE_CXX_FLAGS_RELEASE "-O2" CACHE STRING "Flags for releasing")
-set(CMAKE_CXX_FLAGS_CCOV "-g -O2 --coverage" CACHE STRING "Flags for coverage test")
+# TODO: make more visible readable compile (macro ? split ?)
+# Compilation option depending on CMAKE_BUILD_TYPE
+##################################################
+add_compile_options($<$<CONFIG:PROFILING>:-g>)
+add_compile_options($<$<CONFIG:PROFILING>:-O0>)
+add_compile_options($<$<CONFIG:PROFILING>:-pg>)
+add_compile_options($<$<CONFIG:PROFILING>:-Wp,-U_FORTIFY_SOURCE>)
+
+add_compile_options($<$<CONFIG:DEBUG>:-g>)
+add_compile_options($<$<CONFIG:DEBUG>:-O0>)
+add_compile_options($<$<CONFIG:DEBUG>:-ggdb>)
+add_compile_options($<$<CONFIG:DEBUG>:-Wp,-U_FORTIFY_SOURCE>)
+
+add_compile_options($<$<CONFIG:CCOV>:-g>)
+add_compile_options($<$<CONFIG:CCOV>:-O2>)
+add_compile_options($<$<CONFIG:CCOV>:--coverage>)
# Env variable overload default
if(DEFINED ENV{INSTALL_PREFIX})