Skip to content

Commit 4c493ef

Browse files
committed
libswift: add support for Android and OpenBSD in the CMake config
Add a new libswift build mode for cross-compilation in the process, that currently only works for non-Darwin hosts.
1 parent 290df69 commit 4c493ef

File tree

4 files changed

+23
-9
lines changed

4 files changed

+23
-9
lines changed

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,8 @@ cmake_dependent_option(LIBSWIFT_BUILD_MODE "How to build libswift. Possible valu
190190
BOOTSTRAPPING: libswift is built with a 2-stage bootstrapping process
191191
BOOTSTRAPPING-WITH-HOSTLIBS: libswift is built with a 2-stage bootstrapping process,
192192
but the compiler links against the host system swift libs (macOS only)
193+
CROSSCOMPILE: libswift is cross-compiled with a native host compiler, provided in
194+
`SWIFT_NATIVE_SWIFT_TOOLS_PATH` (non-Darwin only)
193195
CROSSCOMPILE-WITH-HOSTLIBS: libswift is built with a bootstrapping-with-hostlibs compiled
194196
compiler, provided in `SWIFT_NATIVE_SWIFT_TOOLS_PATH`"
195197
OFF "NOT CMAKE_GENERATOR STREQUAL \"Xcode\"" OFF)
@@ -616,6 +618,8 @@ elseif(LIBSWIFT_BUILD_MODE MATCHES "BOOTSTRAPPING.*")
616618
set(SWIFT_EXEC_FOR_LIBSWIFT "${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/swiftc")
617619
if(LIBSWIFT_BUILD_MODE STREQUAL "BOOTSTRAPPING-WITH-HOSTLIBS")
618620
set(LIBSWIFT_BUILD_MODE "CROSSCOMPILE-WITH-HOSTLIBS")
621+
elseif(LIBSWIFT_BUILD_MODE STREQUAL "BOOTSTRAPPING")
622+
set(LIBSWIFT_BUILD_MODE "CROSSCOMPILE")
619623
else()
620624
set(LIBSWIFT_BUILD_MODE "HOSTTOOLS")
621625
endif()

