Add td_set_up_compiler() CMake function.
GitOrigin-RevId: 2b1a641e637f6ab80fa394811b152804a6890c43
This commit is contained in:
parent
98d853227a
commit
2875272cdc
145
CMake/TdSetUpCompiler.cmake
Normal file
145
CMake/TdSetUpCompiler.cmake
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
# - Configures C++14 compiler, setting TDLib-specific compilation options.
|
||||||
|
|
||||||
|
function(td_set_up_compiler)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS 1 PARENT_SCOPE)
|
||||||
|
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON PARENT_SCOPE)
|
||||||
|
|
||||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
|
set(GCC 1)
|
||||||
|
set(GCC 1 PARENT_SCOPE)
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
set(CLANG 1)
|
||||||
|
set(CLANG 1 PARENT_SCOPE)
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
||||||
|
set(INTEL 1)
|
||||||
|
set(INTEL 1 PARENT_SCOPE)
|
||||||
|
elseif (NOT MSVC)
|
||||||
|
message(FATAL_ERROR "Compiler isn't supported")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(CheckCXXCompilerFlag)
|
||||||
|
|
||||||
|
if (GCC OR CLANG OR INTEL)
|
||||||
|
if (WIN32 AND INTEL)
|
||||||
|
set(STD14_FLAG /Qstd=c++14)
|
||||||
|
else()
|
||||||
|
set(STD14_FLAG -std=c++14)
|
||||||
|
endif()
|
||||||
|
check_cxx_compiler_flag(${STD14_FLAG} HAVE_STD14)
|
||||||
|
if (NOT HAVE_STD14)
|
||||||
|
string(REPLACE "c++14" "c++1y" STD14_FLAG "${STD14_FLAG}")
|
||||||
|
check_cxx_compiler_flag(${STD14_FLAG} HAVE_STD1Y)
|
||||||
|
set(HAVE_STD14 ${HAVE_STD1Y})
|
||||||
|
endif()
|
||||||
|
elseif (MSVC)
|
||||||
|
set(HAVE_STD14 MSVC_VERSION>=1900)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT HAVE_STD14)
|
||||||
|
message(FATAL_ERROR "No C++14 support in the compiler. Please upgrade the compiler.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
|
||||||
|
|
||||||
|
if (MSVC)
|
||||||
|
if (CMAKE_CXX_FLAGS_DEBUG MATCHES "/RTC1")
|
||||||
|
string(REPLACE "/RTC1" " " CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
|
endif()
|
||||||
|
add_definitions(-D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /GR- /W4 /wd4100 /wd4127 /wd4324 /wd4505 /wd4814 /wd4702 /bigobj")
|
||||||
|
elseif (CLANG OR GCC)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STD14_FLAG} -fno-omit-frame-pointer -fno-exceptions -fno-rtti")
|
||||||
|
if (APPLE)
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-dead_strip,-x,-S")
|
||||||
|
else()
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (WIN32 OR CYGWIN)
|
||||||
|
if (GCC)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
elseif (INTEL)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STD14_FLAG}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
add_definitions(-DNTDDI_VERSION=0x06020000 -DWINVER=0x0602 -D_WIN32_WINNT=0x0602 -DPSAPI_VERSION=1 -DNOMINMAX -DUNICODE -D_UNICODE -DWIN32_LEAN_AND_MEAN)
|
||||||
|
endif()
|
||||||
|
if (CYGWIN)
|
||||||
|
add_definitions(-D_DEFAULT_SOURCE=1 -DFD_SETSIZE=4096)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT ANDROID) # _FILE_OFFSET_BITS is broken in NDK r15, r15b and r17 and doesn't work prior to Android 7.0
|
||||||
|
add_definitions(-D_FILE_OFFSET_BITS=64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(AddCXXCompilerFlag)
|
||||||
|
if (NOT MSVC)
|
||||||
|
add_cxx_compiler_flag("-Wall")
|
||||||
|
add_cxx_compiler_flag("-Wextra")
|
||||||
|
add_cxx_compiler_flag("-Wimplicit-fallthrough=2")
|
||||||
|
add_cxx_compiler_flag("-Wpointer-arith")
|
||||||
|
add_cxx_compiler_flag("-Wcast-qual")
|
||||||
|
add_cxx_compiler_flag("-Wsign-compare")
|
||||||
|
add_cxx_compiler_flag("-Wduplicated-branches")
|
||||||
|
add_cxx_compiler_flag("-Wduplicated-cond")
|
||||||
|
add_cxx_compiler_flag("-Walloc-zero")
|
||||||
|
add_cxx_compiler_flag("-Wlogical-op")
|
||||||
|
add_cxx_compiler_flag("-Wno-tautological-compare")
|
||||||
|
add_cxx_compiler_flag("-Wpointer-arith")
|
||||||
|
add_cxx_compiler_flag("-Wvla")
|
||||||
|
add_cxx_compiler_flag("-Wnon-virtual-dtor")
|
||||||
|
add_cxx_compiler_flag("-Wno-unused-parameter")
|
||||||
|
add_cxx_compiler_flag("-Wconversion")
|
||||||
|
add_cxx_compiler_flag("-Wno-sign-conversion")
|
||||||
|
add_cxx_compiler_flag("-Wc++14-compat-pedantic")
|
||||||
|
add_cxx_compiler_flag("-Wdeprecated")
|
||||||
|
add_cxx_compiler_flag("-Wno-unused-command-line-argument")
|
||||||
|
add_cxx_compiler_flag("-Qunused-arguments")
|
||||||
|
add_cxx_compiler_flag("-Wodr")
|
||||||
|
add_cxx_compiler_flag("-flto-odr-type-merging")
|
||||||
|
|
||||||
|
# add_cxx_compiler_flag("-Werror")
|
||||||
|
|
||||||
|
# add_cxx_compiler_flag("-Wcast-align")
|
||||||
|
|
||||||
|
#std::int32_t <-> int and off_t <-> std::size_t/std::int64_t
|
||||||
|
# add_cxx_compiler_flag("-Wuseless-cast")
|
||||||
|
|
||||||
|
#external headers like openssl
|
||||||
|
# add_cxx_compiler_flag("-Wzero-as-null-pointer-constant")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (GCC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))
|
||||||
|
add_cxx_compiler_flag("-Wno-maybe-uninitialized") # too much false positives
|
||||||
|
endif()
|
||||||
|
if (GCC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0))
|
||||||
|
# warns about a lot of "return std::move", which are not redundant for compilers without fix for DR 1579, i.e. GCC 4.9 or clang 3.8
|
||||||
|
# see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1579
|
||||||
|
add_cxx_compiler_flag("-Wno-redundant-move")
|
||||||
|
endif()
|
||||||
|
if (CLANG AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5))
|
||||||
|
# https://stackoverflow.com/questions/26744556/warning-returning-a-captured-reference-from-a-lambda
|
||||||
|
add_cxx_compiler_flag("-Wno-return-stack-address")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem /usr/include/c++/v1")
|
||||||
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
||||||
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
|
||||||
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
||||||
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
|
||||||
|
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}" PARENT_SCOPE)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
131
CMakeLists.txt
131
CMakeLists.txt
@ -32,10 +32,6 @@ if (TD_ENABLE_DOTNET AND (CMAKE_VERSION VERSION_LESS "3.1.0"))
|
|||||||
message(FATAL_ERROR "CMake 3.1.0 or higher is required. You are running version ${CMAKE_VERSION}.")
|
message(FATAL_ERROR "CMake 3.1.0 or higher is required. You are running version ${CMAKE_VERSION}.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
|
|
||||||
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
||||||
|
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
if (POLICY CMP0069)
|
if (POLICY CMP0069)
|
||||||
@ -111,38 +107,6 @@ if (OPENSSL_FOUND)
|
|||||||
message(STATUS "Found OpenSSL: ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}")
|
message(STATUS "Found OpenSSL: ${OPENSSL_INCLUDE_DIR} ${OPENSSL_LIBRARIES}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
||||||
set(GCC 1)
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
||||||
set(CLANG 1)
|
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
|
||||||
set(INTEL 1)
|
|
||||||
elseif (NOT MSVC)
|
|
||||||
message(FATAL_ERROR "Compiler isn't supported")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(CheckCXXCompilerFlag)
|
|
||||||
|
|
||||||
if (GCC OR CLANG OR INTEL)
|
|
||||||
if (WIN32 AND INTEL)
|
|
||||||
set(STD14_FLAG /Qstd=c++14)
|
|
||||||
else()
|
|
||||||
set(STD14_FLAG -std=c++14)
|
|
||||||
endif()
|
|
||||||
check_cxx_compiler_flag(${STD14_FLAG} HAVE_STD14)
|
|
||||||
if (NOT HAVE_STD14)
|
|
||||||
string(REPLACE "c++14" "c++1y" STD14_FLAG "${STD14_FLAG}")
|
|
||||||
check_cxx_compiler_flag(${STD14_FLAG} HAVE_STD1Y)
|
|
||||||
set(HAVE_STD14 ${HAVE_STD1Y})
|
|
||||||
endif()
|
|
||||||
elseif (MSVC)
|
|
||||||
set(HAVE_STD14 MSVC_VERSION>=1900)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT HAVE_STD14)
|
|
||||||
message(FATAL_ERROR "No C++14 support in the compiler. Please upgrade the compiler.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(CMAKE_THREAD_PREFER_PTHREAD ON)
|
set(CMAKE_THREAD_PREFER_PTHREAD ON)
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
@ -151,29 +115,12 @@ if (THREADS_HAVE_PTHREAD_ARG)
|
|||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MSVC)
|
include(TdSetUpCompiler)
|
||||||
if (CMAKE_CXX_FLAGS_DEBUG MATCHES "/RTC1")
|
td_set_up_compiler()
|
||||||
string(REPLACE "/RTC1" " " CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
|
|
||||||
endif()
|
|
||||||
add_definitions(-D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8 /GR- /W4 /wd4100 /wd4127 /wd4324 /wd4505 /wd4814 /wd4702 /bigobj")
|
|
||||||
elseif (CLANG OR GCC)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STD14_FLAG} -fno-omit-frame-pointer -fno-exceptions -fno-rtti")
|
|
||||||
if (APPLE)
|
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-dead_strip,-x,-S")
|
|
||||||
else()
|
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ffunction-sections -fdata-sections")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections")
|
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--gc-sections -Wl,--exclude-libs,ALL")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (WIN32 OR CYGWIN)
|
|
||||||
if (GCC)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
if (CLANG OR GCC)
|
||||||
if (MEMPROF)
|
if (MEMPROF)
|
||||||
|
include(CheckCXXCompilerFlag)
|
||||||
check_cxx_compiler_flag(-no-pie CXX_NO_PIE_FLAG)
|
check_cxx_compiler_flag(-no-pie CXX_NO_PIE_FLAG)
|
||||||
if (CXX_NO_PIE_FLAG)
|
if (CXX_NO_PIE_FLAG)
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -no-pie")
|
||||||
@ -181,78 +128,8 @@ elseif (CLANG OR GCC)
|
|||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_pie")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_pie")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
elseif (INTEL)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${STD14_FLAG}")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
|
||||||
add_definitions(-DNTDDI_VERSION=0x06020000 -DWINVER=0x0602 -D_WIN32_WINNT=0x0602 -DPSAPI_VERSION=1 -DNOMINMAX -DUNICODE -D_UNICODE -DWIN32_LEAN_AND_MEAN)
|
|
||||||
endif()
|
|
||||||
if (CYGWIN)
|
|
||||||
add_definitions(-D_DEFAULT_SOURCE=1 -DFD_SETSIZE=4096)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (NOT ANDROID) # _FILE_OFFSET_BITS is broken in NDK r15, r15b and r17 and doesn't work prior to Android 7.0
|
|
||||||
add_definitions(-D_FILE_OFFSET_BITS=64)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
include(AddCXXCompilerFlag)
|
|
||||||
if (NOT MSVC)
|
|
||||||
add_cxx_compiler_flag("-Wall")
|
|
||||||
add_cxx_compiler_flag("-Wextra")
|
|
||||||
add_cxx_compiler_flag("-Wimplicit-fallthrough=2")
|
|
||||||
add_cxx_compiler_flag("-Wpointer-arith")
|
|
||||||
add_cxx_compiler_flag("-Wcast-qual")
|
|
||||||
add_cxx_compiler_flag("-Wsign-compare")
|
|
||||||
add_cxx_compiler_flag("-Wduplicated-branches")
|
|
||||||
add_cxx_compiler_flag("-Wduplicated-cond")
|
|
||||||
add_cxx_compiler_flag("-Walloc-zero")
|
|
||||||
add_cxx_compiler_flag("-Wlogical-op")
|
|
||||||
add_cxx_compiler_flag("-Wno-tautological-compare")
|
|
||||||
add_cxx_compiler_flag("-Wpointer-arith")
|
|
||||||
add_cxx_compiler_flag("-Wvla")
|
|
||||||
add_cxx_compiler_flag("-Wnon-virtual-dtor")
|
|
||||||
add_cxx_compiler_flag("-Wno-unused-parameter")
|
|
||||||
add_cxx_compiler_flag("-Wconversion")
|
|
||||||
add_cxx_compiler_flag("-Wno-sign-conversion")
|
|
||||||
add_cxx_compiler_flag("-Wc++14-compat-pedantic")
|
|
||||||
add_cxx_compiler_flag("-Wdeprecated")
|
|
||||||
add_cxx_compiler_flag("-Wno-unused-command-line-argument")
|
|
||||||
add_cxx_compiler_flag("-Qunused-arguments")
|
|
||||||
add_cxx_compiler_flag("-Wodr")
|
|
||||||
add_cxx_compiler_flag("-flto-odr-type-merging")
|
|
||||||
|
|
||||||
# add_cxx_compiler_flag("-Werror")
|
|
||||||
|
|
||||||
# add_cxx_compiler_flag("-Wcast-align")
|
|
||||||
|
|
||||||
#std::int32_t <-> int and off_t <-> std::size_t/std::int64_t
|
|
||||||
# add_cxx_compiler_flag("-Wuseless-cast")
|
|
||||||
|
|
||||||
#external headers like openssl
|
|
||||||
# add_cxx_compiler_flag("-Wzero-as-null-pointer-constant")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (GCC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0))
|
|
||||||
add_cxx_compiler_flag("-Wno-maybe-uninitialized") # too much false positives
|
|
||||||
endif()
|
|
||||||
if (GCC AND NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0))
|
|
||||||
# warns about a lot of "return std::move", which are not redundant for compilers without fix for DR 1579, i.e. GCC 4.9 or clang 3.8
|
|
||||||
# see http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1579
|
|
||||||
add_cxx_compiler_flag("-Wno-redundant-move")
|
|
||||||
endif()
|
|
||||||
if (CLANG AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5))
|
|
||||||
# https://stackoverflow.com/questions/26744556/warning-returning-a-captured-reference-from-a-lambda
|
|
||||||
add_cxx_compiler_flag("-Wno-return-stack-address")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -isystem /usr/include/c++/v1")
|
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
|
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread")
|
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address")
|
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined")
|
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak")
|
|
||||||
|
|
||||||
add_subdirectory(tdtl)
|
add_subdirectory(tdtl)
|
||||||
|
|
||||||
add_subdirectory(tdutils)
|
add_subdirectory(tdutils)
|
||||||
|
Loading…
Reference in New Issue
Block a user