diff --git a/llvm-project/clang/runtime/CMakeLists.txt b/llvm-project/clang/runtime/CMakeLists.txt index 61b1c60bf590..5b0d10a67699 100644 --- a/llvm-project/clang/runtime/CMakeLists.txt +++ b/llvm-project/clang/runtime/CMakeLists.txt @@ -75,6 +75,7 @@ if(LLVM_BUILD_EXTERNAL_COMPILER_RT AND EXISTS ${COMPILER_RT_SRC_ROOT}/) CMAKE_ARGS ${CLANG_COMPILER_RT_CMAKE_ARGS} -DCMAKE_C_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang -DCMAKE_CXX_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang++ + -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY -DCMAKE_ASM_COMPILER=${LLVM_RUNTIME_OUTPUT_INTDIR}/clang -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM} @@ -84,6 +85,7 @@ if(LLVM_BUILD_EXTERNAL_COMPILER_RT AND EXISTS ${COMPILER_RT_SRC_ROOT}/) -DCOMPILER_RT_EXEC_OUTPUT_DIR=${LLVM_RUNTIME_OUTPUT_INTDIR} -DCOMPILER_RT_INSTALL_PATH:STRING=lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION} -DCOMPILER_RT_INCLUDE_TESTS=${LLVM_INCLUDE_TESTS} + -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} -DLLVM_LIBDIR_SUFFIX=${LLVM_LIBDIR_SUFFIX} -DLLVM_RUNTIME_OUTPUT_INTDIR=${LLVM_RUNTIME_OUTPUT_INTDIR} diff --git a/llvm-project/clang/tools/IndexStore/CMakeLists.txt b/llvm-project/clang/tools/IndexStore/CMakeLists.txt index 1bcfc0734785..ddb77c91b22d 100644 --- a/llvm-project/clang/tools/IndexStore/CMakeLists.txt +++ b/llvm-project/clang/tools/IndexStore/CMakeLists.txt @@ -65,7 +65,7 @@ if (LLVM_INSTALL_TOOLCHAIN_ONLY) endif() endif() -set(INDEXSTORE_HEADERS_INSTALL_DESTINATION "local/include") +set(INDEXSTORE_HEADERS_INSTALL_DESTINATION "include") install(DIRECTORY ../../include/indexstore COMPONENT IndexStore diff --git a/llvm-project/cmake/Modules/HandleCompilerRT.cmake b/llvm-project/cmake/Modules/HandleCompilerRT.cmake index ac9e0871489d..b495cbfb5c2e 100644 --- a/llvm-project/cmake/Modules/HandleCompilerRT.cmake +++ b/llvm-project/cmake/Modules/HandleCompilerRT.cmake @@ -77,7 +77,7 @@ set(cmd_prefix "/clang:") endif() execute_process( - COMMAND ${clang_command} "${cmd_prefix}--rtlib=compiler-rt" "${cmd_prefix}-print-libgcc-file-name" + COMMAND ${clang_command} "${cmd_prefix}--rtlib=compiler-rt" "${cmd_prefix}-print-libgcc-file-name" "-resource-dir=$ENV{PREFIX}/lib/clang/latest/" RESULT_VARIABLE had_error OUTPUT_VARIABLE library_file ) diff --git a/swift/CMakeLists.txt b/swift/CMakeLists.txt index b7503ecdd6..c643c2c9a5 100644 --- a/swift/CMakeLists.txt +++ b/swift/CMakeLists.txt @@ -463,7 +463,7 @@ set(SWIFT_BUILD_HOST_DISPATCH FALSE) if(SWIFT_ENABLE_DISPATCH AND NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) # Only build libdispatch for the host if the host tools are being built and # specifically if these two libraries that depend on it are built. - if(SWIFT_INCLUDE_TOOLS AND SWIFT_BUILD_SOURCEKIT) + if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL Android AND SWIFT_INCLUDE_TOOLS AND SWIFT_BUILD_SOURCEKIT) set(SWIFT_BUILD_HOST_DISPATCH TRUE) endif() @@ -857,7 +857,7 @@ endif() if(SWIFT_BUILD_SWIFT_SYNTAX) # Only "HOSTTOOLS" is supported in Linux when Swift parser integration is enabled. - if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD|FREEBSD" AND NOT BOOTSTRAPPING_MODE STREQUAL "HOSTTOOLS") + if(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|OPENBSD|FREEBSD" AND NOT BOOTSTRAPPING_MODE STREQUAL "HOSTTOOLS") message(WARNING "Force setting BOOTSTRAPPING=HOSTTOOLS because Swift parser integration is enabled") set(BOOTSTRAPPING_MODE "HOSTTOOLS") endif() @@ -1187,6 +1187,7 @@ if(SWIFT_INCLUDE_TOOLS) message(STATUS " Assertions: ${LLVM_ENABLE_ASSERTIONS}") message(STATUS " LTO: ${SWIFT_TOOLS_ENABLE_LTO}") message(STATUS " Bootstrapping: ${BOOTSTRAPPING_MODE}") + message(STATUS " C++ Bridging: ${BRIDGING_MODE}") message(STATUS " Swift parser: ${SWIFT_BUILD_SWIFT_SYNTAX}") message(STATUS "") else() @@ -1279,7 +1280,8 @@ if (LLVM_ENABLE_DOXYGEN) message(STATUS "Doxygen: enabled") endif() -if(SWIFT_ENABLE_DISPATCH) +# Use the Termux libdispatch when cross-compiling instead. +if(SWIFT_ENABLE_DISPATCH AND ${CMAKE_HOST_SYSTEM_NAME} STREQUAL Android) include(Libdispatch) endif() @@ -1345,6 +1345,9 @@ if(SWIFT_INCLUDE_TOOLS) FetchContent_MakeAvailable(SwiftSyntax) endfunction() include_swift_syntax() + if (NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + add_dependencies(SwiftSyntax swift-stdlib-android-${SWIFT_HOST_VARIANT_ARCH}) + endif() add_subdirectory(lib) diff --git a/swift/SwiftCompilerSources/CMakeLists.txt b/swift/SwiftCompilerSources/CMakeLists.txt index f4a2eb2dddc..61a2548cf77 100644 --- a/swift/SwiftCompilerSources/CMakeLists.txt +++ b/swift/SwiftCompilerSources/CMakeLists.txt @@ -102,7 +102,7 @@ function(add_swift_compiler_modules_library name) elseif(${BOOTSTRAPPING_MODE} STREQUAL "CROSSCOMPILE") set(sdk_option "-sdk" "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_PATH}") get_filename_component(swift_exec_bin_dir ${ALS_SWIFT_EXEC} DIRECTORY) - set(sdk_option ${sdk_option} "-resource-dir" "${swift_exec_bin_dir}/../lib/swift") + set(sdk_option ${sdk_option} "-resource-dir" "${SWIFT_BINARY_DIR}/lib/swift") endif() get_versioned_target_triple(target ${SWIFT_HOST_VARIANT_SDK} ${SWIFT_HOST_VARIANT_ARCH} "${deployment_version}") @@ -186,6 +186,9 @@ function(add_swift_compiler_modules_library name) set("${module}_dep_target" ${dep_target}) set(all_module_targets ${all_module_targets} ${dep_target}) + if(${BOOTSTRAPPING_MODE} STREQUAL "CROSSCOMPILE") + add_dependencies(${dep_target} swift-stdlib-android-${SWIFT_HOST_VARIANT_ARCH}) + endif() endforeach() # Create a static library containing all module object files. diff --git a/swift/cmake/modules/AddPureSwift.cmake b/swift/cmake/modules/AddPureSwift.cmake index dc58b8fa0f6..37e9f817471 100644 --- a/swift/cmake/modules/AddPureSwift.cmake +++ b/swift/cmake/modules/AddPureSwift.cmake @@ -44,6 +44,13 @@ function(_add_host_swift_compile_options name) $<$:none>) target_compile_options(${name} PRIVATE $<$:-target;${SWIFT_HOST_TRIPLE}>) + if (NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + swift_android_tools_path(${SWIFT_HOST_VARIANT_ARCH} tools_path) + target_compile_options(${name} PRIVATE $<$:-resource-dir;${SWIFTLIB_DIR};> + $<$:-sdk;${SWIFT_SDK_ANDROID_ARCH_${SWIFT_HOST_VARIANT_ARCH}_PATH};> + $<$:-tools-directory;${tools_path};>) + add_dependencies(${name} swift-stdlib-android-${SWIFT_HOST_VARIANT_ARCH}) + endif() _add_host_variant_swift_sanitizer_flags(${name}) endfunction() diff --git a/swift/cmake/modules/AddSwift.cmake b/swift/cmake/modules/AddSwift.cmake index a448bcb23c4..0ddbac17a52 100644 --- a/swift/cmake/modules/AddSwift.cmake +++ b/swift/cmake/modules/AddSwift.cmake @@ -548,7 +548,7 @@ get_filename_component(swift_bin_dir ${SWIFT_EXEC_FOR_SWIFT_MODULES} DIRECTORY) get_filename_component(swift_dir ${swift_bin_dir} DIRECTORY) endif() - set(host_lib_dir "${swift_dir}/lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}") + set(host_lib_dir "${SWIFT_BINARY_DIR}/lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}") set(host_lib_arch_dir "${host_lib_dir}/${SWIFT_HOST_VARIANT_ARCH}") set(swiftrt "${host_lib_arch_dir}/swiftrt${CMAKE_C_OUTPUT_EXTENSION}") @@ -606,6 +606,9 @@ function(_add_swift_runtime_link_flags target relpath_to_lib_dir bootstrapping) endif() endif() endif() + if(SWIFT_HOST_VARIANT_SDK STREQUAL "ANDROID") + target_link_options(${target} PRIVATE "SHELL:-Xlinker -z -Xlinker nostart-stop-gc") + endif() endif() set_property(TARGET ${target} PROPERTY BUILD_WITH_INSTALL_RPATH YES) diff --git a/swift/localization/CMakeLists.txt b/swift/localization/CMakeLists.txt index 07a3585a66c..461a98b6856 100644 --- a/swift/localization/CMakeLists.txt +++ b/swift/localization/CMakeLists.txt @@ -1,3 +1,4 @@ +if(NOT SWIFT_PREBUILT_SWIFT) set(diagnostic_witness "${CMAKE_BINARY_DIR}/share/swift/diagnostics/generated") add_custom_command( @@ -32,3 +33,4 @@ swift_install_in_component( PATTERN "*.yaml" PATTERN "*.strings" ) +endif() diff --git a/swift/stdlib/cmake/modules/SwiftSource.cmake b/swift/stdlib/cmake/modules/SwiftSource.cmake index 4bc312f7f89..d71f6408d9f 100644 --- a/swift/stdlib/cmake/modules/SwiftSource.cmake +++ b/swift/stdlib/cmake/modules/SwiftSource.cmake @@ -708,7 +708,7 @@ function(_compile_swift_files endif() set(swift_compiler_tool_dep) - if(SWIFT_INCLUDE_TOOLS) + if(SWIFT_INCLUDE_TOOLS AND NOT ${BOOTSTRAPPING_MODE} STREQUAL "CROSSCOMPILE") # Depend on the binary itself, in addition to the symlink. set(swift_compiler_tool_dep "swift-frontend${target_suffix}") endif() diff --git a/swift/stdlib/public/Concurrency/CMakeLists.txt b/swift/stdlib/public/Concurrency/CMakeLists.txt index 3313f56c8a6..59804ff6228 100644 --- a/swift/stdlib/public/Concurrency/CMakeLists.txt +++ b/swift/stdlib/public/Concurrency/CMakeLists.txt @@ -24,8 +24,8 @@ if(SWIFT_CONCURRENCY_USES_DISPATCH) # FIXME: we can't rely on libdispatch having been built for the # target at this point in the process. Currently, we're relying # on soft-linking. - list(APPEND swift_concurrency_link_libraries - dispatch) + #list(APPEND swift_concurrency_link_libraries + # dispatch) endif() elseif("${SWIFT_CONCURRENCY_GLOBAL_EXECUTOR}" STREQUAL "singlethreaded" OR "${SWIFT_CONCURRENCY_GLOBAL_EXECUTOR}" STREQUAL "hooked") @@ -120,6 +120,7 @@ add_swift_target_library(swift_Concurrency ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} I INCORPORATE_OBJECT_LIBRARIES_SHARED_ONLY ${swift_concurrency_incorporate_object_libraries_so} LINK_LIBRARIES ${swift_concurrency_link_libraries} + LINK_FLAGS "-ldispatch" C_COMPILE_FLAGS -Dswift_Concurrency_EXPORTS ${SWIFT_RUNTIME_CONCURRENCY_C_FLAGS} diff --git a/swift/stdlib/public/Platform/CMakeLists.txt b/swift/stdlib/public/Platform/CMakeLists.txt index f958d4ce899..ac6d7248606 100644 --- a/swift/stdlib/public/Platform/CMakeLists.txt +++ b/swift/stdlib/public/Platform/CMakeLists.txt @@ -92,7 +92,7 @@ add_swift_target_library(swiftGlibc ${SWIFT_STDLIB_LIBRARY_BUILD_TYPES} IS_SDK_O ${SWIFT_RUNTIME_SWIFT_COMPILE_FLAGS} ${SWIFT_STANDARD_LIBRARY_SWIFT_FLAGS} ${swift_platform_compile_flags} - LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS}" + LINK_FLAGS "${SWIFT_RUNTIME_SWIFT_LINK_FLAGS};-landroid-posix-semaphore" TARGET_SDKS "${swiftGlibc_target_sdks}" INSTALL_IN_COMPONENT sdk-overlay DEPENDS glibc_modulemap) diff --git a/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake b/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake index 7a77e125f95..7eddfea2054 100644 --- a/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake +++ b/swift/tools/SourceKit/cmake/modules/AddSwiftSourceKit.cmake @@ -79,6 +79,9 @@ function(add_sourcekit_default_compiler_flags target) endif() target_compile_options(${target} PRIVATE -fblocks) + # Look in Termux sysroot for dispatch/dispatch.h from libdispatch + target_include_directories("${target}" SYSTEM PRIVATE + ${SWIFT_ANDROID_NATIVE_SYSROOT}/usr/include) endfunction() function(add_sourcekitd_swifrt_linking target path HAS_SWIFT_MODULES) @@ -115,7 +115,7 @@ function(add_sourcekitd_swifrt_linking target path HAS_SWIFT_MODULES) # installed host toolchain. get_filename_component(swift_bin_dir ${SWIFT_EXEC_FOR_SWIFT_MODULES} DIRECTORY) get_filename_component(swift_dir ${swift_bin_dir} DIRECTORY) - set(host_lib_dir "${swift_dir}/lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}") + set(host_lib_dir "${SWIFT_BINARY_DIR}/lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}") target_link_libraries(${target} PRIVATE ${swiftrt}) target_link_libraries(${target} PRIVATE "swiftCore") diff --git a/swift/tools/swift-compatibility-symbols/CMakeLists.txt b/swift/tools/swift-compatibility-symbols/CMakeLists.txt index 11cda641cc2..bd2cb152725 100644 --- a/swift/tools/swift-compatibility-symbols/CMakeLists.txt +++ b/swift/tools/swift-compatibility-symbols/CMakeLists.txt @@ -1,3 +1,4 @@ +if(NOT SWIFT_PREBUILT_SWIFT) add_swift_host_tool(swift-compatibility-symbols swift-compatibility-symbols.cpp LLVM_LINK_COMPONENTS support @@ -26,3 +27,4 @@ swift_install_in_component( COMPONENT compiler ) +endif() diff --git a/swift/tools/swift-plugin-server/CMakeLists.txt b/swift/tools/swift-plugin-server/CMakeLists.txt index a21b79ed260..5b591a30514 100644 --- a/swift/tools/swift-plugin-server/CMakeLists.txt +++ b/swift/tools/swift-plugin-server/CMakeLists.txt @@ -1,28 +1,19 @@ if (SWIFT_BUILD_SWIFT_SYNTAX) - # _swiftCSwiftPluginServer is just a C support library for swift-plugin-server - # Don't bother to create '.a' for that. - add_swift_host_library(_swiftCSwiftPluginServer OBJECT - Sources/CSwiftPluginServer/PluginServer.cpp - ) - target_link_libraries(_swiftCSwiftPluginServer PRIVATE - swiftDemangling + add_swift_host_tool(swift-plugin-server SWIFT_COMPONENT compiler Sources/CSwiftPluginServer/PluginServer.cpp) + add_pure_swift_host_library(SwiftPluginServer STATIC + Sources/swift-plugin-server/swift-plugin-server.swift ) - target_include_directories(_swiftCSwiftPluginServer PUBLIC + target_include_directories(SwiftPluginServer PUBLIC Sources/CSwiftPluginServer/include ) - - add_pure_swift_host_tool(swift-plugin-server - Sources/swift-plugin-server/swift-plugin-server.swift - DEPENDENCIES + target_link_libraries(SwiftPluginServer PRIVATE SwiftCompilerPluginMessageHandling) + target_link_libraries(swift-plugin-server PRIVATE swiftDemangling - $ - SWIFT_COMPONENT - compiler - SWIFT_DEPENDENCIES SwiftSyntaxMacros SwiftSyntaxMacroExpansion SwiftCompilerPluginMessageHandling swiftLLVMJSON + SwiftPluginServer ) target_include_directories(swift-plugin-server PRIVATE Sources/CSwiftPluginServer/include diff --git a/swift-corelibs-xctest/CMakeLists.txt b/swift-corelibs-xctest/CMakeLists.txt index 531e7c0..589930f 100644 --- a/swift-corelibs-xctest/CMakeLists.txt +++ b/swift-corelibs-xctest/CMakeLists.txt @@ -58,6 +58,7 @@ if(NOT CMAKE_SYSTEM_NAME STREQUAL Darwin) Foundation) if(NOT CMAKE_SYSTEM_NAME STREQUAL Windows) target_link_options(XCTest PRIVATE "SHELL:-no-toolchain-stdlib-rpath") + set_target_properties(XCTest PROPERTIES INSTALL_RPATH "$ORIGIN") endif() endif() set_target_properties(XCTest PROPERTIES diff --git a/swift-syntax/cmake/modules/AddSwiftHostLibrary.cmake b/swift-syntax/cmake/modules/AddSwiftHostLibrary.cmake index 951c2d2e..1157ec66 100644 --- a/swift-syntax/cmake/modules/AddSwiftHostLibrary.cmake +++ b/swift-syntax/cmake/modules/AddSwiftHostLibrary.cmake @@ -87,6 +87,12 @@ function(add_swift_syntax_library name) target_compile_options(${name} PRIVATE $<$:-wmo>) endif() + if (NOT "${SWIFT_ANDROID_NDK_PATH}" STREQUAL "") + swift_android_tools_path(${SWIFT_HOST_VARIANT_ARCH} tools_path) + target_compile_options(${name} PRIVATE $<$:-resource-dir;${SWIFTLIB_DIR};> + $<$:-sdk;${SWIFT_SDK_ANDROID_ARCH_${SWIFT_HOST_VARIANT_ARCH}_PATH};> + $<$:-tools-directory;${tools_path};>) + endif() if(LLVM_USE_LINKER) target_link_options(${name} PRIVATE