mirror of
https://github.com/darlinghq/darling-libcxx.git
synced 2024-11-27 05:40:48 +00:00
cfe109bf3d
Hard code the defaults for Windows for the time being. The checks really are always going to return the same value. Technically, the pthread linkage is possible, however, it seems better to use the Win32 threading along with the external threading support that we have added. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@290801 91177308-0d34-0410-b5e6-96231b3b80d8
72 lines
2.8 KiB
CMake
72 lines
2.8 KiB
CMake
include(CheckLibraryExists)
|
|
include(CheckCXXCompilerFlag)
|
|
|
|
if(WIN32 AND NOT MINGW)
|
|
# NOTE(compnerd) this is technically a lie, there is msvcrt, but for now, lets
|
|
# let the default linking take care of that.
|
|
set(LIBCXX_HAS_C_LIB NO)
|
|
else()
|
|
check_library_exists(c fopen "" LIBCXX_HAS_C_LIB)
|
|
endif()
|
|
|
|
if (NOT LIBCXX_USE_COMPILER_RT)
|
|
if(WIN32 AND NOT MINGW)
|
|
set(LIBCXX_HAS_GCC_S_LIB NO)
|
|
else()
|
|
check_library_exists(gcc_s __gcc_personality_v0 "" LIBCXX_HAS_GCC_S_LIB)
|
|
endif()
|
|
endif()
|
|
|
|
# libc++ is built with -nodefaultlibs, so we want all our checks to also
|
|
# use this option, otherwise we may end up with an inconsistency between
|
|
# the flags we think we require during configuration (if the checks are
|
|
# performed without -nodefaultlibs) and the flags that are actually
|
|
# required during compilation (which has the -nodefaultlibs). libc is
|
|
# required for the link to go through. We remove sanitizers from the
|
|
# configuration checks to avoid spurious link errors.
|
|
check_cxx_compiler_flag(-nodefaultlibs LIBCXX_SUPPORTS_NODEFAULTLIBS_FLAG)
|
|
if (LIBCXX_SUPPORTS_NODEFAULTLIBS_FLAG)
|
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -nodefaultlibs")
|
|
if (LIBCXX_HAS_C_LIB)
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES c)
|
|
endif ()
|
|
if (LIBCXX_USE_COMPILER_RT)
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES -rtlib=compiler-rt)
|
|
elseif (LIBCXX_HAS_GCC_S_LIB)
|
|
list(APPEND CMAKE_REQUIRED_LIBRARIES gcc_s)
|
|
endif ()
|
|
if (CMAKE_C_FLAGS MATCHES -fsanitize OR CMAKE_CXX_FLAGS MATCHES -fsanitize)
|
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fno-sanitize=all")
|
|
endif ()
|
|
if (CMAKE_C_FLAGS MATCHES -fsanitize-coverage OR CMAKE_CXX_FLAGS MATCHES -fsanitize-coverage)
|
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fno-sanitize-coverage=edge,trace-cmp,indirect-calls,8bit-counters")
|
|
endif ()
|
|
endif ()
|
|
|
|
if(NOT WIN32 OR MINGW)
|
|
include(CheckLibcxxAtomic)
|
|
endif()
|
|
|
|
# Check compiler flags
|
|
|
|
check_cxx_compiler_flag(/WX LIBCXX_HAS_WX_FLAG)
|
|
check_cxx_compiler_flag(/WX- LIBCXX_HAS_NO_WX_FLAG)
|
|
check_cxx_compiler_flag(/EHsc LIBCXX_HAS_EHSC_FLAG)
|
|
check_cxx_compiler_flag(/EHs- LIBCXX_HAS_NO_EHS_FLAG)
|
|
check_cxx_compiler_flag(/EHa- LIBCXX_HAS_NO_EHA_FLAG)
|
|
check_cxx_compiler_flag(/GR- LIBCXX_HAS_NO_GR_FLAG)
|
|
|
|
|
|
# Check libraries
|
|
if(WIN32 AND NOT MINGW)
|
|
# TODO(compnerd) do we want to support an emulation layer that allows for the
|
|
# use of pthread-win32 or similar libraries to emulate pthreads on Windows?
|
|
set(LIBCXX_HAS_PTHREAD_LIB NO)
|
|
set(LIBCXX_HAS_M_LIB NO)
|
|
set(LIBCXX_HAS_RT_LIB NO)
|
|
else()
|
|
check_library_exists(pthread pthread_create "" LIBCXX_HAS_PTHREAD_LIB)
|
|
check_library_exists(m ccos "" LIBCXX_HAS_M_LIB)
|
|
check_library_exists(rt clock_gettime "" LIBCXX_HAS_RT_LIB)
|
|
endif()
|