Last active
May 18, 2022 06:00
-
-
Save colemancda/e2d7923b51697edec61c0004dfece150 to your computer and use it in GitHub Desktop.
Swift support for Buildroot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/package/Config.in b/package/Config.in | |
index 517e66cce7..a742b540e5 100644 | |
--- a/package/Config.in | |
+++ b/package/Config.in | |
@@ -2020,6 +2020,11 @@ comment "linux-pam plugins" | |
endif | |
source "package/liquid-dsp/Config.in" | |
source "package/llvm/Config.in" | |
+ source "package/swift/Config.in" | |
+ source "package/libdispatch/Config.in" | |
+ source "package/libswiftdispatch/Config.in" | |
+ source "package/foundation/Config.in" | |
+ source "package/xctest/Config.in" | |
source "package/lttng-libust/Config.in" | |
source "package/matio/Config.in" | |
source "package/mpc/Config.in" | |
diff --git a/package/Makefile.in b/package/Makefile.in | |
index 508ea7c366..07e7ef6f94 100644 | |
--- a/package/Makefile.in | |
+++ b/package/Makefile.in | |
@@ -449,3 +449,4 @@ include package/pkg-golang.mk | |
include package/pkg-meson.mk | |
include package/pkg-qmake.mk | |
include package/pkg-cargo.mk | |
+include package/pkg-swift.mk | |
diff --git a/package/foundation/Config.in b/package/foundation/Config.in | |
new file mode 100644 | |
index 0000000000..7a9dc8b514 | |
--- /dev/null | |
+++ b/package/foundation/Config.in | |
@@ -0,0 +1,14 @@ | |
+if BR2_PACKAGE_SWIFT | |
+ | |
+config BR2_PACKAGE_FOUNDATION | |
+ bool "foundation" | |
+ depends on BR2_PACKAGE_SWIFT | |
+ select BR2_PACKAGE_LIBSWIFTDISPATCH | |
+ select BR2_PACKAGE_LIBCURL | |
+ select BR2_PACKAGE_LIBXML2 | |
+ help | |
+ The Foundation framework defines a base layer of functionality that is required for almost all applications. It provides primitive classes and introduces several paradigms that define functionality not provided by either the Objective-C runtime and language or Swift standard library and language. | |
+ | |
+ http://swift.org | |
+ | |
+endif | |
diff --git a/package/foundation/foundation.hash b/package/foundation/foundation.hash | |
new file mode 100644 | |
index 0000000000..45f35c4294 | |
--- /dev/null | |
+++ b/package/foundation/foundation.hash | |
@@ -0,0 +1 @@ | |
+sha256 21d28ad500279eb66bb8dc9e33e4c8036e1472f30e82eeb76329b69aa4b622fc foundation-5.6.1.tar.gz | |
diff --git a/package/foundation/foundation.mk b/package/foundation/foundation.mk | |
new file mode 100644 | |
index 0000000000..3e8c71f9fe | |
--- /dev/null | |
+++ b/package/foundation/foundation.mk | |
@@ -0,0 +1,89 @@ | |
+### Foundation | |
+FOUNDATION_VERSION = 5.6.1 | |
+FOUNDATION_SITE = $(call github,apple,swift-corelibs-foundation,swift-$(FOUNDATION_VERSION)-RELEASE) | |
+FOUNDATION_LICENSE = Apache-2.0 | |
+FOUNDATION_LICENSE_FILES = LICENSE | |
+FOUNDATION_INSTALL_STAGING = YES | |
+FOUNDATION_INSTALL_TARGET = YES | |
+FOUNDATION_SUPPORTS_IN_SOURCE_BUILD = NO | |
+FOUNDATION_DEPENDENCIES = icu libxml2 libcurl swift libswiftdispatch | |
+ | |
+FOUNDATION_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS=${SWIFTC_FLAGS} \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ -DCF_DEPLOYMENT_SWIFT=ON \ | |
+ -Ddispatch_DIR="$(LIBSWIFTDISPATCH_BUILDDIR)/cmake/modules" \ | |
+ -DICU_I18N_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/libicui18n.so \ | |
+ -DICU_UC_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/libicuuc.so \ | |
+ -DICU_I18N_LIBRARY_DEBUG=${STAGING_DIR}/usr/lib/libicui18n.so \ | |
+ -DICU_UC_LIBRARY_DEBUG=${STAGING_DIR}/usr/lib/libicuuc.so \ | |
+ -DICU_INCLUDE_DIR="${STAGING_DIR}/usr/include" \ | |
+ -DCURL_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/libcurl.so \ | |
+ -DCURL_INCLUDE_DIR="${STAGING_DIR}/usr/include" \ | |
+ -DLIBXML2_LIBRARY=${STAGING_DIR}/usr/lib/libxml2.so \ | |
+ -DLIBXML2_INCLUDE_DIR=${STAGING_DIR}/usr/include/libxml2 \ | |
+ | |
+ifeq (FOUNDATION_SUPPORTS_IN_SOURCE_BUILD),YES) | |
+FOUNDATION_BUILDDIR = $(FOUNDATION_SRCDIR) | |
+else | |
+FOUNDATION_BUILDDIR = $(FOUNDATION_SRCDIR)/build | |
+endif | |
+ | |
+define FOUNDATION_CONFIGURE_CMDS | |
+ # Workaround Dispatch defined with cmake and module | |
+ rm -rf ${STAGING_DIR}/usr/lib/swift/dispatch | |
+ # Clean | |
+ rm -rf $(FOUNDATION_BUILDDIR) | |
+ rm -rf $(STAGING_DIR)/usr/lib/swift/CoreFoundation | |
+ # Configure | |
+ (mkdir -p $(FOUNDATION_BUILDDIR) && \ | |
+ cd $(FOUNDATION_BUILDDIR) && \ | |
+ rm -f CMakeCache.txt && \ | |
+ PATH=$(BR_PATH):$(SWIFT_NATIVE_PATH) \ | |
+ $(FOUNDATION_CONF_ENV) $(BR2_CMAKE) -S $(FOUNDATION_SRCDIR) -B $(FOUNDATION_BUILDDIR) -G Ninja \ | |
+ -DCMAKE_INSTALL_PREFIX="/usr" \ | |
+ -DBUILD_SHARED_LIBS=ON \ | |
+ -DCMAKE_BUILD_TYPE=$(if $(BR2_ENABLE_RUNTIME_DEBUG),Debug,Release) \ | |
+ -DCMAKE_C_COMPILER=$(SWIFT_NATIVE_PATH)/clang \ | |
+ -DCMAKE_C_FLAGS="-w -fuse-ld=lld -target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR) $(SWIFT_EXTRA_FLAGS) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \ | |
+ -DCMAKE_C_LINK_FLAGS="-target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR)" \ | |
+ -DCMAKE_ASM_FLAGS="-target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR)" \ | |
+ $(FOUNDATION_CONF_OPTS) \ | |
+ ) | |
+endef | |
+ | |
+define FOUNDATION_BUILD_CMDS | |
+ # Compile | |
+ (cd $(FOUNDATION_BUILDDIR) && ninja) | |
+endef | |
+ | |
+define FOUNDATION_INSTALL_TARGET_CMDS | |
+ cp $(FOUNDATION_BUILDDIR)/lib/*.so $(TARGET_DIR)/usr/lib/ | |
+endef | |
+ | |
+define FOUNDATION_INSTALL_STAGING_CMDS | |
+ # Copy libraries | |
+ cp $(FOUNDATION_BUILDDIR)/lib/*.so $(STAGING_DIR)/usr/lib/swift/linux/ | |
+ # Copy CoreFoundation module | |
+ mkdir -p ${STAGING_DIR}/usr/lib/swift/CoreFoundation | |
+ cp $(FOUNDATION_BUILDDIR)/CoreFoundation.framework/Headers/*.h ${STAGING_DIR}/usr/lib/swift/CoreFoundation/ | |
+ touch ${STAGING_DIR}/usr/lib/swift/CoreFoundation/module.map | |
+ echo 'framework module CoreFoundation [extern_c] [system] { umbrella header "${STAGING_DIR}/usr/lib/swift/CoreFoundation/CoreFoundation.h" }' > ${STAGING_DIR}/usr/lib/swift/CoreFoundation/module.map | |
+ # Copy CFXMLInterface module | |
+ mkdir -p ${STAGING_DIR}/usr/lib/swift/CFXMLInterface | |
+ touch ${STAGING_DIR}/usr/lib/swift/CFXMLInterface/module.map | |
+ echo 'framework module CFXMLInterface [extern_c] [system] { umbrella header "${STAGING_DIR}/usr/lib/swift/CFXMLInterface/CFXMLInterface.h" }' > ${STAGING_DIR}/usr/lib/swift/CFXMLInterface/module.map | |
+ # Copy CFURLSessionInterface module | |
+ mkdir -p ${STAGING_DIR}/usr/lib/swift/CFURLSessionInterface | |
+ touch ${STAGING_DIR}/usr/lib/swift/CFURLSessionInterface/module.map | |
+ echo 'framework module CFURLSessionInterface [extern_c] [system] { umbrella header "${STAGING_DIR}/usr/lib/swift/CFURLSessionInterface/CFURLSessionInterface.h" }' > ${STAGING_DIR}/usr/lib/swift/CFURLSessionInterface/module.map | |
+ # Copy Swift modules | |
+ cp $(FOUNDATION_BUILDDIR)/swift/* ${STAGING_DIR}/usr/lib/swift/linux/$(SWIFT_TARGET_ARCH)/ | |
+ # Restore Dispatch headers | |
+ $(LIBSWIFTDISPATCH_INSTALL_STAGING_CMDS) | |
+ | |
+endef | |
+ | |
+$(eval $(generic-package)) | |
diff --git a/package/libdispatch/Config.in b/package/libdispatch/Config.in | |
new file mode 100644 | |
index 0000000000..f4fa5e47fb | |
--- /dev/null | |
+++ b/package/libdispatch/Config.in | |
@@ -0,0 +1,43 @@ | |
+config BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS | |
+ bool | |
+ default y if BR2_x86_64 | |
+ default y if BR2_aarch64 | |
+ default y if BR2_arm | |
+ default y if BR2_powerpc | |
+ default y if BR2_mips | |
+ default y if BR2_mipsel | |
+ default y if BR2_mips64 | |
+ default y if BR2_mips64el | |
+ default y if BR2_RISCV_64 | |
+ | |
+config BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH | |
+ string | |
+ default "aarch64" if BR2_aarch64 | |
+ default "armv5" if BR2_ARM_CPU_ARMV5 | |
+ default "armv6" if BR2_ARM_CPU_ARMV6 | |
+ default "armv7" if BR2_ARM_CPU_ARMV7A | |
+ default "x86_64" if BR2_x86_64 | |
+ default "powerpc" if BR2_powerpc | |
+ default "mips" if BR2_mips | |
+ default "mipsel" if BR2_mipsel | |
+ default "mips64" if BR2_mips64 | |
+ default "mips64el" if BR2_mips64el | |
+ default "riscv64" if BR2_RISCV_64 | |
+ | |
+config BR2_PACKAGE_LIBDISPATCH | |
+ bool "libdispatch" | |
+ depends on BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS | |
+ depends on BR2_TOOLCHAIN_HAS_THREADS | |
+ depends on !BR2_STATIC_LIBS | |
+ depends on BR2_TOOLCHAIN_USES_GLIBC | |
+ select BR2_PACKAGE_LIBBSD | |
+ | |
+ help | |
+ Grand Central Dispatch (GCD or libdispatch) provides comprehensive support for concurrent code execution on multicore hardware. | |
+ | |
+ http://swift.org | |
+ | |
+comment "libdispatch needs a toolchain w/ Glibc, wchar, threads, C++, dynamic library" | |
+ depends on BR2_PACKAGE_LIBDISPATCH_ARCH_SUPPORTS | |
+ depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \ | |
+ || BR2_STATIC_LIBS || !BR2_USE_WCHAR | |
\ No newline at end of file | |
diff --git a/package/libdispatch/arm-yield.patch b/package/libdispatch/arm-yield.patch | |
new file mode 100644 | |
index 0000000000..fa7cf7cce4 | |
--- /dev/null | |
+++ b/package/libdispatch/arm-yield.patch | |
@@ -0,0 +1,13 @@ | |
+diff --git a/src/shims/yield.c b/src/shims/yield.c | |
+index 43f0017..d0c5fff 100644 | |
+--- a/src/shims/yield.c | |
++++ b/src/shims/yield.c | |
+@@ -36,7 +36,7 @@ void * | |
+ _dispatch_wait_for_enqueuer(void **ptr) | |
+ { | |
+ #if !DISPATCH_HW_CONFIG_UP | |
+-#if defined(__arm__) || defined(__arm64__) | |
++#if (defined(__arm__) && defined(__APPLE__)) || defined(__arm64__) | |
+ int spins = DISPATCH_WAIT_SPINS_WFE; | |
+ void *value; | |
+ while (unlikely(spins-- > 0)) { | |
diff --git a/package/libdispatch/libdispatch.hash b/package/libdispatch/libdispatch.hash | |
new file mode 100644 | |
index 0000000000..8ca1a5a626 | |
--- /dev/null | |
+++ b/package/libdispatch/libdispatch.hash | |
@@ -0,0 +1 @@ | |
+sha256 856c9ffcf2ab2bbb28a6e0fa344277fc41aa0771419b283c7c4db69dad2b4cf9 libdispatch-5.6.1.tar.gz | |
diff --git a/package/libdispatch/libdispatch.mk b/package/libdispatch/libdispatch.mk | |
new file mode 100644 | |
index 0000000000..742c122481 | |
--- /dev/null | |
+++ b/package/libdispatch/libdispatch.mk | |
@@ -0,0 +1,58 @@ | |
+### Grand Central Dispatch | |
+LIBDISPATCH_VERSION = 5.6.1 | |
+LIBDISPATCH_SITE = $(call github,apple,swift-corelibs-libdispatch,swift-$(LIBDISPATCH_VERSION)-RELEASE) | |
+LIBDISPATCH_LICENSE = Apache-2.0 | |
+LIBDISPATCH_LICENSE_FILES = LICENSE | |
+LIBDISPATCH_INSTALL_STAGING = YES | |
+LIBDISPATCH_SUPPORTS_IN_SOURCE_BUILD = NO | |
+LIBDISPATCH_DEPENDENCIES = libbsd | |
+ | |
+LIBDISPATCH_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LIBDISPATCH_TARGET_ARCH)) | |
+ | |
+ifeq ($(BR2_PACKAGE_SWIFT),y) | |
+LIBDISPATCH_CLANG_PATH = $(SWIFT_NATIVE_PATH) | |
+else | |
+LIBDISPATCH_CLANG_PATH = $(HOST_DIR)/bin | |
+LIBDISPATCH_DEPENDENCIES += host-clang host-lld | |
+endif | |
+ | |
+ifeq ($(LIBDISPATCH_TARGET_ARCH),armv7) | |
+LIBDISPATCH_TARGET_NAME = armv7-unknown-linux-gnueabihf | |
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),armv6) | |
+LIBDISPATCH_TARGET_NAME = armv6-unknown-linux-gnueabihf | |
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),armv5) | |
+LIBDISPATCH_TARGET_NAME = armv5-unknown-linux-gnueabi | |
+else | |
+LIBDISPATCH_TARGET_NAME = $(LIBDISPATCH_TARGET_ARCH)-unknown-linux-gnu | |
+endif | |
+ | |
+ifeq ($(LIBDISPATCH_TARGET_ARCH),armv5) | |
+LIBDISPATCH_EXTRA_FLAGS = -march=armv5te | |
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),riscv64) | |
+LIBDISPATCH_EXTRA_FLAGS = -mno-relax -mabi=lp64 -march=rv64imac -mfloat-abi=soft | |
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),mipsel) | |
+LIBDISPATCH_EXTRA_FLAGS = -msoft-float | |
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),mips64el) | |
+LIBDISPATCH_EXTRA_FLAGS = -msoft-float | |
+else ifeq ($(LIBDISPATCH_TARGET_ARCH),powerpc) | |
+LIBDISPATCH_EXTRA_FLAGS = -mcpu=7400 | |
+else | |
+LIBDISPATCH_EXTRA_FLAGS = | |
+endif | |
+ | |
+LIBDISPATCH_CONF_OPTS += \ | |
+ -DLibRT_LIBRARIES="${STAGING_DIR}/usr/lib/librt.a" \ | |
+ -DCMAKE_C_COMPILER=$(LIBDISPATCH_CLANG_PATH)/clang \ | |
+ -DCMAKE_CXX_COMPILER=$(LIBDISPATCH_CLANG_PATH)/clang++ \ | |
+ -DCMAKE_C_FLAGS="-w -fuse-ld=lld $(LIBDISPATCH_EXTRA_FLAGS) -target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \ | |
+ -DCMAKE_C_LINK_FLAGS="-target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR)" \ | |
+ -DCMAKE_CXX_FLAGS="-w -fuse-ld=lld $(LIBDISPATCH_EXTRA_FLAGS) -target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR) -I$(STAGING_DIR)/usr/include -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/ -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/$(GNU_TARGET_NAME) -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \ | |
+ -DCMAKE_CXX_LINK_FLAGS="-target $(LIBDISPATCH_TARGET_NAME) --sysroot=$(STAGING_DIR)" \ | |
+ | |
+define LIBDISPATCH_INSTALL_TARGET_CMDS | |
+ (cd $(LIBDISPATCH_BUILDDIR) && \ | |
+ cp ./*.so $(TARGET_DIR)/usr/lib/ \ | |
+ ) | |
+endef | |
+ | |
+$(eval $(cmake-package)) | |
diff --git a/package/libswiftdispatch/Config.in b/package/libswiftdispatch/Config.in | |
new file mode 100644 | |
index 0000000000..c16ed3217c | |
--- /dev/null | |
+++ b/package/libswiftdispatch/Config.in | |
@@ -0,0 +1,12 @@ | |
+config BR2_PACKAGE_LIBSWIFTDISPATCH | |
+ bool "libswiftdispatch" | |
+ depends on BR2_TOOLCHAIN_HAS_THREADS | |
+ depends on !BR2_STATIC_LIBS | |
+ depends on BR2_TOOLCHAIN_USES_GLIBC | |
+ depends on BR2_PACKAGE_LIBBSD | |
+ depends on BR2_PACKAGE_SWIFT | |
+ | |
+ help | |
+ Swift overlay for libdispatch. | |
+ | |
+ http://swift.org | |
diff --git a/package/libswiftdispatch/arm-yield.patch b/package/libswiftdispatch/arm-yield.patch | |
new file mode 100644 | |
index 0000000000..fa7cf7cce4 | |
--- /dev/null | |
+++ b/package/libswiftdispatch/arm-yield.patch | |
@@ -0,0 +1,13 @@ | |
+diff --git a/src/shims/yield.c b/src/shims/yield.c | |
+index 43f0017..d0c5fff 100644 | |
+--- a/src/shims/yield.c | |
++++ b/src/shims/yield.c | |
+@@ -36,7 +36,7 @@ void * | |
+ _dispatch_wait_for_enqueuer(void **ptr) | |
+ { | |
+ #if !DISPATCH_HW_CONFIG_UP | |
+-#if defined(__arm__) || defined(__arm64__) | |
++#if (defined(__arm__) && defined(__APPLE__)) || defined(__arm64__) | |
+ int spins = DISPATCH_WAIT_SPINS_WFE; | |
+ void *value; | |
+ while (unlikely(spins-- > 0)) { | |
diff --git a/package/libswiftdispatch/libswiftdispatch.hash b/package/libswiftdispatch/libswiftdispatch.hash | |
new file mode 100644 | |
index 0000000000..9b315731e7 | |
--- /dev/null | |
+++ b/package/libswiftdispatch/libswiftdispatch.hash | |
@@ -0,0 +1 @@ | |
+sha256 856c9ffcf2ab2bbb28a6e0fa344277fc41aa0771419b283c7c4db69dad2b4cf9 libswiftdispatch-5.6.1.tar.gz | |
diff --git a/package/libswiftdispatch/libswiftdispatch.mk b/package/libswiftdispatch/libswiftdispatch.mk | |
new file mode 100644 | |
index 0000000000..650bbc5f1a | |
--- /dev/null | |
+++ b/package/libswiftdispatch/libswiftdispatch.mk | |
@@ -0,0 +1,68 @@ | |
+### Grand Central Dispatch with Swift overlay | |
+LIBSWIFTDISPATCH_VERSION = 5.6.1 | |
+LIBSWIFTDISPATCH_SITE = $(call github,apple,swift-corelibs-libdispatch,swift-$(LIBSWIFTDISPATCH_VERSION)-RELEASE) | |
+LIBSWIFTDISPATCH_LICENSE = Apache-2.0 | |
+LIBSWIFTDISPATCH_LICENSE_FILES = LICENSE | |
+LIBSWIFTDISPATCH_INSTALL_STAGING = YES | |
+LIBSWIFTDISPATCH_INSTALL_TARGET = YES | |
+LIBSWIFTDISPATCH_SUPPORTS_IN_SOURCE_BUILD = NO | |
+LIBSWIFTDISPATCH_DEPENDENCIES = libbsd swift | |
+ | |
+LIBSWIFTDISPATCH_CONF_OPTS += \ | |
+ -DLibRT_LIBRARIES="${STAGING_DIR}/usr/lib/librt.a" \ | |
+ -DENABLE_SWIFT=YES \ | |
+ -DCMAKE_Swift_FLAGS=${SWIFTC_FLAGS} \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ | |
+ifeq (LIBSWIFTDISPATCH_SUPPORTS_IN_SOURCE_BUILD),YES) | |
+LIBSWIFTDISPATCH_BUILDDIR = $(LIBSWIFTDISPATCH_SRCDIR) | |
+else | |
+LIBSWIFTDISPATCH_BUILDDIR = $(LIBSWIFTDISPATCH_SRCDIR)/build | |
+endif | |
+ | |
+define LIBSWIFTDISPATCH_CONFIGURE_CMDS | |
+ # Configure for Ninja | |
+ (mkdir -p $(LIBSWIFTDISPATCH_BUILDDIR) && \ | |
+ cd $(LIBSWIFTDISPATCH_BUILDDIR) && \ | |
+ rm -f CMakeCache.txt && \ | |
+ PATH=$(BR_PATH):$(SWIFT_NATIVE_PATH) \ | |
+ $(LIBSWIFTDISPATCH_CONF_ENV) $(BR2_CMAKE) -S $(LIBSWIFTDISPATCH_SRCDIR) -B $(LIBSWIFTDISPATCH_BUILDDIR) -G Ninja \ | |
+ -DCMAKE_INSTALL_PREFIX="$(STAGING_DIR)/usr" \ | |
+ -DCMAKE_COLOR_MAKEFILE=OFF \ | |
+ -DBUILD_DOC=OFF \ | |
+ -DBUILD_DOCS=OFF \ | |
+ -DBUILD_EXAMPLE=OFF \ | |
+ -DBUILD_EXAMPLES=OFF \ | |
+ -DBUILD_TEST=OFF \ | |
+ -DBUILD_TESTS=OFF \ | |
+ -DBUILD_TESTING=OFF \ | |
+ -DBUILD_SHARED_LIBS=ON \ | |
+ -DCMAKE_BUILD_TYPE=$(if $(BR2_ENABLE_RUNTIME_DEBUG),Debug,Release) \ | |
+ -DCMAKE_C_COMPILER=$(SWIFT_NATIVE_PATH)/clang \ | |
+ -DCMAKE_CXX_COMPILER=$(SWIFT_NATIVE_PATH)/clang++ \ | |
+ -DCMAKE_C_FLAGS="-w -fuse-ld=lld -target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR) $(SWIFT_EXTRA_FLAGS) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \ | |
+ -DCMAKE_C_LINK_FLAGS="-target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR)" \ | |
+ -DCMAKE_CXX_FLAGS="-w -fuse-ld=lld -target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR) $(SWIFT_EXTRA_FLAGS) -I$(STAGING_DIR)/usr/include -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/ -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/$(GNU_TARGET_NAME) -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \ | |
+ -DCMAKE_CXX_LINK_FLAGS="-target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR)" \ | |
+ $(LIBSWIFTDISPATCH_CONF_OPTS) \ | |
+ ) | |
+endef | |
+ | |
+define LIBSWIFTDISPATCH_BUILD_CMDS | |
+ # Compile | |
+ (cd $(LIBSWIFTDISPATCH_BUILDDIR) && ninja) | |
+endef | |
+ | |
+define LIBSWIFTDISPATCH_INSTALL_TARGET_CMDS | |
+ (cd $(LIBSWIFTDISPATCH_BUILDDIR) && \ | |
+ cp ./*.so $(TARGET_DIR)/usr/lib/ \ | |
+ ) | |
+endef | |
+ | |
+define LIBSWIFTDISPATCH_INSTALL_STAGING_CMDS | |
+ (cd $(LIBSWIFTDISPATCH_BUILDDIR) && ninja install) | |
+endef | |
+ | |
+$(eval $(generic-package)) | |
diff --git a/package/pkg-swift.mk b/package/pkg-swift.mk | |
new file mode 100644 | |
index 0000000000..1efb0dc52a | |
--- /dev/null | |
+++ b/package/pkg-swift.mk | |
@@ -0,0 +1,147 @@ | |
+################################################################################ | |
+# Swift package infrastructure | |
+# | |
+# This file implements an infrastructure that eases development of package .mk | |
+# files for Swift packages. It should be used for all packages that are written in | |
+# Swift. | |
+# | |
+# See the Buildroot documentation for details on the usage of this | |
+# infrastructure | |
+# | |
+# | |
+# In terms of implementation, this swift infrastructure requires the .mk file | |
+# to only specify metadata information about the package: name, version, | |
+# download URL, etc. | |
+# | |
+# We still allow the package .mk file to override what the different steps are | |
+# doing, if needed. For example, if <PKG>_BUILD_CMDS is already defined, it is | |
+# used as the list of commands to perform to build the package, instead of the | |
+# default swift behavior. The package can also define some post operation | |
+# hooks. | |
+# | |
+################################################################################ | |
+ | |
+HOST_SWIFT_SUPPORT_DIR = $(HOST_DIR)/usr/share/swift | |
+SWIFT_BIN = $(HOST_SWIFT_SUPPORT_DIR)/bin/swift | |
+SWIFT_DESTINATION_FILE = $(HOST_SWIFT_SUPPORT_DIR)/toolchain.json | |
+ | |
+################################################################################ | |
+# inner-swift-package -- defines how the configuration, compilation and | |
+# installation of a Go package should be done, implements a few hooks to tune | |
+# the build process for Go specificities and calls the generic package | |
+# infrastructure to generate the necessary make targets | |
+# | |
+# argument 1 is the lowercase package name | |
+# argument 2 is the uppercase package name, including a HOST_ prefix for host | |
+# packages | |
+# argument 3 is the uppercase package name, without the HOST_ prefix for host | |
+# packages | |
+# argument 4 is the type (target or host) | |
+# | |
+################################################################################ | |
+ | |
+define inner-swift-package | |
+ | |
+$(2)_BUILDDIR = $$($(2)_SRCDIR)/.build/$(if $(BR2_ENABLE_RUNTIME_DEBUG),debug,release) | |
+ | |
+$(2)_BUILD_OPTS += \ | |
+ --configuration $(if $(BR2_ENABLE_RUNTIME_DEBUG),debug,release) \ | |
+ -j $$(PARALLEL_JOBS) \ | |
+ | |
+# Target packages need the Swift compiler and runtime | |
+$(2)_DEPENDENCIES += swift | |
+ | |
+# Build step. Only define it if not already defined by the package .mk | |
+# file. | |
+ifndef $(2)_BUILD_CMDS | |
+ifeq ($(4),target) | |
+ | |
+# Build package for target | |
+define $(2)_BUILD_CMDS | |
+ ( \ | |
+ cd $$($(2)_SRCDIR) && \ | |
+ PATH=$(BR_PATH):$(HOST_SWIFT_SUPPORT_DIR)/bin \ | |
+ $(SWIFT_BIN) build \ | |
+ --destination $(SWIFT_DESTINATION_FILE) \ | |
+ $$($(2)_BUILD_OPTS) \ | |
+ ) | |
+endef | |
+else | |
+# Build package for host | |
+define $(2)_BUILD_CMDS | |
+ ( \ | |
+ cd $$($(2)_SRCDIR) && \ | |
+ PATH=$(BR_PATH):$(HOST_SWIFT_SUPPORT_DIR)/bin \ | |
+ $(SWIFT_BIN) build \ | |
+ $(2)_BUILD_OPTS \ | |
+ ) | |
+endef | |
+endif | |
+endif | |
+ | |
+# | |
+# Staging installation step. Only define it if not already defined by | |
+# the package .mk file. | |
+# | |
+ifndef $(2)_INSTALL_STAGING_CMDS | |
+define $(2)_INSTALL_STAGING_CMDS | |
+ # Copy executables | |
+ $$(foreach d,$$($(2)_EXECUTABLES),\ | |
+ cp -f $$($(2)_BUILDDIR)/$$(d) $(STAGING_DIR)/usr/bin/ | |
+ ) | |
+ # Copy dynamic libraries | |
+ $$(foreach d,$$($(2)_LIBRARIES),\ | |
+ cp -f $$($(2)_BUILDDIR)/lib$$(d).so $(STAGING_DIR)/usr/lib/swift/linux/ | |
+ cp -f $$($(2)_BUILDDIR)/$$(d).swiftdoc $(STAGING_DIR)/usr/lib/swift/linux/$(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH))/ | |
+ cp -f $$($(2)_BUILDDIR)/$$(d).swiftmodule $(STAGING_DIR)/usr/lib/swift/linux/$(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH))/ | |
+ cp -f $$($(2)_BUILDDIR)/$$(d).swiftsourceinfo $(STAGING_DIR)/usr/lib/swift/linux/$(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH))/ | |
+ cp -f $$($(2)_BUILDDIR)/$$(d).abi.json $(STAGING_DIR)/usr/lib/swift/linux/$(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH))/ | |
+ ) | |
+endef | |
+endif | |
+ | |
+# Target installation step. Only define it if not already defined by the | |
+# package .mk file. | |
+ifndef $(2)_INSTALL_TARGET_CMDS | |
+define $(2)_INSTALL_TARGET_CMDS | |
+ # Copy executables | |
+ $$(foreach d,$$($(2)_EXECUTABLES),\ | |
+ cp -f $$($(2)_BUILDDIR)/$$(d) $(TARGET_DIR)/usr/bin/ | |
+ ) | |
+ # Copy dynamic libraries | |
+ $$(foreach d,$$($(2)_LIBRARIES),\ | |
+ cp -f $$($(2)_BUILDDIR)/lib$$(d).so $(TARGET_DIR)/usr/lib/ | |
+ ) | |
+endef | |
+endif | |
+ | |
+# Host installation step | |
+ifndef $(2)_INSTALL_CMDS | |
+define $(2)_INSTALL_CMDS | |
+ # Copy executables | |
+ $$(foreach d,$$($(2)_EXECUTABLES),\ | |
+ cp -f $$($(2)_BUILDDIR)/$$(d) $(HOST_DIR)/usr/bin/ | |
+ ) | |
+ # Copy dynamic libraries | |
+ $$(foreach d,$$($(2)_LIBRARIES),\ | |
+ cp -f $$($(2)_BUILDDIR)/lib$$(d).so $(HOST_DIR)/usr/lib/swift/linux/ | |
+ cp -f $$($(2)_BUILDDIR)/lib$$(d).swiftdoc $(HOST_DIR)/usr/lib/swift/linux/$(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH))/ | |
+ cp -f $$($(2)_BUILDDIR)/lib$$(d).swiftmodule $(HOST_DIR)/usr/lib/swift/linux/$(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH))/ | |
+ cp -f $$($(2)_BUILDDIR)/lib$$(d).swiftsourceinfo $(HOST_DIR)/usr/lib/swift/linux/$(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH))/ | |
+ cp -f $$($(2)_BUILDDIR)/lib$$(d).abi.json $(HOST_DIR)/usr/lib/swift/linux/$(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH))/ | |
+ ) | |
+endef | |
+endif | |
+ | |
+# Call the generic package infrastructure to generate the necessary make | |
+# targets | |
+$(call inner-generic-package,$(1),$(2),$(3),$(4)) | |
+ | |
+endef # inner-swift-package | |
+ | |
+################################################################################ | |
+# swift-package -- the target generator macro for Swift packages | |
+################################################################################ | |
+ | |
+swift-package = $(call inner-swift-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target) | |
+host-swift-package = $(call inner-swift-package,host-$(pkgname),$(call UPPERCASE,host-$(pkgname)),$(call UPPERCASE,$(pkgname)),host) | |
diff --git a/package/swift/Config.in b/package/swift/Config.in | |
new file mode 100644 | |
index 0000000000..97c59a8b70 | |
--- /dev/null | |
+++ b/package/swift/Config.in | |
@@ -0,0 +1,55 @@ | |
+config BR2_PACKAGE_SWIFT_ARCH_SUPPORTS | |
+ bool | |
+ default y if BR2_x86_64 | |
+ default y if BR2_aarch64 | |
+ default y if BR2_arm | |
+ default y if BR2_powerpc | |
+ default y if BR2_mips | |
+ default y if BR2_mipsel | |
+ default y if BR2_mips64 | |
+ default y if BR2_mips64el | |
+ default y if BR2_RISCV_64 | |
+ | |
+config BR2_PACKAGE_SWIFT_TARGET_ARCH | |
+ string | |
+ default "aarch64" if BR2_aarch64 | |
+ default "armv5" if BR2_ARM_CPU_ARMV5 | |
+ default "armv6" if BR2_ARM_CPU_ARMV6 | |
+ default "armv7" if BR2_ARM_CPU_ARMV7A | |
+ default "x86_64" if BR2_x86_64 | |
+ default "powerpc" if BR2_powerpc | |
+ default "mips" if BR2_mips | |
+ default "mipsel" if BR2_mipsel | |
+ default "mips64" if BR2_mips64 | |
+ default "mips64el" if BR2_mips64el | |
+ default "riscv64" if BR2_RISCV_64 | |
+ | |
+config BR2_PACKAGE_SWIFT | |
+ bool "swift" | |
+ depends on BR2_PACKAGE_SWIFT_ARCH_SUPPORTS | |
+ depends on BR2_TOOLCHAIN_HAS_THREADS | |
+ depends on !BR2_STATIC_LIBS | |
+ depends on BR2_TOOLCHAIN_USES_GLIBC | |
+ select BR2_PACKAGE_ICU | |
+ select BR2_PACKAGE_LIBDISPATCH | |
+ help | |
+ Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns. | |
+ | |
+ http://swift.org | |
+ | |
+if BR2_PACKAGE_SWIFT || BR2_PACKAGE_LIBDISPATCH | |
+ | |
+config BR2_PACKAGE_SWIFT_NATIVE_TOOLS | |
+ string "Path to host Swift toolchain" | |
+ default "/usr/bin" | |
+ | |
+config BR2_PACKAGE_SWIFT_LLVM_DIR | |
+ string "Path to host LLVM library path" | |
+ default "/usr/lib/llvm-12" | |
+ | |
+endif | |
+ | |
+comment "swift needs a toolchain w/ Glibc, ICU, wchar, threads, C++, dynamic library" | |
+ depends on BR2_PACKAGE_SWIFT_ARCH_SUPPORTS | |
+ depends on !BR2_TOOLCHAIN_USES_GLIBC || !BR2_TOOLCHAIN_HAS_THREADS || !BR2_INSTALL_LIBSTDCPP \ | |
+ || BR2_STATIC_LIBS || !BR2_USE_WCHAR | |
diff --git a/package/swift/Float16.patch b/package/swift/Float16.patch | |
new file mode 100644 | |
index 0000000000..2768d0cd20 | |
--- /dev/null | |
+++ b/package/swift/Float16.patch | |
@@ -0,0 +1,13 @@ | |
+diff --git a/stdlib/public/runtime/Float16Support.cpp b/stdlib/public/runtime/Float16Support.cpp | |
+index 817739d4cdf..b1896a4e364 100644 | |
+--- a/stdlib/public/runtime/Float16Support.cpp | |
++++ b/stdlib/public/runtime/Float16Support.cpp | |
+@@ -29,7 +29,7 @@ | |
+ | |
+ // Android NDK <r21 do not provide `__aeabi_d2h` in the compiler runtime, | |
+ // provide shims in that case. | |
+-#if (defined(__ANDROID__) && defined(__ARM_ARCH_7A__) && defined(__ARM_EABI__)) || \ | |
++#if ((defined(__ANDROID__) || defined(__linux__)) && defined(__arm__)) || \ | |
+ ((defined(__i386__) || defined(__i686__) || defined(__x86_64__)) && !defined(__APPLE__)) | |
+ | |
+ #include "../SwiftShims/Visibility.h" | |
diff --git a/package/swift/RefCount.h.diff b/package/swift/RefCount.h.diff | |
new file mode 100644 | |
index 0000000000..332ff549dc | |
--- /dev/null | |
+++ b/package/swift/RefCount.h.diff | |
@@ -0,0 +1,18 @@ | |
+diff --git a/stdlib/public/SwiftShims/RefCount.h b/stdlib/public/SwiftShims/RefCount.h | |
+index 5c8211f5e9f..fe54839aaae 100644 | |
+--- a/stdlib/public/SwiftShims/RefCount.h | |
++++ b/stdlib/public/SwiftShims/RefCount.h | |
+@@ -1319,7 +1319,12 @@ class HeapObjectSideTableEntry { | |
+ | |
+ public: | |
+ HeapObjectSideTableEntry(HeapObject *newObject) | |
+- : object(newObject), refCounts() | |
++ : object(newObject), | |
++#if __arm__ // https://bugs.swift.org/browse/SR-5846 | |
++ refCounts(SideTableRefCounts::Initialized) | |
++#else | |
++ refCounts() | |
++#endif | |
+ { } | |
+ | |
+ #pragma clang diagnostic push | |
diff --git a/package/swift/swift-5.6-armv5.patch b/package/swift/swift-5.6-armv5.patch | |
new file mode 100644 | |
index 0000000000..61557a6e62 | |
--- /dev/null | |
+++ b/package/swift/swift-5.6-armv5.patch | |
@@ -0,0 +1,161 @@ | |
+diff --git a/CMakeLists.txt b/CMakeLists.txt | |
+index bc9b6790922..5c15bc7048b 100644 | |
+--- a/CMakeLists.txt | |
++++ b/CMakeLists.txt | |
+@@ -713,6 +713,8 @@ else() | |
+ set(SWIFT_HOST_VARIANT_ARCH_default "powerpc64le") | |
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "s390x") | |
+ set(SWIFT_HOST_VARIANT_ARCH_default "s390x") | |
++ elseif("${CMAKE_SYSTEM_PROCESSOR}" MATCHES "armv5|armv5te") | |
++ set(SWIFT_HOST_VARIANT_ARCH_default "armv5") | |
+ # FIXME: Only matches v6l/v7l - by far the most common variants | |
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "armv6l") | |
+ set(SWIFT_HOST_VARIANT_ARCH_default "armv6") | |
+diff --git a/cmake/modules/AddSwift.cmake b/cmake/modules/AddSwift.cmake | |
+index a448bcb23c4..4bafb119105 100644 | |
+--- a/cmake/modules/AddSwift.cmake | |
++++ b/cmake/modules/AddSwift.cmake | |
+@@ -338,7 +338,7 @@ function(_add_host_variant_link_flags target) | |
+ target_link_libraries(${target} PRIVATE | |
+ pthread | |
+ dl) | |
+- if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv6|armv7|i686") | |
++ if("${SWIFT_HOST_VARIANT_ARCH}" MATCHES "armv5|armv6|armv7|i686") | |
+ target_link_libraries(${target} PRIVATE atomic) | |
+ endif() | |
+ elseif(SWIFT_HOST_VARIANT_SDK STREQUAL FREEBSD) | |
+diff --git a/cmake/modules/AddSwiftUnittests.cmake b/cmake/modules/AddSwiftUnittests.cmake | |
+index 54a3138bec7..4b9dcf11197 100644 | |
+--- a/cmake/modules/AddSwiftUnittests.cmake | |
++++ b/cmake/modules/AddSwiftUnittests.cmake | |
+@@ -37,7 +37,7 @@ function(add_swift_unittest test_dirname) | |
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") | |
+ target_compile_options(${test_dirname} PRIVATE | |
+ -march=core2) | |
+- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv6|armv7|i686") | |
++ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "armv5|armv6|armv7|i686") | |
+ set_property(TARGET "${test_dirname}" APPEND PROPERTY LINK_LIBRARIES | |
+ "atomic") | |
+ endif() | |
+diff --git a/cmake/modules/SwiftConfigureSDK.cmake b/cmake/modules/SwiftConfigureSDK.cmake | |
+index 3c866f2e65c..103f1296fad 100644 | |
+--- a/cmake/modules/SwiftConfigureSDK.cmake | |
++++ b/cmake/modules/SwiftConfigureSDK.cmake | |
+@@ -323,7 +323,9 @@ macro(configure_sdk_unix name architectures) | |
+ endif() | |
+ | |
+ if("${prefix}" STREQUAL "LINUX") | |
+- if(arch MATCHES "(armv6|armv7)") | |
++ if(arch MATCHES "(armv5)") | |
++ set(SWIFT_SDK_LINUX_ARCH_${arch}_TRIPLE "${arch}-unknown-linux-gnueabi") | |
++ elseif(arch MATCHES "(armv6|armv7)") | |
+ set(SWIFT_SDK_LINUX_ARCH_${arch}_TRIPLE "${arch}-unknown-linux-gnueabihf") | |
+ elseif(arch MATCHES "(aarch64|i686|powerpc64|powerpc64le|s390x|x86_64)") | |
+ set(SWIFT_SDK_LINUX_ARCH_${arch}_TRIPLE "${arch}-unknown-linux-gnu") | |
+diff --git a/cmake/modules/SwiftSetIfArchBitness.cmake b/cmake/modules/SwiftSetIfArchBitness.cmake | |
+index fa29d77fe26..74a43e33343 100644 | |
+--- a/cmake/modules/SwiftSetIfArchBitness.cmake | |
++++ b/cmake/modules/SwiftSetIfArchBitness.cmake | |
+@@ -9,6 +9,7 @@ function(set_if_arch_bitness var_name) | |
+ if("${SIA_ARCH}" STREQUAL "i386" OR | |
+ "${SIA_ARCH}" STREQUAL "i686" OR | |
+ "${SIA_ARCH}" STREQUAL "x86" OR | |
++ "${SIA_ARCH}" STREQUAL "armv5" OR | |
+ "${SIA_ARCH}" STREQUAL "armv6" OR | |
+ "${SIA_ARCH}" STREQUAL "armv7" OR | |
+ "${SIA_ARCH}" STREQUAL "armv7k" OR | |
+diff --git a/lib/Basic/Platform.cpp b/lib/Basic/Platform.cpp | |
+index 141655332d8..47759ba6b8e 100644 | |
+--- a/lib/Basic/Platform.cpp | |
++++ b/lib/Basic/Platform.cpp | |
+@@ -218,6 +218,8 @@ StringRef swift::getMajorArchitectureName(const llvm::Triple &Triple) { | |
+ return "armv7"; | |
+ case llvm::Triple::SubArchType::ARMSubArch_v6: | |
+ return "armv6"; | |
++ case llvm::Triple::SubArchType::ARMSubArch_v5: | |
++ return "armv5"; | |
+ default: | |
+ break; | |
+ } | |
+diff --git a/lib/IDE/Utils.cpp b/lib/IDE/Utils.cpp | |
+index fe5d0111dee..a92f0d01790 100644 | |
+--- a/lib/IDE/Utils.cpp | |
++++ b/lib/IDE/Utils.cpp | |
+@@ -401,6 +401,10 @@ static std::string adjustClangTriple(StringRef TripleStr) { | |
+ OS << "armv6k"; break; | |
+ case llvm::Triple::SubArchType::ARMSubArch_v6t2: | |
+ OS << "armv6t2"; break; | |
++ case llvm::Triple::SubArchType::ARMSubArch_v5: | |
++ OS << "armv5"; break; | |
++ case llvm::Triple::SubArchType::ARMSubArch_v5te: | |
++ OS << "armv5te"; break; | |
+ default: | |
+ // Adjust i386-macosx to x86_64 because there is no Swift stdlib for i386. | |
+ if ((Triple.getOS() == llvm::Triple::MacOSX || | |
+diff --git a/stdlib/cmake/modules/AddSwiftStdlib.cmake b/stdlib/cmake/modules/AddSwiftStdlib.cmake | |
+index 104cea4df59..2cf19b3e5bb 100644 | |
+--- a/stdlib/cmake/modules/AddSwiftStdlib.cmake | |
++++ b/stdlib/cmake/modules/AddSwiftStdlib.cmake | |
+@@ -404,7 +404,7 @@ function(_add_target_variant_link_flags) | |
+ MACCATALYST_BUILD_FLAVOR "${LFLAGS_MACCATALYST_BUILD_FLAVOR}") | |
+ if("${LFLAGS_SDK}" STREQUAL "LINUX") | |
+ list(APPEND link_libraries "pthread" "dl") | |
+- if("${LFLAGS_ARCH}" MATCHES "armv6|armv7|i686") | |
++ if("${LFLAGS_ARCH}" MATCHES "armv5|armv6|armv7|i686") | |
+ list(APPEND link_libraries "atomic") | |
+ endif() | |
+ elseif("${LFLAGS_SDK}" STREQUAL "FREEBSD") | |
+diff --git a/utils/build-script-impl b/utils/build-script-impl | |
+index 074e6f6cad2..fc05eee2894 100755 | |
+--- a/utils/build-script-impl | |
++++ b/utils/build-script-impl | |
+@@ -452,6 +452,7 @@ function verify_host_is_supported() { | |
+ | haiku-x86_64 \ | |
+ | linux-x86_64 \ | |
+ | linux-i686 \ | |
++ | linux-armv5 \ | |
+ | linux-armv6 \ | |
+ | linux-armv7 \ | |
+ | linux-aarch64 \ | |
+@@ -545,6 +546,10 @@ function set_build_options_for_host() { | |
+ ;; | |
+ esac | |
+ ;; | |
++ linux-armv5) | |
++ SWIFT_HOST_TRIPLE="armv5-unknown-linux-gnueabi" | |
++ llvm_target_arch="ARM" | |
++ ;; | |
+ linux-armv6) | |
+ SWIFT_HOST_TRIPLE="armv6-unknown-linux-gnueabihf" | |
+ llvm_target_arch="ARM" | |
+@@ -1099,7 +1104,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-armv6 | linux-armv7 | android-* ) | |
++ macosx* | iphone* | appletv* | watch*| linux-armv5 | linux-armv6 | linux-armv7 | android-* ) | |
+ ;; | |
+ *) | |
+ echo "Unknown host to cross-compile for: ${t}" | |
+diff --git a/utils/swift_build_support/swift_build_support/targets.py b/utils/swift_build_support/swift_build_support/targets.py | |
+index 05966defe28..e69c4272a02 100644 | |
+--- a/utils/swift_build_support/swift_build_support/targets.py | |
++++ b/utils/swift_build_support/swift_build_support/targets.py | |
+@@ -224,6 +224,7 @@ class StdlibDeploymentTarget(object): | |
+ Linux = Platform("linux", archs=[ | |
+ "x86_64", | |
+ "i686", | |
++ "armv5", | |
+ "armv6", | |
+ "armv7", | |
+ "aarch64", | |
+@@ -304,6 +305,9 @@ class StdlibDeploymentTarget(object): | |
+ elif machine.startswith('armv6'): | |
+ # linux-armv6* is canonicalized to 'linux-armv6' | |
+ return StdlibDeploymentTarget.Linux.armv6 | |
++ elif machine.startswith('armv5'): | |
++ # linux-armv5* is canonicalized to 'linux-armv5' | |
++ return StdlibDeploymentTarget.Linux.armv5 | |
+ elif machine == 'aarch64': | |
+ return StdlibDeploymentTarget.Linux.aarch64 | |
+ elif machine == 'ppc64': | |
diff --git a/package/swift/swift.hash b/package/swift/swift.hash | |
new file mode 100644 | |
index 0000000000..2d47c540a5 | |
--- /dev/null | |
+++ b/package/swift/swift.hash | |
@@ -0,0 +1 @@ | |
+sha256 39e4e2b7343756e26627b945a384e1b828e38778b34cc5b0f3ecc23f18d22fd6 swift-5.6.1.tar.gz | |
diff --git a/package/swift/swift.mk b/package/swift/swift.mk | |
new file mode 100644 | |
index 0000000000..a01aae8cd9 | |
--- /dev/null | |
+++ b/package/swift/swift.mk | |
@@ -0,0 +1,235 @@ | |
+### Apple's Swift Programming Language | |
+SWIFT_VERSION = 5.6.1 | |
+SWIFT_SITE = $(call github,apple,swift,swift-$(SWIFT_VERSION)-RELEASE) | |
+SWIFT_LICENSE = Apache-2.0 | |
+SWIFT_LICENSE_FILES = LICENSE.txt | |
+SWIFT_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_SWIFT_TARGET_ARCH)) | |
+SWIFT_NATIVE_PATH = $(call qstrip,$(BR2_PACKAGE_SWIFT_NATIVE_TOOLS)) | |
+SWIFT_LLVM_DIR = $(call qstrip,$(BR2_PACKAGE_SWIFT_LLVM_DIR)) | |
+SWIFT_INSTALL_STAGING = YES | |
+SWIFT_INSTALL_TARGET = YES | |
+SWIFT_SUPPORTS_IN_SOURCE_BUILD = NO | |
+SWIFT_DEPENDENCIES = host-swift icu libxml2 libbsd libdispatch | |
+ | |
+ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y) | |
+SWIFT_CONF_ENV += LIBS="-latomic" | |
+endif | |
+ | |
+ifeq ($(SWIFT_TARGET_ARCH),armv7) | |
+SWIFT_TARGET_NAME = armv7-unknown-linux-gnueabihf | |
+else ifeq ($(SWIFT_TARGET_ARCH),armv6) | |
+SWIFT_TARGET_NAME = armv6-unknown-linux-gnueabihf | |
+else ifeq ($(SWIFT_TARGET_ARCH),armv5) | |
+SWIFT_TARGET_NAME = armv5-unknown-linux-gnueabi | |
+else | |
+SWIFT_TARGET_NAME = $(SWIFT_TARGET_ARCH)-unknown-linux-gnu | |
+endif | |
+ | |
+ifeq ($(SWIFT_TARGET_ARCH),armv7) | |
+SWIFT_EXTRA_FLAGS = | |
+else ifeq ($(SWIFT_TARGET_ARCH),armv5) | |
+SWIFT_EXTRA_FLAGS = -march=armv5te | |
+else ifeq ($(SWIFT_TARGET_ARCH),riscv64) | |
+SWIFT_EXTRA_FLAGS = -mno-relax -mabi=lp64 -march=rv64imac -mfloat-abi=soft | |
+else ifeq ($(SWIFT_TARGET_ARCH),mipsel) | |
+SWIFT_EXTRA_FLAGS = -msoft-float | |
+else ifeq ($(SWIFT_TARGET_ARCH),mips64el) | |
+SWIFT_EXTRA_FLAGS = -msoft-float | |
+else ifeq ($(SWIFT_TARGET_ARCH),powerpc) | |
+SWIFT_EXTRA_FLAGS = -mcpu=7400 | |
+else | |
+SWIFT_EXTRA_FLAGS = | |
+endif | |
+ | |
+SWIFTC_FLAGS="-target $(SWIFT_TARGET_NAME) -use-ld=lld \ | |
+-resource-dir ${STAGING_DIR}/usr/lib/swift \ | |
+-Xclang-linker -B${STAGING_DIR}/usr/lib \ | |
+-Xclang-linker -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) \ | |
+-Xcc -I${STAGING_DIR}/usr/include \ | |
+-Xcc -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION)) \ | |
+-Xcc -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/$(GNU_TARGET_NAME) \ | |
+-Xcc $(SWIFT_EXTRA_FLAGS) \ | |
+-L${STAGING_DIR}/lib \ | |
+-L${STAGING_DIR}/usr/lib \ | |
+-L${STAGING_DIR}/usr/lib/swift \ | |
+-L${STAGING_DIR}/usr/lib/swift/linux \ | |
+-L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) \ | |
+-sdk ${STAGING_DIR} \ | |
+" | |
+ | |
+ifeq (SWIFT_SUPPORTS_IN_SOURCE_BUILD),YES) | |
+SWIFT_BUILDDIR = $(SWIFT_SRCDIR) | |
+else | |
+SWIFT_BUILDDIR = $(SWIFT_SRCDIR)/build | |
+endif | |
+ | |
+SWIFT_CONF_OPTS = \ | |
+ -DCMAKE_C_COMPILER=$(SWIFT_NATIVE_PATH)/clang \ | |
+ -DCMAKE_CXX_COMPILER=$(SWIFT_NATIVE_PATH)/clang++ \ | |
+ -DCMAKE_C_FLAGS="-w -fuse-ld=lld -target $(SWIFT_TARGET_NAME) --sysroot $(STAGING_DIR) -latomic $(SWIFT_EXTRA_FLAGS) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(STAGING_DIR)/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \ | |
+ -DCMAKE_CXX_FLAGS="-w -fuse-ld=lld -target $(SWIFT_TARGET_NAME) --sysroot $(STAGING_DIR) -latomic $(SWIFT_EXTRA_FLAGS) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(STAGING_DIR)/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/ -I$(HOST_DIR)/$(GNU_TARGET_NAME)/include/c++/$(call qstrip,$(BR2_GCC_VERSION))/$(GNU_TARGET_NAME)" \ | |
+ -DCMAKE_C_LINK_FLAGS="--sysroot $(STAGING_DIR) -latomic $(SWIFT_EXTRA_FLAGS)" \ | |
+ -DCMAKE_CXX_LINK_FLAGS="--sysroot $(STAGING_DIR) -latomic $(SWIFT_EXTRA_FLAGS)" \ | |
+ -DSWIFT_USE_LINKER=lld \ | |
+ -DLLVM_USE_LINKER=lld \ | |
+ -DLLVM_DIR=${SWIFT_LLVM_DIR}/lib/cmake/llvm \ | |
+ -DLLVM_BUILD_LIBRARY_DIR=${SWIFT_LLVM_DIR} \ | |
+ -DSWIFT_BUILD_RUNTIME_WITH_HOST_COMPILER=ON \ | |
+ -DSWIFT_NATIVE_CLANG_TOOLS_PATH=${SWIFT_NATIVE_PATH} \ | |
+ -DSWIFT_NATIVE_SWIFT_TOOLS_PATH=${SWIFT_NATIVE_PATH} \ | |
+ -DSWIFT_BUILD_DYNAMIC_SDK_OVERLAY=ON \ | |
+ -DSWIFT_BUILD_DYNAMIC_STDLIB=ON \ | |
+ -DSWIFT_BUILD_REMOTE_MIRROR=OFF \ | |
+ -DSWIFT_BUILD_SOURCEKIT=OFF \ | |
+ -DSWIFT_BUILD_STDLIB_EXTRA_TOOLCHAIN_CONTENT=OFF \ | |
+ -DSWIFT_BUILD_SYNTAXPARSERLIB=OFF \ | |
+ -DSWIFT_BUILD_REMOTE_MIRROR=OFF \ | |
+ -DSWIFT_ENABLE_SOURCEKIT_TESTS=OFF \ | |
+ -DSWIFT_INCLUDE_DOCS=OFF \ | |
+ -DSWIFT_INCLUDE_TOOLS=OFF \ | |
+ -DSWIFT_INCLUDE_TESTS=OFF \ | |
+ -DSWIFT_HOST_VARIANT_ARCH=${SWIFT_TARGET_ARCH} \ | |
+ -DSWIFT_SDKS=LINUX \ | |
+ -DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_PATH=${STAGING_DIR} \ | |
+ -DSWIFT_SDK_LINUX_ARCH_${SWIFT_TARGET_ARCH}_LIBC_INCLUDE_DIRECTORY=${STAGING_DIR}/usr/include \ | |
+ -DSWIFT_PATH_TO_LIBDISPATCH_SOURCE=${LIBDISPATCH_SRCDIR} \ | |
+ -DSWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY=ON \ | |
+ -DZLIB_LIBRARY=$(STAGING_DIR)/usr/lib/libz.so \ | |
+ | |
+ifeq ($(SWIFT_TARGET_ARCH),armv7) | |
+SWIFT_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ | |
+else ifeq ($(SWIFT_TARGET_ARCH),armv6) | |
+SWIFT_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ | |
+else ifeq ($(SWIFT_TARGET_ARCH),armv5) | |
+SWIFT_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ | |
+else ifeq ($(SWIFT_TARGET_ARCH),riscv64) | |
+SWIFT_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS="-Xcc -mno-relax" \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ | |
+else ifeq ($(SWIFT_TARGET_ARCH),mipsel) | |
+SWIFT_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ | |
+else ifeq ($(SWIFT_TARGET_ARCH),mips64el) | |
+SWIFT_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ | |
+else ifeq ($(SWIFT_TARGET_ARCH),powerpc) | |
+SWIFT_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ | |
+else | |
+endif | |
+ | |
+define SWIFT_CONFIGURE_CMDS | |
+ # Configure for Ninja | |
+ (mkdir -p $(SWIFT_BUILDDIR) && \ | |
+ cd $(SWIFT_BUILDDIR) && \ | |
+ rm -f CMakeCache.txt && \ | |
+ PATH=$(BR_PATH):$(SWIFT_NATIVE_PATH) \ | |
+ $(SWIFT_CONF_ENV) $(BR2_CMAKE) -S $(SWIFT_SRCDIR) -B $(SWIFT_BUILDDIR) -G Ninja \ | |
+ -DCMAKE_INSTALL_PREFIX="$(STAGING_DIR)/usr" \ | |
+ -DBUILD_SHARED_LIBS=ON \ | |
+ -DCMAKE_BUILD_TYPE=$(if $(BR2_ENABLE_RUNTIME_DEBUG),Debug,Release) \ | |
+ $(SWIFT_CONF_OPTS) \ | |
+ ) | |
+endef | |
+ | |
+define SWIFT_BUILD_CMDS | |
+ # Compile | |
+ (cd $(SWIFT_BUILDDIR) && ninja) | |
+endef | |
+ | |
+define SWIFT_INSTALL_TARGET_CMDS | |
+ cp -f $(SWIFT_BUILDDIR)/lib/swift/linux/*.so $(TARGET_DIR)/usr/lib | |
+endef | |
+ | |
+define SWIFT_INSTALL_STAGING_CMDS | |
+ # Copy runtime libraries and swift interfaces | |
+ (cd $(SWIFT_BUILDDIR) && ninja install) | |
+endef | |
+ | |
+define HOST_SWIFT_INSTALL_CMDS | |
+ # Create Swift support directory | |
+ mkdir -p $(HOST_SWIFT_SUPPORT_DIR) | |
+ # Generate SwiftPM cross compilation toolchain file | |
+ rm -f $(SWIFT_DESTINATION_FILE) | |
+ touch $(SWIFT_DESTINATION_FILE) | |
+ echo '{' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "version":1,' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "sdk":"$(STAGING_DIR)",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "toolchain-bin-dir":"$(SWIFT_NATIVE_PATH)",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "target":"$(SWIFT_TARGET_NAME)",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "dynamic-library-extension":"so",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "extra-cc-flags":[' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-fPIC",' >> $(SWIFT_DESTINATION_FILE) | |
+ | |
+ @if [ "$(SWIFT_TARGET_ARCH)" = "armv5" ]; then\ | |
+ echo ' "-march=armv5te",' >> $(SWIFT_DESTINATION_FILE);\ | |
+ fi | |
+ | |
+ echo ' ],' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "extra-swiftc-flags":[' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-target", "$(SWIFT_TARGET_NAME)",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-use-ld=lld",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-tools-directory", "$(SWIFT_NATIVE_PATH)",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xlinker", "-rpath", "-Xlinker", "/usr/lib/swift/linux",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xlinker", "-L$(STAGING_DIR)",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xlinker", "-L$(STAGING_DIR)/lib",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xlinker", "-L$(STAGING_DIR)/usr/lib",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xlinker", "-L$(STAGING_DIR)/usr/lib/swift/linux",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xlinker", "-L$(STAGING_DIR)/usr/lib/swift/linux/$(SWIFT_TARGET_ARCH)",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xlinker", "-L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xlinker", "--build-id=sha1",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-I$(STAGING_DIR)/usr/include",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-I$(STAGING_DIR)/usr/lib/swift",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-resource-dir", "$(STAGING_DIR)/usr/lib/swift",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xclang-linker", "-B$(STAGING_DIR)/usr/lib",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xclang-linker", "-B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))",' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-Xclang-linker", "-latomic",' >> $(SWIFT_DESTINATION_FILE);\ | |
+ | |
+ @if [ "$(SWIFT_TARGET_ARCH)" = "powerpc" ]; then\ | |
+ echo ' "-Xcc", "-mcpu=7400",' >> $(SWIFT_DESTINATION_FILE);\ | |
+ fi | |
+ | |
+ @if [ "$(SWIFT_TARGET_ARCH)" = "armv5" ]; then\ | |
+ echo ' "-Xcc", "-march=armv5te",' >> $(SWIFT_DESTINATION_FILE);\ | |
+ fi | |
+ | |
+ echo ' "-sdk", "$(STAGING_DIR)"' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' ],' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "extra-cpp-flags":[' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' "-lstdc++"' >> $(SWIFT_DESTINATION_FILE) | |
+ echo ' ]' >> $(SWIFT_DESTINATION_FILE) | |
+ echo '}' >> $(SWIFT_DESTINATION_FILE) | |
+ | |
+ # Copy swift toolchain | |
+ mkdir -p $(HOST_SWIFT_SUPPORT_DIR)/bin/ | |
+ cp -rf $(SWIFT_NATIVE_PATH)/* $(HOST_SWIFT_SUPPORT_DIR)/bin/ | |
+ mkdir -p $(HOST_SWIFT_SUPPORT_DIR)/lib/ | |
+ cp -rf $(SWIFT_NATIVE_PATH)/../lib/* $(HOST_SWIFT_SUPPORT_DIR)/lib/ | |
+endef | |
+ | |
+$(eval $(generic-package)) | |
+$(eval $(host-generic-package)) | |
diff --git a/package/xctest/Config.in b/package/xctest/Config.in | |
new file mode 100644 | |
index 0000000000..caecba9d62 | |
--- /dev/null | |
+++ b/package/xctest/Config.in | |
@@ -0,0 +1,12 @@ | |
+if BR2_PACKAGE_SWIFT | |
+ | |
+config BR2_PACKAGE_XCTEST | |
+ bool "foundation" | |
+ depends on BR2_PACKAGE_SWIFT | |
+ select BR2_PACKAGE_FOUNDATION | |
+ help | |
+ The XCTest library is designed to provide a common framework for writing unit tests in Swift, for Swift packages and applications. | |
+ | |
+ http://swift.org | |
+ | |
+endif | |
diff --git a/package/xctest/xctest.mk b/package/xctest/xctest.mk | |
new file mode 100644 | |
index 0000000000..0c06dc67ca | |
--- /dev/null | |
+++ b/package/xctest/xctest.mk | |
@@ -0,0 +1,63 @@ | |
+### XCTest | |
+XCTEST_VERSION = 5.6.1 | |
+XCTEST_SITE = $(call github,apple,swift-corelibs-xctest,swift-$(XCTEST_VERSION)-RELEASE) | |
+XCTEST_LICENSE = Apache-2.0 | |
+XCTEST_LICENSE_FILES = LICENSE | |
+XCTEST_INSTALL_STAGING = YES | |
+XCTEST_INSTALL_TARGET = YES | |
+XCTEST_SUPPORTS_IN_SOURCE_BUILD = NO | |
+XCTEST_DEPENDENCIES = swift foundation | |
+ | |
+XCTEST_CONF_OPTS += \ | |
+ -DCMAKE_Swift_FLAGS=${SWIFTC_FLAGS} \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ -DCF_DEPLOYMENT_SWIFT=ON \ | |
+ -Ddispatch_DIR="$(LIBSWIFTDISPATCH_BUILDDIR)/cmake/modules" \ | |
+ -DFoundation_DIR="$(FOUNDATION_BUILDDIR)/cmake/modules" \ | |
+ | |
+ifeq (XCTEST_SUPPORTS_IN_SOURCE_BUILD),YES) | |
+XCTEST_BUILDDIR = $(XCTEST_SRCDIR) | |
+else | |
+XCTEST_BUILDDIR = $(XCTEST_SRCDIR)/build | |
+endif | |
+ | |
+define XCTEST_CONFIGURE_CMDS | |
+ # Workaround Dispatch defined with cmake and module | |
+ rm -rf ${STAGING_DIR}/usr/lib/swift/dispatch | |
+ # Configure | |
+ (mkdir -p $(XCTEST_BUILDDIR) && \ | |
+ cd $(XCTEST_BUILDDIR) && \ | |
+ rm -f CMakeCache.txt && \ | |
+ PATH=$(BR_PATH):$(SWIFT_NATIVE_PATH) \ | |
+ $(XCTEST_CONF_ENV) $(BR2_CMAKE) -S $(XCTEST_SRCDIR) -B $(XCTEST_BUILDDIR) -G Ninja \ | |
+ -DCMAKE_INSTALL_PREFIX="/usr" \ | |
+ -DBUILD_SHARED_LIBS=ON \ | |
+ -DCMAKE_BUILD_TYPE=$(if $(BR2_ENABLE_RUNTIME_DEBUG),Debug,Release) \ | |
+ -DCMAKE_C_COMPILER=$(SWIFT_NATIVE_PATH)/clang \ | |
+ -DCMAKE_C_FLAGS="-w -fuse-ld=lld -target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR) $(SWIFT_EXTRA_FLAGS) -I$(STAGING_DIR)/usr/include -B$(STAGING_DIR)/usr/lib -B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION)) -L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))" \ | |
+ -DCMAKE_C_LINK_FLAGS="-target $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR)" \ | |
+ $(XCTEST_CONF_OPTS) \ | |
+ ) | |
+endef | |
+ | |
+define XCTEST_BUILD_CMDS | |
+ # Compile | |
+ (cd $(XCTEST_BUILDDIR) && ninja) | |
+endef | |
+ | |
+define XCTEST_INSTALL_TARGET_CMDS | |
+ cp $(XCTEST_BUILDDIR)/*.so $(TARGET_DIR)/usr/lib/ | |
+endef | |
+ | |
+define XCTEST_INSTALL_STAGING_CMDS | |
+ # Copy libraries | |
+ cp $(XCTEST_BUILDDIR)/*.so $(STAGING_DIR)/usr/lib/swift/linux/ | |
+ # Copy Swift modules | |
+ cp $(XCTEST_BUILDDIR)/swift/* ${STAGING_DIR}/usr/lib/swift/linux/$(SWIFT_TARGET_ARCH)/ | |
+ # Restore Dispatch headers | |
+ $(LIBSWIFTDISPATCH_INSTALL_STAGING_CMDS) | |
+endef | |
+ | |
+$(eval $(generic-package)) | |
diff --git a/support/misc/toolchainfile.cmake.in b/support/misc/toolchainfile.cmake.in | |
index be575566a4..30c0e63bf2 100644 | |
--- a/support/misc/toolchainfile.cmake.in | |
+++ b/support/misc/toolchainfile.cmake.in | |
@@ -14,9 +14,15 @@ string(REPLACE "/share/buildroot" "" RELOCATED_HOST_DIR ${CMAKE_CURRENT_LIST_DIR | |
# so that it can find our custom platform description. | |
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) | |
-set(CMAKE_SYSTEM_NAME Buildroot) | |
-set(CMAKE_SYSTEM_VERSION 1) | |
-set(CMAKE_SYSTEM_PROCESSOR @@CMAKE_SYSTEM_PROCESSOR@@) | |
+if(NOT DEFINED CMAKE_SYSTEM_NAME) | |
+ set(CMAKE_SYSTEM_NAME Buildroot) | |
+endif() | |
+if(NOT DEFINED CMAKE_SYSTEM_VERSION) | |
+ set(CMAKE_SYSTEM_VERSION 1) | |
+endif() | |
+if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR) | |
+ set(CMAKE_SYSTEM_PROCESSOR @@CMAKE_SYSTEM_PROCESSOR@@) | |
+endif() | |
# Set the {C,CXX}FLAGS appended by CMake depending on the build type | |
# defined by Buildroot. CMake defaults these variables with -g and/or | |
@@ -28,11 +34,17 @@ set(CMAKE_SYSTEM_PROCESSOR @@CMAKE_SYSTEM_PROCESSOR@@) | |
# Note: | |
# if the project forces some of these flag variables, Buildroot is | |
# screwed up and there is nothing Buildroot can do about that :( | |
-set(CMAKE_C_FLAGS_DEBUG "" CACHE STRING "Debug CFLAGS") | |
-set(CMAKE_C_FLAGS_RELEASE " -DNDEBUG" CACHE STRING "Release CFLAGS") | |
+if(NOT DEFINED CMAKE_C_FLAGS_DEBUG) | |
+ set(CMAKE_C_FLAGS_DEBUG "" CACHE STRING "Debug CFLAGS") | |
+endif() | |
+if(NOT DEFINED CMAKE_C_FLAGS_RELEASE) | |
+ set(CMAKE_C_FLAGS_RELEASE " -DNDEBUG" CACHE STRING "Release CFLAGS") | |
+endif() | |
# Build type from the Buildroot configuration | |
-set(CMAKE_BUILD_TYPE @@CMAKE_BUILD_TYPE@@ CACHE STRING "Buildroot build configuration") | |
+if(NOT DEFINED CMAKE_BUILD_TYPE) | |
+ set(CMAKE_BUILD_TYPE @@CMAKE_BUILD_TYPE@@ CACHE STRING "Buildroot build configuration") | |
+endif() | |
# Buildroot defaults flags. | |
# If you are using this toolchainfile.cmake file outside of Buildroot and | |
@@ -41,33 +53,75 @@ set(CMAKE_BUILD_TYPE @@CMAKE_BUILD_TYPE@@ CACHE STRING "Buildroot build configur | |
# cmake -DCMAKE_C_FLAGS="@@TARGET_CFLAGS@@ -Dsome_custom_flag" ... | |
# * and make sure the project's CMake code extends them like this if needed: | |
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Dsome_definitions") | |
-set(CMAKE_C_FLAGS "@@TARGET_CFLAGS@@" CACHE STRING "Buildroot CFLAGS") | |
-set(CMAKE_EXE_LINKER_FLAGS "@@TARGET_LDFLAGS@@" CACHE STRING "Buildroot LDFLAGS for executables") | |
-set(CMAKE_SHARED_LINKER_FLAGS "@@TARGET_LDFLAGS@@" CACHE STRING "Buildroot LDFLAGS for shared libraries") | |
-set(CMAKE_MODULE_LINKER_FLAGS "@@TARGET_LDFLAGS@@" CACHE STRING "Buildroot LDFLAGS for module libraries") | |
+if(NOT DEFINED CMAKE_C_FLAGS) | |
+ set(CMAKE_C_FLAGS "@@TARGET_CFLAGS@@" CACHE STRING "Buildroot CFLAGS") | |
+endif() | |
+if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS) | |
+ set(CMAKE_EXE_LINKER_FLAGS "@@TARGET_LDFLAGS@@" CACHE STRING "Buildroot LDFLAGS for executables") | |
+endif() | |
+if(NOT DEFINED CMAKE_SHARED_LINKER_FLAGS) | |
+ set(CMAKE_SHARED_LINKER_FLAGS "@@TARGET_LDFLAGS@@" CACHE STRING "Buildroot LDFLAGS for shared libraries") | |
+endif() | |
+if(NOT DEFINED CMAKE_MODULE_LINKER_FLAGS) | |
+ set(CMAKE_MODULE_LINKER_FLAGS "@@TARGET_LDFLAGS@@" CACHE STRING "Buildroot LDFLAGS for module libraries") | |
+endif() | |
-set(CMAKE_INSTALL_SO_NO_EXE 0) | |
+if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) | |
+ set(CMAKE_INSTALL_SO_NO_EXE 0) | |
+endif() | |
-set(CMAKE_PROGRAM_PATH "${RELOCATED_HOST_DIR}/bin") | |
-set(CMAKE_SYSROOT "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@") | |
-set(CMAKE_FIND_ROOT_PATH "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@") | |
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | |
-set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) | |
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | |
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) | |
+if(NOT DEFINED CMAKE_PROGRAM_PATH) | |
+ set(CMAKE_PROGRAM_PATH "${RELOCATED_HOST_DIR}/bin") | |
+endif() | |
+if(NOT DEFINED CMAKE_SYSROOT) | |
+ set(CMAKE_SYSROOT "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@") | |
+endif() | |
+if(NOT DEFINED CMAKE_FIND_ROOT_PATH) | |
+ set(CMAKE_FIND_ROOT_PATH "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@") | |
+endif() | |
+if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) | |
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) | |
+endif() | |
+if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) | |
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) | |
+endif() | |
+if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) | |
+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) | |
+endif() | |
+if(NOT DEFINED CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) | |
+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) | |
+endif() | |
set(ENV{PKG_CONFIG_SYSROOT_DIR} "${RELOCATED_HOST_DIR}/@@STAGING_SUBDIR@@") | |
# This toolchain file can be used both inside and outside Buildroot. | |
-set(CMAKE_C_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CC@@") | |
+if(NOT DEFINED CMAKE_C_COMPILER) | |
+ set(CMAKE_C_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CC@@") | |
+endif() | |
if(@@TOOLCHAIN_HAS_CXX@@) | |
- set(CMAKE_CXX_FLAGS_DEBUG "" CACHE STRING "Debug CXXFLAGS") | |
- set(CMAKE_CXX_FLAGS_RELEASE " -DNDEBUG" CACHE STRING "Release CXXFLAGS") | |
- set(CMAKE_CXX_FLAGS "@@TARGET_CXXFLAGS@@" CACHE STRING "Buildroot CXXFLAGS") | |
- set(CMAKE_CXX_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CXX@@") | |
+ if(NOT DEFINED CMAKE_CXX_FLAGS_DEBUG) | |
+ set(CMAKE_CXX_FLAGS_DEBUG "" CACHE STRING "Debug CXXFLAGS") | |
+ endif() | |
+ if(NOT DEFINED CMAKE_CXX_FLAGS_RELEASE) | |
+ set(CMAKE_CXX_FLAGS_RELEASE " -DNDEBUG" CACHE STRING "Release CXXFLAGS") | |
+ endif() | |
+ if(NOT DEFINED CMAKE_CXX_FLAGS) | |
+ set(CMAKE_CXX_FLAGS "@@TARGET_CXXFLAGS@@" CACHE STRING "Buildroot CXXFLAGS") | |
+ endif() | |
+ if(NOT DEFINED CMAKE_CXX_COMPILER) | |
+ set(CMAKE_CXX_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_CXX@@") | |
+ endif() | |
endif() | |
if(@@TOOLCHAIN_HAS_FORTRAN@@) | |
- set(CMAKE_Fortran_FLAGS_DEBUG "" CACHE STRING "Debug Fortran FLAGS") | |
- set(CMAKE_Fortran_FLAGS_RELEASE " -DNDEBUG" CACHE STRING "Release Fortran FLAGS") | |
- set(CMAKE_Fortran_FLAGS "@@TARGET_FCFLAGS@@" CACHE STRING "Buildroot FCFLAGS") | |
- set(CMAKE_Fortran_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_FC@@") | |
+ if(NOT DEFINED CMAKE_Fortran_FLAGS_DEBUG) | |
+ set(CMAKE_Fortran_FLAGS_DEBUG "" CACHE STRING "Debug Fortran FLAGS") | |
+ endif() | |
+ if(NOT DEFINED CMAKE_Fortran_FLAGS_RELEASE) | |
+ set(CMAKE_Fortran_FLAGS_RELEASE " -DNDEBUG" CACHE STRING "Release Fortran FLAGS") | |
+ endif() | |
+ if(NOT DEFINED CMAKE_Fortran_FLAGS) | |
+ set(CMAKE_Fortran_FLAGS "@@TARGET_FCFLAGS@@" CACHE STRING "Buildroot FCFLAGS") | |
+ endif() | |
+ if(NOT DEFINED CMAKE_Fortran_COMPILER) | |
+ set(CMAKE_Fortran_COMPILER "${RELOCATED_HOST_DIR}/@@TARGET_FC@@") | |
+ endif() | |
endif() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment