Some collections of CMake scripts and macros to make platform/toolchain detection and setting appropiate compiler flags easier.
Add a git submodule to your repository:
mkdir cmake
git -C cmake submodule add https://github.com/simonfxr/cmake-utils
Then use it from your CMakeLists.txt
:
include("${CMAKE_SOURCE_DIR}/cmake/cmake-utils/cmake-utils.cmake")
set(CMU_PREFERRED_LINKERS lld gold)
set(CMU_PIC True)
set(CMU_SANITIZERS ubsan)
set(CMU_WARN_LEVEL 4)
set(CMU_WARN_DATE_TIME True)
set(CMU_FP_MODE IEEE)
set(CMU_PREFERRED_CXX_STDLIB libc++ libstdc++)
set(CMU_THREADS False)
set(CMU_NO_EXCEPTIONS False)
set(CMU_NO_RTTI False)
set(CMU_FORTIFY_SOURCE 2)
set(CMU_STACK_PROTECTION True)
set(CMU_EAGER_LOADING True)
set(CMU_STRICT_LINKING True)
set(CMU_RELRO True)
set(CMU_CFI True)
set(CMU_GLIBCXX_SANITIZE_VECTOR False)
set(CMU_GLIBCXX_DEBUG False)
set(CMU_GLIBCXX_DEBUG_PEDANTIC False)
set(CMU_LIBCPP_ABI_VERSION 2)
set(CMU_LIBCPP_ENABLE_NODISCARD True)
set(CMU_LIBCPP_DEBUG False)
cmu_configure()
cmu_add_library(libar SOURCES bar.cpp DEPEND Boost::regex whatever)
if(CMU_OS_ANDROID)
if(CMU_BITS_64)
target_link_libraries(libar Xaarch64)
else()
target_link_libraries(libar Xarm)
endif()
endif()
cmu_add_executable(foo SOURCES foo.cpp baz.c DEPEND libar ...)
Configuration options only take effect on applicable platform/toolchain
combinations, no need for all the if(${ARCH} AND ${OS} AND ${COMPILER} AND ${COMPILER_VERSION} VERSIONGREATER ...)
nonsense.
Contributions welcome :-)