Skip to content

Instantly share code, notes, and snippets.

@JasonDictos
Created September 24, 2018 18:01
Show Gist options
  • Select an option

  • Save JasonDictos/8d39161b9f5206a1a9f6ced21fc233a0 to your computer and use it in GitHub Desktop.

Select an option

Save JasonDictos/8d39161b9f5206a1a9f6ced21fc233a0 to your computer and use it in GitHub Desktop.
toolchain
include(CMakeForceCompiler)
set(CMAKE_POSITION_INDEPENDENT_CODE YES)
set(SW_TOOLCHAIN_DEFINITIONS_DEBUG "-g3 -O0 ")
set(SW_TOOLCHAIN_DEFINITIONS_RELEASE "-g -O2 -DNDEBUG")
set(SW_TOOLCHAIN_DEFINITIONS_SANITIZE "-g3 -O0 -fsanitize=address")
#
# Basic settings
#
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_CXX_STANDARD 17)
if (EXISTS $ENV{SWLIBS_TOOLCHAIN_ROOT})
set(CLANG_TOOLCHAIN_ROOT $ENV{SWLIBS_TOOLCHAIN_ROOT})
else()
set(CLANG_TOOLCHAIN_ROOT /usr)
endif()
if (EXISTS ${CLANG_TOOLCHAIN_ROOT}/bin/clang-7)
set(CMAKE_C_COMPILER ${CLANG_TOOLCHAIN_ROOT}/bin/clang-7)
elseif (EXISTS ${CLANG_TOOLCHAIN_ROOT}/bin/clang)
set(CMAKE_C_COMPILER ${CLANG_TOOLCHAIN_ROOT}/bin/clang)
else()
message(FATAL_ERROR "Clang 7.0 not found in root: ${CLANG_TOOLCHAIN_ROOT}/bin/clang-7")
endif()
if (EXISTS ${CLANG_TOOLCHAIN_ROOT}/bin/clang++-7)
set(CMAKE_CXX_COMPILER ${CLANG_TOOLCHAIN_ROOT}/bin/clang++-7)
elseif (EXISTS ${CLANG_TOOLCHAIN_ROOT}/bin/clang++)
set(CMAKE_CXX_COMPILER ${CLANG_TOOLCHAIN_ROOT}/bin/clang++)
else()
message(FATAL_ERROR "Clang++ 7.0 not found in root: ${CLANG_TOOLCHAIN_ROOT}")
endif()
# Common definitions across c++/c
set(CLANG_TOOLCHAIN_DEFAULT_FLAGS "-Wno-switch -fPIC -msse3 -mssse3 -msse4 -mpclmul -maes -msha -Wno-error=unused-command-line-argument")
# Default c++ specific definitions
set(CLANG_TOOLCHAIN_DEFAULT_CXX_FLAGS "-std=gnu++17 -fcoroutines-ts -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc")
# Flags for linking
set(LINKER_FLAGS "-Wl,--no-undefined -Wno-error=unused-command-line-argument -stdlib=libc++" CACHE STIRNG "" FORCE)
set(CMAKE_LINKER_FLAGS ${LINKER_FLAGS} CACHE STRING "" FORCE)
set(CMAKE_EXE_LINKER_FLAGS ${LINKER_FLAGS} CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS ${LINKER_FLAGS} CACHE STRING "" FORCE)
set(POSITION_INDEPENDENT_CODE YES)
set(CMAKE_C_FLAGS_DEBUG "${CLANG_TOOLCHAIN_DEFAULT_FLAGS} ${SW_TOOLCHAIN_DEFINITIONS} ${SW_TOOLCHAIN_DEFINITIONS_DEBUG}" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_RELEASE "${CLANG_TOOLCHAIN_DEFAULT_FLAGS} ${SW_TOOLCHAIN_DEFINITIONS} ${SW_TOOLCHAIN_DEFINITIONS_RELEASE}" CACHE STRING "" FORCE)
set(CMAKE_C_FLAGS_SANITIZE "${CLANG_TOOLCHAIN_DEFAULT_FLAGS} ${SW_TOOLCHAIN_DEFINITIONS} ${SW_TOOLCHAIN_DEFINITIONS_SANITIZE}" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_DEBUG "${CLANG_TOOLCHAIN_DEFAULT_FLAGS} ${SW_TOOLCHAIN_DEFINITIONS} ${SW_TOOLCHAIN_DEFINITIONS_DEBUG} ${CLANG_TOOLCHAIN_DEFAULT_CXX_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE "${CLANG_TOOLCHAIN_DEFAULT_FLAGS} ${SW_TOOLCHAIN_DEFINITIONS} ${SW_TOOLCHAIN_DEFINITIONS_RELEASE} ${CLANG_TOOLCHAIN_DEFAULT_CXX_FLAGS}" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_SANITIZE "${CLANG_TOOLCHAIN_DEFAULT_FLAGS} ${SW_TOOLCHAIN_DEFINITIONS} ${SW_TOOLCHAIN_DEFINITIONS_SANITIZE} ${CLANG_TOOLCHAIN_DEFAULT_CXX_FLAGS}" CACHE STRING "" FORCE)
message(STATUS "CC: ${CMAKE_C_COMPILER}")
message(STATUS "CXX: ${CMAKE_CXX_COMPILER}")
message(STATUS "ROOT: ${CLANG_TOOLCHAIN_ROOT}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "" FORCE)
endif()
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release;Sanitize")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment