diff --git a/cmake/modules/SwiftConfigureSDK.cmake b/cmake/modules/SwiftConfigureSDK.cmake index d7454f573402f..38108b181a9c9 100644 --- a/cmake/modules/SwiftConfigureSDK.cmake +++ b/cmake/modules/SwiftConfigureSDK.cmake @@ -404,6 +404,11 @@ macro(configure_sdk_unix name architectures) message(STATUS "OpenBSD Version: ${openbsd_system_version}") set(SWIFT_SDK_OPENBSD_ARCH_amd64_TRIPLE "amd64-unknown-openbsd${openbsd_system_version}") + + if(CMAKE_SYSROOT) + set(SWIFT_SDK_OPENBSD_ARCH_${arch}_PATH "${CMAKE_SYSROOT}${SWIFT_SDK_OPENBSD_ARCH_${arch}_PATH}" CACHE INTERNAL "sysroot path" FORCE) + set(SWIFT_SDK_OPENBSD_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY "${CMAKE_SYSROOT}${SWIFT_SDK_OPENBSD_ARCH_${arch}_LIBC_INCLUDE_DIRECTORY}" CACHE INTERNAL "sysroot libc path" FORCE) + endif() elseif("${prefix}" STREQUAL "CYGWIN") if(NOT arch STREQUAL x86_64) message(FATAL_ERROR "unsupported arch for cygwin: ${arch}") diff --git a/utils/build-script-impl b/utils/build-script-impl index 3d81eaece16b3..1b2ba03ce4611 100755 --- a/utils/build-script-impl +++ b/utils/build-script-impl @@ -1082,7 +1082,7 @@ function false_true() { CROSS_COMPILE_HOSTS=($CROSS_COMPILE_HOSTS) for t in "${CROSS_COMPILE_HOSTS[@]}"; do case ${t} in - macosx* | iphone* | appletv* | watch* | linux-armv5 | linux-armv6 | linux-armv7 | android-* ) + macosx* | iphone* | appletv* | watch* | linux-armv5 | linux-armv6 | linux-armv7 | android-* | openbsd-* ) ;; *) echo "Unknown host to cross-compile for: ${t}" @@ -1605,6 +1605,13 @@ for host in "${ALL_HOSTS[@]}"; do -DCMAKE_BUILD_WITH_INSTALL_RPATH="1" ) fi + + if [[ "${host}" == "openbsd-"* && -n "${OPENBSD_USE_TOOLCHAIN_FILE}" ]]; then + llvm_cmake_options=( + "${llvm_cmake_options[@]}" + -DCMAKE_TOOLCHAIN_FILE="${OPENBSD_USE_TOOLCHAIN_FILE}" + ) + fi fi llvm_cmake_options=( @@ -1887,6 +1894,13 @@ for host in "${ALL_HOSTS[@]}"; do ) fi + if [[ $(is_cross_tools_host ${host}) && "${host}" == "openbsd-"* && -n "${OPENBSD_USE_TOOLCHAIN_FILE}" ]]; then + cmake_options=( + "${cmake_options[@]}" + -DCMAKE_TOOLCHAIN_FILE="${OPENBSD_USE_TOOLCHAIN_FILE}" + ) + fi + if [[ "${DARWIN_OVERLAY_TARGET}" != "" ]]; then # Split LOCAL_HOST into a pair ``arch-sdk`` # Example LOCAL_HOST: macosx-x86_64 diff --git a/utils/swift_build_support/swift_build_support/products/cmark.py b/utils/swift_build_support/swift_build_support/products/cmark.py index 97198ca064523..1079a4f49cd1a 100644 --- a/utils/swift_build_support/swift_build_support/products/cmark.py +++ b/utils/swift_build_support/swift_build_support/products/cmark.py @@ -69,6 +69,10 @@ def build(self, host_target): elif platform == "linux": toolchain_file = self.generate_linux_toolchain_file(platform, arch) self.cmake_options.define('CMAKE_TOOLCHAIN_FILE:PATH', toolchain_file) + elif platform == "openbsd": + toolchain_file = self.get_openbsd_toolchain_file() + if toolchain_file: + self.cmake_options.define('CMAKE_TOOLCHAIN_FILE:PATH', toolchain_file) self.build_with_cmake(["all"], self.args.cmark_build_variant, []) diff --git a/utils/swift_build_support/swift_build_support/products/product.py b/utils/swift_build_support/swift_build_support/products/product.py index 7d7ad24b8e301..f117305ddb275 100644 --- a/utils/swift_build_support/swift_build_support/products/product.py +++ b/utils/swift_build_support/swift_build_support/products/product.py @@ -366,6 +366,9 @@ def generate_linux_toolchain_file(self, platform, arch): return toolchain_file + def get_openbsd_toolchain_file(self): + return os.getenv('OPENBSD_USE_TOOLCHAIN_FILE') + def common_cross_c_flags(self, platform, arch): cross_flags = [] diff --git a/utils/swift_build_support/swift_build_support/targets.py b/utils/swift_build_support/swift_build_support/targets.py index 34ae000617df3..554eb82503672 100644 --- a/utils/swift_build_support/swift_build_support/targets.py +++ b/utils/swift_build_support/swift_build_support/targets.py @@ -205,6 +205,14 @@ def swiftpm_config(self, args, output_dir, swift_toolchain, resource_path): return config_file +class OpenBSDPlatform(Platform): + def cmake_options(self, args): + toolchain_file = os.getenv('OPENBSD_USE_TOOLCHAIN_FILE') + if not toolchain_file: + return '' + return f'-DCMAKE_TOOLCHAIN_FILE="${toolchain_file}"' + + class Target(object): """ Abstract representation of a target Swift can run on. @@ -265,7 +273,7 @@ class StdlibDeploymentTarget(object): FreeBSD = Platform("freebsd", archs=["x86_64"]) - OpenBSD = Platform("openbsd", archs=["amd64"]) + OpenBSD = OpenBSDPlatform("openbsd", archs=["amd64"]) Cygwin = Platform("cygwin", archs=["x86_64"])