cmake/nc_cxx.cmake

84 lines
2.7 KiB
CMake
Raw Normal View History

###############################################################################
if (__nc_cxx)
return ()
endif ()
set (__nc_cxx TRUE)
###############################################################################
# clear the default flags because they include optimisation flags we
# explicitly do not want (ie, O3).
set (CMAKE_CXX_FLAGS_RELEASE "")
set (CMAKE_C_FLAGS_RELEASE "")
set (CMAKE_CXX_FLAGS_DEBUG "")
set (CMAKE_C_FLAGS_DEBUG "")
###############################################################################
2017-01-17 19:20:12 +11:00
include (compile_flag)
include (test_restrict)
###############################################################################
append_compile_flag ("-fcolor-diagnostics")
2017-01-17 19:20:12 +11:00
###############################################################################
2018-05-05 14:37:58 +10:00
append_compile_flag ("-std=c++2a")
2017-01-23 14:55:07 +11:00
append_compile_flag ("-fpermissive")
append_compile_flag ("/std:c++latest")
2017-01-17 19:20:12 +11:00
# try to use clangs libc++ under the assumption that gcc will fail this test
# and clang will pass (if it is present). this is necessary because some
# libstdc++ headers don't behave well under c++17/clang.
append_compile_flag ("-stdlib=libc++")
2017-01-17 19:20:12 +11:00
###############################################################################
# find the gcc or clang filesystem library and append to libs if needed
#
# note, we specifically _cannot_ use find_library because it just makes wild
# hardcoded guess and doesn't respect _all_ the system paths; specifically
# something like /usr/lib/gcc/x86_64-pc-linux-gnu/6.3.0/libstdc++.so won't get
# discovered.
if (NOT DEFINED __nc_cxx_stdcxxfs)
foreach(lib "" "c++fs" "c++experimental" "stdc++fs")
message (STATUS "Trying c++fs library '${lib}'")
try_compile(
__nc_cxx_stdcxxfs ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
${NC_CMAKE_BASE}/nc_cxx_stdcxxfs.cpp
LINK_LIBRARIES
${lib}
)
if (__nc_cxx_stdcxxfs)
set (__nc_cxx_stdcxxfs "${lib}" CACHE INTERNAL "library required for c++ filesystem")
break ()
endif ()
endforeach()
if (NOT DEFINED __nc_cxx_stdcxxfs)
message (FATAL_ERROR "Could not locate the required c++fs library")
endif ()
message (STATUS "Using c++fs library ${__nc_cxx_stdcxxfs}")
endif ()
set(NC_CXX_STDCXXFS ${__nc_cxx_stdcxxfs})
2017-01-17 19:20:12 +11:00
###############################################################################
test_restrict(RESTRICT_KEYWORD)
add_definitions("-Drestrict=${RESTRICT_KEYWORD}")
###############################################################################
append_compile_flag("-pipe")
append_compile_flag("-fno-deduce-init-list")
append_compile_flag("-fvisibility=hidden")
append_compile_flag("-fPIC")
append_compile_flag("-D__STDC_FORMAT_MACROS")
2019-01-04 17:18:07 +11:00
add_definitions("-D_FILE_OFFSET_BITS=64")