/cmake-utils

Primary LanguageCMakeMIT LicenseMIT

CMake Utils

Some collections of CMake scripts and macros to make platform/toolchain detection and setting appropiate compiler flags easier.

Usage

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 :-)