diff --git a/CMakeLists.txt b/CMakeLists.txt index ca03e573a..881019203 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,32 +1,13 @@ -cmake_minimum_required(VERSION 3.15.1) +cmake_minimum_required(VERSION 3.26...3.29) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) -# NOTE(compnerd) enable CMP0091 - select MSVC runtime based on -# CMAKE_MSVC_RUNTIME_LIBRARY. Requires CMake 3.15 or newer. -if(POLICY CMP0091) - cmake_policy(SET CMP0091 NEW) -endif() - project(dispatch VERSION 1.3 LANGUAGES C CXX) -if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") - include(ClangClCompileRules) -endif() - -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - if(NOT MINGW) - include(DispatchWindowsSupport) - dispatch_windows_arch_spelling(${CMAKE_SYSTEM_PROCESSOR} DISPATCH_MSVC_ARCH) - dispatch_windows_include_for_arch(${DISPATCH_MSVC_ARCH} DISPATCH_INCLUDES) - include_directories(BEFORE SYSTEM ${DISPATCH_INCLUDES}) - dispatch_windows_lib_for_arch(${CMAKE_SYSTEM_PROCESSOR} DISPATCH_LIBDIR) - link_directories(${DISPATCH_LIBDIR}) - endif() - +if(WIN32) include(CheckCSourceCompiles) include(CheckSymbolExists) @@ -110,6 +91,11 @@ set(CMAKE_C_VISIBILITY_INLINES_HIDDEN YES) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set(CMAKE_POSITION_INDEPENDENT_CODE YES) +if(NOT APPLE) + set(CMAKE_INSTALL_RPATH "$ORIGIN") +endif() + set(CMAKE_THREAD_PREFER_PTHREAD TRUE) set(THREADS_PREFER_PTHREAD_FLAG TRUE) if(ANDROID) @@ -131,7 +117,6 @@ include(DispatchAppleOptions) include(DispatchSanitization) include(DispatchCompilerWarnings) include(DTrace) -include(SwiftSupport) # NOTE(abdulras) this is the CMake supported way to control whether we generate # shared or static libraries. This impacts the behaviour of `add_library` in @@ -145,7 +130,7 @@ set(USE_LIBDISPATCH_INIT_CONSTRUCTOR ${ENABLE_DISPATCH_INIT_CONSTRUCTOR}) option(ENABLE_DTRACE "enable dtrace support" "") -if(CMAKE_SYSTEM_NAME STREQUAL Darwin OR CMAKE_SYSTEM_NAME STREQUAL FreeBSD) +if(APPLE OR BSD) set(ENABLE_INTERNAL_PTHREAD_WORKQUEUES_DEFAULT OFF) else() set(ENABLE_INTERNAL_PTHREAD_WORKQUEUES_DEFAULT ON) @@ -170,6 +155,14 @@ option(INSTALL_PRIVATE_HEADERS "installs private headers in the same location as option(ENABLE_SWIFT "enable libdispatch swift overlay" OFF) if(ENABLE_SWIFT) enable_language(Swift) + + include(PlatformInfo) + + option(Dispatch_INSTALL_NESTED_SUBDIR "Install libraries under a platform and architecture subdirectory" NO) + set(Dispatch_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${Dispatch_PLATFORM_SUBDIR}$<$<BOOL:${Dispatch_INSTALL_NESTED_SUBDIR}>:/${Dispatch_ARCH_SUBDIR}>") + set(Dispatch_INSTALL_SWIFTMODULEDIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${Dispatch_PLATFORM_SUBDIR}$<$<BOOL:${Dispatch_INSTALL_NESTED_SUBDIR}>:/${Dispatch_ARCH_SUBDIR}>") +else() + set(Dispatch_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) endif() option(ENABLE_THREAD_LOCAL_STORAGE "enable usage of thread local storage via _Thread_local" ON) @@ -189,7 +182,7 @@ if(__BUILTIN_TRAP) set(HAVE_NORETURN_BUILTIN_TRAP 1) endif() -if(NOT CMAKE_SYSTEM_NAME STREQUAL Android) +if(NOT ANDROID) find_package(LibRT) endif() @@ -244,12 +237,12 @@ if(HAVE_MACH) else() set(USE_MACH_SEM 0) endif() -if(CMAKE_SYSTEM_NAME STREQUAL Windows) - add_compile_definitions($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:USE_WIN32_SEM>) +if(WIN32) + add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:USE_WIN32_SEM>) endif() check_library_exists(pthread sem_init "" USE_POSIX_SEM) # NOTE: android has not always provided a libpthread, but uses the pthreads API -if(CMAKE_SYSTEM_NAME STREQUAL Android) +if(ANDROID) set(USE_POSIX_SEM 1) endif() @@ -275,16 +268,16 @@ check_symbol_exists(VQ_FREE_SPACE_CHANGE "sys/mount.h" HAVE_DECL_VQ_FREE_SPACE_C check_symbol_exists(strlcpy "string.h" HAVE_STRLCPY) check_symbol_exists(program_invocation_name "errno.h" HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME) if (HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME) - add_compile_definitions($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:_GNU_SOURCE=1>) + add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:_GNU_SOURCE=1>) endif() check_symbol_exists(__printflike "bsd/sys/cdefs.h" HAVE_PRINTFLIKE) -if(CMAKE_SYSTEM_NAME STREQUAL Android) +if(ANDROID) set(ENABLE_DTRACE_DEFAULT OFF) endif() -if(CMAKE_SYSTEM_NAME STREQUAL FreeBSD) - add_compile_definitions($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:_WITH_DPRINTF>) +if(BSD) + add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:_WITH_DPRINTF>) endif() if(ENABLE_DTRACE) @@ -295,9 +288,9 @@ if(ENABLE_DTRACE) endif() if(dtrace_EXECUTABLE) - add_compile_definitions($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:DISPATCH_USE_DTRACE=1>) + add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:DISPATCH_USE_DTRACE=1>) else() - add_compile_definitions($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:DISPATCH_USE_DTRACE=0>) + add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:DISPATCH_USE_DTRACE=0>) endif() find_program(leaks_EXECUTABLE leaks) @@ -306,34 +299,24 @@ if(leaks_EXECUTABLE) endif() -if(CMAKE_SYSTEM_NAME STREQUAL Darwin) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap> - $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/private/darwin/module.modulemap>) +if(APPLE) + add_compile_options($<:$<COMPILE_LANGUAGE:C,CXX>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap> + $<:$<COMPILE_LANGUAGE:C,CXX>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/private/darwin/module.modulemap>) else() - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap> - $<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/private/generic/module.modulemap>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap> + $<$<COMPILE_LANGUAGE:C,CXX>:-fmodule-map-file=${PROJECT_SOURCE_DIR}/private/generic/module.modulemap>) endif() configure_file("${PROJECT_SOURCE_DIR}/cmake/config.h.in" "${PROJECT_BINARY_DIR}/config/config_ac.h") -add_compile_definitions($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:HAVE_CONFIG_H>) +add_compile_definitions($<$<COMPILE_LANGUAGE:C,CXX>:HAVE_CONFIG_H>) if(ENABLE_SWIFT) - if(NOT SWIFT_SYSTEM_NAME) - if(CMAKE_SYSTEM_NAME STREQUAL Darwin) - set(SWIFT_SYSTEM_NAME macosx) - else() - set(SWIFT_SYSTEM_NAME "$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>") - endif() - endif() - - set(INSTALL_TARGET_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/${SWIFT_SYSTEM_NAME}" CACHE PATH "Path where the libraries will be installed") set(INSTALL_DISPATCH_HEADERS_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/dispatch" CACHE PATH "Path where the headers will be installed for libdispatch") set(INSTALL_BLOCK_HEADERS_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/Block" CACHE PATH "Path where the headers will be installed for the blocks runtime") set(INSTALL_OS_HEADERS_DIR "${CMAKE_INSTALL_LIBDIR}/swift$<$<NOT:$<BOOL:${BUILD_SHARED_LIBS}>>:_static>/os" CACHE PATH "Path where the os/ headers will be installed") else() - set(INSTALL_TARGET_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Path where the libraries will be installed") set(INSTALL_DISPATCH_HEADERS_DIR "include/dispatch" CACHE PATH "Path where the headers will be installed") set(INSTALL_BLOCK_HEADERS_DIR "include" CACHE PATH "Path where the headers will be installed for the blocks runtime") set(INSTALL_OS_HEADERS_DIR "include/os" CACHE PATH "Path where the headers will be installed") diff --git a/cmake/config.h.in b/cmake/config.h.in index 2896a2083..27737c991 100644 --- a/cmake/config.h.in +++ b/cmake/config.h.in @@ -257,3 +257,6 @@ /* Define if using Darwin $NOCANCEL */ #cmakedefine __DARWIN_NON_CANCELABLE + +/* Define to 1 if you have the `strlcpy` function. */ +#cmakedefine01 HAVE_STRLCPY diff --git a/cmake/modules/ClangClCompileRules.cmake b/cmake/modules/ClangClCompileRules.cmake deleted file mode 100644 index 0265d5ea7..000000000 --- a/cmake/modules/ClangClCompileRules.cmake +++ /dev/null @@ -1,5 +0,0 @@ - -# clang-cl interprets paths starting with /U as macro undefines, so we need to -# put a -- before the input file path to force it to be treated as a path. -string(REPLACE "-c <SOURCE>" "-c -- <SOURCE>" CMAKE_C_COMPILE_OBJECT "${CMAKE_C_COMPILE_OBJECT}") -string(REPLACE "-c <SOURCE>" "-c -- <SOURCE>" CMAKE_CXX_COMPILE_OBJECT "${CMAKE_CXX_COMPILE_OBJECT}") diff --git a/cmake/modules/DispatchCompilerWarnings.cmake b/cmake/modules/DispatchCompilerWarnings.cmake index cd71f36e5..b10644410 100644 --- a/cmake/modules/DispatchCompilerWarnings.cmake +++ b/cmake/modules/DispatchCompilerWarnings.cmake @@ -4,81 +4,81 @@ if("${CMAKE_C_SIMULATE_ID}" STREQUAL "MSVC") elseif(WIN32) # Tareting Windows but using a non-MSVC compiler. Set -fms-extensions # so that we can use __popcnt64 - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-fms-extensions>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-fms-extensions>) else() - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Werror>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wall>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wextra>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Werror>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wall>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wextra>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Warray-bounds-pointer-arithmetic>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wassign-enum>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Watomic-properties>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wcomma>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wconditional-uninitialized>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wconversion>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wcovered-switch-default>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wdate-time>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wdeprecated>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wdocumentation>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wdouble-promotion>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wduplicate-enum>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wexpansion-to-defined>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wfloat-equal>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Widiomatic-parentheses>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Winfinite-recursion>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wmissing-prototypes>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wnewline-eof>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wnullable-to-nonnull-conversion>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wobjc-interface-ivars>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wover-aligned>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wpacked>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wpointer-arith>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wselector>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wshadow>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wshorten-64-to-32>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wsign-conversion>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wstatic-in-inline>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wsuper-class-method-mismatch>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wswitch>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wunguarded-availability>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wunreachable-code>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wunused>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Warray-bounds-pointer-arithmetic>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wassign-enum>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Watomic-properties>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wcomma>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wconditional-uninitialized>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wconversion>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wcovered-switch-default>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wdate-time>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wdeprecated>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wdocumentation>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wdouble-promotion>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wduplicate-enum>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wexpansion-to-defined>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wfloat-equal>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Widiomatic-parentheses>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Winfinite-recursion>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wmissing-prototypes>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wnewline-eof>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wnullable-to-nonnull-conversion>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wobjc-interface-ivars>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wover-aligned>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wpacked>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wpointer-arith>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wselector>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wshadow>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wshorten-64-to-32>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wsign-conversion>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wstatic-in-inline>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wsuper-class-method-mismatch>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wswitch>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wunguarded-availability>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wunreachable-code>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wunused>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-unknown-warning-option>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-trigraphs>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-four-char-constants>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-disabled-macro-expansion>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-pedantic>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-bad-function-cast>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-c++-compat>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-c++98-compat>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-c++98-compat-pedantic>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-cast-align>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-cast-qual>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-documentation-unknown-command>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-format-nonliteral>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-missing-variable-declarations>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-old-style-cast>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-padded>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-reserved-id-macro>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-shift-sign-overflow>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-undef>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-unreachable-code-aggressive>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-unused-macros>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-used-but-marked-unused>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-void-pointer-to-int-cast>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-vla>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-unknown-warning-option>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-trigraphs>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-four-char-constants>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-disabled-macro-expansion>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-pedantic>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-bad-function-cast>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++-compat>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++98-compat>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-c++98-compat-pedantic>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-cast-align>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-cast-qual>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-documentation-unknown-command>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-format-nonliteral>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-missing-variable-declarations>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-old-style-cast>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-padded>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-reserved-id-macro>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-shift-sign-overflow>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-undef>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-unreachable-code-aggressive>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-unused-macros>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-used-but-marked-unused>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-void-pointer-to-int-cast>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-vla>) - if(CMAKE_SYSTEM_NAME STREQUAL Android) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-incompatible-function-pointer-types>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-implicit-function-declaration>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-conversion>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-int-conversion>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-shorten-64-to-32>) + if(ANDROID) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-incompatible-function-pointer-types>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-implicit-function-declaration>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-conversion>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-int-conversion>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-shorten-64-to-32>) endif() - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-error=assign-enum>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-error=assign-enum>) # Should re-enable after rdar://133498289 is fixed (ie. fixing the one mismatched cast in apply.c) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-cast-function-type-mismatch>) - add_compile_options($<$<OR:$<COMPILE_LANGUAGE:C>,$<COMPILE_LANGUAGE:CXX>>:-Wno-error=unknown-warning-option>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-cast-function-type-mismatch>) + add_compile_options($<$<COMPILE_LANGUAGE:C,CXX>:-Wno-error=unknown-warning-option>) endif() diff --git a/cmake/modules/DispatchSanitization.cmake b/cmake/modules/DispatchSanitization.cmake index a0641f524..b5c6ee64f 100644 --- a/cmake/modules/DispatchSanitization.cmake +++ b/cmake/modules/DispatchSanitization.cmake @@ -2,7 +2,7 @@ set(DISPATCH_USE_SANITIZER "" CACHE STRING "Define the sanitizer used to build binaries and tests.") -if(CMAKE_SYSTEM_NAME STREQUAL Darwin AND DISPATCH_USE_SANITIZER) +if(APPLE AND DISPATCH_USE_SANITIZER) message(FATAL_ERROR "building libdispatch with sanitization is not supported on Darwin") endif() diff --git a/cmake/modules/DispatchWindowsSupport.cmake b/cmake/modules/DispatchWindowsSupport.cmake deleted file mode 100644 index 750b3be11..000000000 --- a/cmake/modules/DispatchWindowsSupport.cmake +++ /dev/null @@ -1,74 +0,0 @@ - -function(dispatch_windows_arch_spelling arch var) - if(${arch} STREQUAL i686) - set(${var} x86 PARENT_SCOPE) - elseif(${arch} STREQUAL x86_64 OR ${arch} STREQUAL AMD64) - set(${var} x64 PARENT_SCOPE) - elseif(${arch} STREQUAL armv7) - set(${var} arm PARENT_SCOPE) - elseif(${arch} STREQUAL aarch64 OR ${arch} STREQUAL ARM64) - set(${var} arm64 PARENT_SCOPE) - else() - message(FATAL_ERROR "do not know MSVC spelling for ARCH: `${arch}`") - endif() -endfunction() - -function(dispatch_verify_windows_environment_variables) - set(VCToolsInstallDir $ENV{VCToolsInstallDir}) - set(UniversalCRTSdkDir $ENV{UniversalCRTSdkDir}) - set(UCRTVersion $ENV{UCRTVersion}) - - if("${VCToolsInstallDir}" STREQUAL "") - message(SEND_ERROR "VCToolsInstallDir environment variable must be set") - endif() - if("${UniversalCRTSdkDir}" STREQUAL "") - message(SEND_ERROR "UniversalCRTSdkDir environment variable must be set") - endif() - if("${UCRTVersion}" STREQUAL "") - message(SEND_ERROR "UCRTVersion environment variable must be set") - endif() -endfunction() - -function(dispatch_windows_include_for_arch arch var) - dispatch_verify_windows_environment_variables() - - set(paths - "$ENV{VCToolsInstallDir}/include" - "$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/ucrt" - "$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/shared" - "$ENV{UniversalCRTSdkDir}/Include/$ENV{UCRTVersion}/um") - set(${var} ${paths} PARENT_SCOPE) -endfunction() - -function(dispatch_windows_lib_for_arch arch var) - dispatch_verify_windows_environment_variables() - dispatch_windows_arch_spelling(${arch} ARCH) - - set(paths) - if(${ARCH} STREQUAL x86) - list(APPEND paths "$ENV{VCToolsInstallDir}/Lib") - else() - list(APPEND paths "$ENV{VCToolsInstallDir}/Lib/${ARCH}") - endif() - list(APPEND paths - "$ENV{UniversalCRTSdkDir}/Lib/$ENV{UCRTVersion}/ucrt/${ARCH}" - "$ENV{UniversalCRTSdkDir}/Lib/$ENV{UCRTVersion}/um/${ARCH}") - set(${var} ${paths} PARENT_SCOPE) -endfunction() - -function(dispatch_windows_generate_sdk_vfs_overlay flags) - dispatch_verify_windows_environment_variables() - - get_filename_component(VCToolsInstallDir $ENV{VCToolsInstallDir} ABSOLUTE) - get_filename_component(UniversalCRTSdkDir $ENV{UniversalCRTSdkDir} ABSOLUTE) - set(UCRTVersion $ENV{UCRTVersion}) - - # TODO(compnerd) use a target to avoid re-creating this file all the time - configure_file("${PROJECT_SOURCE_DIR}/utils/WindowsSDKVFSOverlay.yaml.in" - "${PROJECT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml" - @ONLY) - - set(${flags} - -ivfsoverlay;"${PROJECT_BINARY_DIR}/windows-sdk-vfs-overlay.yaml" - PARENT_SCOPE) -endfunction() diff --git a/cmake/modules/PlatformInfo.cmake b/cmake/modules/PlatformInfo.cmake new file mode 100644 index 000000000..f007b7fa4 --- /dev/null +++ b/cmake/modules/PlatformInfo.cmake @@ -0,0 +1,48 @@ +# This source file is part of the Swift.org open source project +# +# Copyright (c) 2025 Apple Inc. and the Swift project authors +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See http://swift.org/LICENSE.txt for license information +# See http://swift.org/CONTRIBUTORS.txt for Swift project authors + +set(print_target_info_invocation "${CMAKE_Swift_COMPILER}" -print-target-info) +if(CMAKE_Swift_COMPILER_TARGET) + list(APPEND print_target_info_invocation -target ${CMAKE_Swift_COMPILER_TARGET}) +endif() +execute_process(COMMAND ${print_target_info_invocation} OUTPUT_VARIABLE target_info_json) +message(CONFIGURE_LOG "Swift Target Info: ${print_target_info_invocation}\n" +"${target_info_json}") + +if(NOT Dispatch_MODULE_TRIPLE) + string(JSON module_triple GET "${target_info_json}" "target" "moduleTriple") + set(Dispatch_MODULE_TRIPLE "${module_triple}" CACHE STRING "Triple used for installed swift{doc,module,interface} files") + mark_as_advanced(Dispatch_MODULE_TRIPLE) + + message(CONFIGURE_LOG "Swift Module Triple: ${module_triple}") +endif() + +if(NOT Dispatch_PLATFORM_SUBDIR) + string(JSON platform GET "${target_info_json}" "target" "platform") + if(NOT platform) + if(NOT SWIFT_SYSTEM_NAME) + if(CMAKE_SYSTEM_NAME STREQUAL Darwin) + set(platform macosx) + else() + set(platform $<LOWER_CASE:${CMAKE_SYSTEM_NAME}>) + endif() + endif() + endif() + set(Dispatch_PLATFORM_SUBDIR "${platform}" CACHE STRING "Platform name used for installed swift{doc,module,interface} files") + mark_as_advanced(Dispatch_PLATFORM_SUBDIR) + + message(CONFIGURE_LOG "Swift Platform: ${platform}") +endif() + +if(NOT Dispatch_ARCH_SUBDIR) + string(JSON arch GET "${target_info_json}" "target" "arch") + set(Dispatch_ARCH_SUBDIR "${arch}" CACHE STRING "Architecture used for setting the architecture subdirectory") + mark_as_advanced(Dispatch_ARCH_SUBDIR) + + message(CONFIGURE_LOG "Swift Architecture: ${arch}") +endif() diff --git a/cmake/modules/SwiftSupport.cmake b/cmake/modules/SwiftSupport.cmake deleted file mode 100644 index a42b61e40..000000000 --- a/cmake/modules/SwiftSupport.cmake +++ /dev/null @@ -1,41 +0,0 @@ - -# Returns the current achitecture name in a variable -# -# Usage: -# get_swift_host_arch(result_var_name) -# -# If the current architecture is supported by Swift, sets ${result_var_name} -# with the sanitized host architecture name derived from CMAKE_SYSTEM_PROCESSOR. -function(get_swift_host_arch result_var_name) - if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64") - set("${result_var_name}" "x86_64" PARENT_SCOPE) - elseif ("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "AArch64|aarch64|arm64|ARM64") - if(CMAKE_SYSTEM_NAME MATCHES Darwin) - set("${result_var_name}" "arm64" PARENT_SCOPE) - else() - set("${result_var_name}" "aarch64" PARENT_SCOPE) - endif() - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64") - set("${result_var_name}" "powerpc64" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ppc64le") - set("${result_var_name}" "powerpc64le" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x") - set("${result_var_name}" "s390x" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l") - set("${result_var_name}" "armv6" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7-a") - set("${result_var_name}" "armv7" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv7l") - set("${result_var_name}" "armv7" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64") - set("${result_var_name}" "x86_64" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "IA64") - set("${result_var_name}" "itanium" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86") - set("${result_var_name}" "i686" PARENT_SCOPE) - elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686") - set("${result_var_name}" "i686" PARENT_SCOPE) - else() - message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}") - endif() -endfunction() diff --git a/dispatch/CMakeLists.txt b/dispatch/CMakeLists.txt index a7f5fc306..49258cea1 100644 --- a/dispatch/CMakeLists.txt +++ b/dispatch/CMakeLists.txt @@ -1,5 +1,5 @@ -if(CMAKE_SYSTEM_NAME STREQUAL Darwin) +if(APPLE) set(DISPATCH_MODULE_MAP ${PROJECT_SOURCE_DIR}/dispatch/darwin/module.modulemap) elseif(BUILD_SHARED_LIBS) set(DISPATCH_MODULE_MAP ${PROJECT_SOURCE_DIR}/dispatch/generic/module.modulemap) diff --git a/dispatch/generic_static/module.modulemap b/dispatch/generic_static/module.modulemap index d5d64d2d1..f7fdaae76 100644 --- a/dispatch/generic_static/module.modulemap +++ b/dispatch/generic_static/module.modulemap @@ -3,7 +3,6 @@ module Dispatch { export * link "dispatch" link "BlocksRuntime" - link "DispatchStubs" } module DispatchIntrospection [system] [extern_c] { diff --git a/src/BlocksRuntime/CMakeLists.txt b/src/BlocksRuntime/CMakeLists.txt index 945e87a7e..5308fe14f 100644 --- a/src/BlocksRuntime/CMakeLists.txt +++ b/src/BlocksRuntime/CMakeLists.txt @@ -2,7 +2,7 @@ add_library(BlocksRuntime data.c runtime.c) -if(CMAKE_SYSTEM_NAME STREQUAL Windows) +if(WIN32) target_sources(BlocksRuntime PRIVATE BlocksRuntime.def) @@ -37,6 +37,6 @@ endif() set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS BlocksRuntime) install(TARGETS BlocksRuntime EXPORT dispatchExports - ARCHIVE DESTINATION ${INSTALL_TARGET_DIR} - LIBRARY DESTINATION ${INSTALL_TARGET_DIR} + ARCHIVE DESTINATION ${Dispatch_INSTALL_LIBDIR} + LIBRARY DESTINATION ${Dispatch_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 320b6fcdc..e1ef169a8 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,5 +1,5 @@ -if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) +if(NOT APPLE) add_subdirectory(BlocksRuntime) endif() @@ -57,7 +57,7 @@ add_library(dispatch shims/yield.c shims/yield.h) -if(CMAKE_SYSTEM_NAME STREQUAL Windows) +if(WIN32) target_sources(dispatch PRIVATE shims/generic_sys_queue.h shims/generic_win_stubs.c @@ -82,19 +82,12 @@ if(ENABLE_DTRACE) endif() if(HAVE_OBJC) - # TODO(compnerd) split DispatchStubs.cc into a separate component for the ObjC - # registration and a separate component for the swift compiler's emission of a - # call to the ObjC autorelease elision entry point. target_sources(dispatch PRIVATE data.m object.m swift/DispatchStubs.cc) endif() - -set_target_properties(dispatch PROPERTIES - POSITION_INDEPENDENT_CODE YES) - target_include_directories(dispatch PUBLIC ${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} @@ -103,11 +96,11 @@ target_include_directories(dispatch PUBLIC target_include_directories(dispatch PRIVATE ${PROJECT_SOURCE_DIR}/private) -if(CMAKE_SYSTEM_NAME STREQUAL Windows) +if(WIN32) target_compile_definitions(dispatch PRIVATE _CRT_NONSTDC_NO_WARNINGS _CRT_SECURE_NO_WARNINGS) -elseif(CMAKE_SYSTEM_NAME STREQUAL Android) +elseif(ANDROID) target_compile_options(dispatch PRIVATE -U_GNU_SOURCE) endif() @@ -157,7 +150,7 @@ target_link_libraries(dispatch PRIVATE Threads::Threads) target_link_libraries(dispatch PUBLIC BlocksRuntime::BlocksRuntime) -if(CMAKE_SYSTEM_NAME STREQUAL Windows) +if(WIN32) target_link_libraries(dispatch PRIVATE AdvAPI32 ShLwApi @@ -166,7 +159,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL Windows) synchronization) endif() -if(CMAKE_SYSTEM_NAME STREQUAL Darwin) +if(APPLE) set_property(TARGET dispatch APPEND_STRING PROPERTY LINK_FLAGS "-Xlinker -compatibility_version -Xlinker 1" "-Xlinker -current_version -Xlinker ${VERSION}" @@ -174,10 +167,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL Darwin) "-Xlinker -alias_list -Xlinker ${PROJECT_SOURCE_DIR}/xcodeconfig/libdispatch.aliases") endif() -if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|Windows") - set_target_properties(dispatch PROPERTIES INSTALL_RPATH "$ORIGIN") -endif() - if(LINKER_SUPPORTS_BUILD_ID) target_link_options(dispatch PRIVATE "LINKER:--build-id=sha1") endif() @@ -189,6 +178,6 @@ endif() set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS dispatch) install(TARGETS dispatch EXPORT dispatchExports - ARCHIVE DESTINATION ${INSTALL_TARGET_DIR} - LIBRARY DESTINATION ${INSTALL_TARGET_DIR} + ARCHIVE DESTINATION ${Dispatch_INSTALL_LIBDIR} + LIBRARY DESTINATION ${Dispatch_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) diff --git a/src/swift/CMakeLists.txt b/src/swift/CMakeLists.txt index 4fffc84a4..62d1ef68e 100644 --- a/src/swift/CMakeLists.txt +++ b/src/swift/CMakeLists.txt @@ -1,9 +1,9 @@ -add_library(DispatchStubs STATIC - DispatchStubs.cc) -target_include_directories(DispatchStubs PRIVATE - ${PROJECT_SOURCE_DIR}) -set_target_properties(DispatchStubs PROPERTIES - POSITION_INDEPENDENT_CODE YES) +if(HAVE_OBJC) + add_library(DispatchStubs STATIC + DispatchStubs.cc) + target_include_directories(DispatchStubs PRIVATE + ${PROJECT_SOURCE_DIR}) +endif() add_library(swiftDispatch Block.swift @@ -27,28 +27,36 @@ set_target_properties(swiftDispatch PROPERTIES Swift_MODULE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/swift INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_BINARY_DIR}/swift) target_link_libraries(swiftDispatch PRIVATE - DispatchStubs + $<$<BOOL:${HAVE_OBJC}>:DispatchStubs> BlocksRuntime::BlocksRuntime) target_link_libraries(swiftDispatch PUBLIC dispatch) +if(NOT DARWIN AND NOT WIN32) + target_link_options(swiftDispatch PRIVATE "SHELL:-no-toolchain-stdlib-rpath") +endif() -get_swift_host_arch(swift_arch) -install(FILES - ${CMAKE_CURRENT_BINARY_DIR}/swift/Dispatch.swiftmodule - ${CMAKE_CURRENT_BINARY_DIR}/swift/Dispatch.swiftdoc - DESTINATION ${INSTALL_TARGET_DIR}/${swift_arch}) set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS swiftDispatch) install(TARGETS swiftDispatch EXPORT dispatchExports - ARCHIVE DESTINATION ${INSTALL_TARGET_DIR} - LIBRARY DESTINATION ${INSTALL_TARGET_DIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) -if(NOT BUILD_SHARED_LIBS) + ARCHIVE DESTINATION "${Dispatch_INSTALL_LIBDIR}" + LIBRARY DESTINATION "${Dispatch_INSTALL_LIBDIR}" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}") +INSTALL(FILES $<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_DIRECTORY>/$<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_NAME>.swiftdoc + DESTINATION ${Dispatch_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_NAME>.swiftmodule + RENAME ${Dispatch_MODULE_TRIPLE}.swiftdoc) +# INSTALL(FILES $<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_DIRECTORY>/$<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_NAME>.swiftinterface +# DESTINATION ${Dispatch_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_NAME>.swiftmodule +# RENAME ${Dispach_MODULE_TRIPLE}.swiftinterface) +INSTALL(FILES $<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_DIRECTORY>/$<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_NAME>.swiftmodule + DESTINATION ${Dispatch_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_NAME>.swiftmodule + RENAME ${Dispatch_MODULE_TRIPLE}.swiftmodule) +INSTALL(FILES $<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_DIRECTORY>/$<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_NAME>.swiftsourceinfo + DESTINATION ${Dispatch_INSTALL_SWIFTMODULEDIR}/$<TARGET_PROPERTY:swiftDispatch,Swift_MODULE_NAME>.swiftmodule + RENAME ${Dispatch_MODULE_TRIPLE}.swiftsourceinfo) + +if(NOT BUILD_SHARED_LIBS AND HAVE_OBJC) set_property(GLOBAL APPEND PROPERTY DISPATCH_EXPORTS DispatchStubs) install(TARGETS DispatchStubs EXPORT dispatchExports - DESTINATION ${INSTALL_TARGET_DIR}) -elseif(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|Windows") - target_link_options(swiftDispatch PRIVATE "SHELL:-no-toolchain-stdlib-rpath") - set_target_properties(swiftDispatch PROPERTIES INSTALL_RPATH "$ORIGIN") + DESTINATION ${Dispatch_INSTALL_LIBDIR}) endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0176a062b..e6dcf943f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,5 @@ -if(CMAKE_SYSTEM_NAME STREQUAL Windows) +if(WIN32) execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_directory "${PROJECT_SOURCE_DIR}/private" "${CMAKE_CURRENT_BINARY_DIR}/dispatch") @@ -15,7 +15,7 @@ else() "${CMAKE_CURRENT_BINARY_DIR}/leaks-wrapper") endif() -if(CMAKE_SYSTEM_NAME STREQUAL Linux) +if(LINUX) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lrt") endif() @@ -92,8 +92,7 @@ function(add_unit_test name) # fails with the multiple definition errors seen in android/ndk#176, so I # pulled in this workaround noted there. The tests build and run with this # flag applied. - if(NOT BUILD_SHARED_LIBS AND CMAKE_SYSTEM_NAME STREQUAL Android AND - CMAKE_SYSTEM_PROCESSOR STREQUAL armv7-a) + if(NOT BUILD_SHARED_LIBS AND ANDROID AND CMAKE_SYSTEM_PROCESSOR STREQUAL armv7-a) target_link_options(${name} PRIVATE "LINKER:--allow-multiple-definition") endif() target_link_libraries(${name} @@ -162,7 +161,7 @@ if(EXTENDED_TEST_SUITE) endif() # add C tests for platform-specific functionality when applicable -if(CMAKE_SYSTEM_NAME STREQUAL Darwin) +if(APPLE) list(APPEND DISPATCH_C_TESTS deadname proc