cmake/modules/AddSwift.cmake

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,10 @@ function(add_libswift name)
739739
get_filename_component(swift_exec_bin_dir ${ALS_SWIFT_EXEC} DIRECTORY)
740740
set(sdk_option ${sdk_option} "-resource-dir" "${swift_exec_bin_dir}/../bootstrapping0/lib/swift")
741741
endif()
742+
elseif(${LIBSWIFT_BUILD_MODE} STREQUAL "CROSSCOMPILE")
743+
set(sdk_option "-sdk" "${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_ARCH_${SWIFT_HOST_VARIANT_ARCH}_PATH}")
744+
get_filename_component(swift_exec_bin_dir ${ALS_SWIFT_EXEC} DIRECTORY)
745+
set(sdk_option ${sdk_option} "-resource-dir" "${swift_exec_bin_dir}/../lib/swift")
742746
endif()
743747
get_versioned_target_triple(target ${SWIFT_HOST_VARIANT_SDK}
744748
${SWIFT_HOST_VARIANT_ARCH} "${deployment_version}")
@@ -973,22 +977,28 @@ function(add_swift_host_tool executable)
973977
BUILD_WITH_INSTALL_RPATH YES
974978
INSTALL_RPATH "${RPATH_LIST}")
975979
976-
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL "LINUX" AND ASHT_HAS_LIBSWIFT AND LIBSWIFT_BUILD_MODE)
980+
elseif(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD" AND ASHT_HAS_LIBSWIFT AND LIBSWIFT_BUILD_MODE)
977981
set(swiftrt "swiftImageRegistrationObject${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_OBJECT_FORMAT}-${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}-${SWIFT_HOST_VARIANT_ARCH}")
978-
if(LIBSWIFT_BUILD_MODE STREQUAL "HOSTTOOLS")
982+
if(${LIBSWIFT_BUILD_MODE} MATCHES "HOSTTOOLS|CROSSCOMPILE")
979983
# At build time and and run time, link against the swift libraries in the
980984
# installed host toolchain.
981985
get_filename_component(swift_bin_dir ${SWIFT_EXEC_FOR_LIBSWIFT} DIRECTORY)
982986
get_filename_component(swift_dir ${swift_bin_dir} DIRECTORY)
983-
set(host_lib_dir "${swift_dir}/lib/swift/linux")
987+
set(host_lib_dir "${swift_dir}/lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
984988
985989
target_link_libraries(${executable} PRIVATE ${swiftrt})
986990
target_link_libraries(${executable} PRIVATE "swiftCore")
987991
988992
target_link_directories(${executable} PRIVATE ${host_lib_dir})
989-
set_target_properties(${executable} PROPERTIES
990-
BUILD_WITH_INSTALL_RPATH YES
991-
INSTALL_RPATH "${host_lib_dir}")
993+
if(LIBSWIFT_BUILD_MODE STREQUAL "HOSTTOOLS")
994+
set_target_properties(${executable} PROPERTIES
995+
BUILD_WITH_INSTALL_RPATH YES
996+
INSTALL_RPATH "${host_lib_dir}")
997+
else()
998+
set_target_properties(${executable} PROPERTIES
999+
BUILD_WITH_INSTALL_RPATH YES
1000+
INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
1001+
endif()
9921002
9931003
elseif(LIBSWIFT_BUILD_MODE STREQUAL "BOOTSTRAPPING")
9941004
# At build time link against the built swift libraries from the
@@ -1004,7 +1014,7 @@ function(add_swift_host_tool executable)
10041014
# bootstrapping stage.
10051015
set_target_properties(${executable} PROPERTIES
10061016
BUILD_WITH_INSTALL_RPATH YES
1007-
INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SDK_LINUX_LIB_SUBDIR}")
1017+
INSTALL_RPATH "$ORIGIN/../lib/swift/${SWIFT_SDK_${SWIFT_HOST_VARIANT_SDK}_LIB_SUBDIR}")
10081018
10091019
elseif(LIBSWIFT_BUILD_MODE STREQUAL "BOOTSTRAPPING-WITH-HOSTLIBS")
10101020
message(FATAL_ERROR "LIBSWIFT_BUILD_MODE 'BOOTSTRAPPING-WITH-HOSTLIBS' not supported on Linux")

libswift/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ else()
2020

2121
add_subdirectory(Sources)
2222

23-
if(${LIBSWIFT_BUILD_MODE} MATCHES "HOSTTOOLS|CROSSCOMPILE-WITH-HOSTLIBS")
23+
if(${LIBSWIFT_BUILD_MODE} MATCHES "HOSTTOOLS|CROSSCOMPILE")
2424

2525
if (NOT SWIFT_EXEC_FOR_LIBSWIFT)
2626
message(FATAL_ERROR "Need a swift toolchain for building libswift")

stdlib/cmake/modules/SwiftSource.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,7 @@ function(_compile_swift_files
734734
# stdlib in the current stage is not built yet.
735735
if(${SWIFT_HOST_VARIANT_SDK} IN_LIST SWIFT_APPLE_PLATFORMS)
736736
set(set_environment_args "${CMAKE_COMMAND}" "-E" "env" "DYLD_LIBRARY_PATH=${bs_lib_dir}")
737-
elseif(SWIFT_HOST_VARIANT_SDK STREQUAL "LINUX")
737+
elseif(SWIFT_HOST_VARIANT_SDK MATCHES "LINUX|ANDROID|OPENBSD")
738738
set(set_environment_args "${CMAKE_COMMAND}" "-E" "env" "LD_LIBRARY_PATH=${bs_lib_dir}")
739739
else()
740740
message(FATAL_ERROR "TODO: bootstrapping support for ${SWIFT_HOST_VARIANT_SDK}")

0 commit comments

Comments
 (0)