diff --git a/CMakeLists.txt b/CMakeLists.txt index b859fee3a..84fd2a502 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,10 +97,10 @@ read_targetconfig() # The custom script may override functions such as the # cfe_exec_do_install() and cfe_app_do_install() functions for this if (IS_CFS_ARCH_BUILD) - include("${MISSION_DEFS}/arch_build.cmake" OPTIONAL) - include("${MISSION_DEFS}/arch_build_${TARGETSYSTEM}.cmake" OPTIONAL) + include("${MISSION_DEFS}/arch_build_custom.cmake" OPTIONAL) + include("${MISSION_DEFS}/arch_build_custom_${TARGETSYSTEM}.cmake" OPTIONAL) elseif (IS_CFS_MISSION_BUILD) - include("${MISSION_DEFS}/mission_build.cmake" OPTIONAL) + include("${MISSION_DEFS}/mission_build_custom.cmake" OPTIONAL) endif (IS_CFS_ARCH_BUILD) # Call the prepare function defined by the sub-script diff --git a/cmake/sample_defs/arch_build_custom.cmake b/cmake/sample_defs/arch_build_custom.cmake new file mode 100644 index 000000000..ac1dd99b4 --- /dev/null +++ b/cmake/sample_defs/arch_build_custom.cmake @@ -0,0 +1,38 @@ +# +# Example arch_build_custom.cmake +# ------------------------------- +# +# This file will be automatically included in the arch-specific build scope +# +# Definitions and options specified here will be used when cross-compiling +# _all_ FSW code for _all_ targets defined in targets.cmake. +# +# Avoid machine-specific code generation options in this file (e.g. -f,-m options); such +# options should be localized to the toolchain file such that they will only be +# included on the machines where they apply. +# +# CAUTION: In heterogeneous environments where different cross compilers are +# used for different CPUs, particularly if from different vendors, it is likely +# that compile options will need to be different as well. +# +# In general, options in this file can only be used in cases where all CPUs use a +# compiler from the same vendor and/or are all GCC based such that they accept similar +# command line options. +# +# This file can alternatively be named as "arch_build_custom_${TARGETSYSTEM}.cmake" +# where ${TARGETSYSTEM} represents the system type, matching the toolchain. +# +# These example options assume a GCC-style toolchain is used for cross compilation, +# and uses the same warning options that are applied at the mission level. +# +add_compile_options( + -std=c99 # Target the C99 standard (without gcc extensions) + -pedantic # Issue all the warnings demanded by strict ISO C + -Wall # Warn about most questionable operations + -Wstrict-prototypes # Warn about missing prototypes + -Wwrite-strings # Warn if not treating string literals as "const" + -Wpointer-arith # Warn about suspicious pointer operations + -Wcast-align # Warn about casts that increase alignment requirements + -Werror # Treat warnings as errors (code should be clean) +) + diff --git a/cmake/sample_defs/mission_build_custom.cmake b/cmake/sample_defs/mission_build_custom.cmake new file mode 100644 index 000000000..92506bc9a --- /dev/null +++ b/cmake/sample_defs/mission_build_custom.cmake @@ -0,0 +1,28 @@ +# +# Example mission_build_custom.cmake +# ---------------------------------- +# +# This file will be automatically included in the top level ("mission") build scope +# +# Definitions and options specified here will be used when building local tools and +# other code that runs on the development host, but do _NOT_ apply to flight software +# (embedded) code or anything built for the target machine. +# +# These options assume a GCC toolchain but a similar set should be applicable to clang. +# +add_compile_options( + -std=c99 # Target the C99 standard (without gcc extensions) + -pedantic # Issue all the warnings demanded by strict ISO C + -Wall # Warn about most questionable operations + -Wstrict-prototypes # Warn about missing prototypes + -Wwrite-strings # Warn if not treating string literals as "const" + -Wpointer-arith # Warn about suspicious pointer operations + -Wcast-align # Warn about casts that increase alignment requirements + -Werror # Treat warnings as errors (code should be clean) +) + +# The _XOPEN_SOURCE directive is required for glibc to enable conformance with the +# the X/Open standard version 6, which includes POSIX.1c as well as SUSv2/UNIX98 extensions. +add_definitions( + -D_XOPEN_SOURCE=600 +)