Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save colemancda/2ef155e74d21dd22acc9c7ad223a4aa6 to your computer and use it in GitHub Desktop.
Save colemancda/2ef155e74d21dd22acc9c7ad223a4aa6 to your computer and use it in GitHub Desktop.
From 4c0b681da8088fb4c21a40a7e75776b11e1be28a Mon Sep 17 00:00:00 2001
From: Alsey Coleman Miller <[email protected]>
Date: Sun, 27 Mar 2022 22:49:31 -0700
Subject: [PATCH 1/1] package/swift: add Swift runtime libraries
Signed-off-by: Alsey Coleman Miller <[email protected]>
---
package/Config.in | 11 +
package/foundation/Config.in | 14 ++
package/foundation/foundation.hash | 1 +
package/foundation/foundation.mk | 102 ++++++++
package/libdispatch/Config.in | 11 +
package/libdispatch/libdispatch.hash | 2 +
package/libdispatch/libdispatch.mk | 78 ++++++
package/libswiftdispatch/Config.in | 12 +
.../libswiftdispatch/libswiftdispatch.hash | 2 +
package/libswiftdispatch/libswiftdispatch.mk | 86 +++++++
package/swift-crypto/Config.in | 10 +
.../swift-crypto-shared-lib.patch | 13 +
package/swift-crypto/swift-crypto.mk | 36 +++
package/swift-hello/Config.in | 10 +
package/swift-hello/src/Package.swift | 22 ++
.../src/Sources/swift-hello/Hello.swift | 31 +++
.../swift-helloTests/swift_helloTests.swift | 47 ++++
package/swift-hello/swift-hello.mk | 33 +++
package/swift/Config.in | 55 +++++
package/swift/Float16.patch | 13 +
package/swift/RefCount.h.diff | 18 ++
package/swift/swift-5.6-armv5.patch | 161 ++++++++++++
package/swift/swift.hash | 1 +
package/swift/swift.mk | 232 ++++++++++++++++++
24 files changed, 1001 insertions(+)
create mode 100644 package/foundation/Config.in
create mode 100644 package/foundation/foundation.hash
create mode 100644 package/foundation/foundation.mk
create mode 100644 package/libdispatch/Config.in
create mode 100644 package/libdispatch/libdispatch.hash
create mode 100644 package/libdispatch/libdispatch.mk
create mode 100644 package/libswiftdispatch/Config.in
create mode 100644 package/libswiftdispatch/libswiftdispatch.hash
create mode 100644 package/libswiftdispatch/libswiftdispatch.mk
create mode 100644 package/swift-crypto/Config.in
create mode 100644 package/swift-crypto/swift-crypto-shared-lib.patch
create mode 100644 package/swift-crypto/swift-crypto.mk
create mode 100644 package/swift-hello/Config.in
create mode 100644 package/swift-hello/src/Package.swift
create mode 100644 package/swift-hello/src/Sources/swift-hello/Hello.swift
create mode 100644 package/swift-hello/src/Tests/swift-helloTests/swift_helloTests.swift
create mode 100644 package/swift-hello/swift-hello.mk
create mode 100644 package/swift/Config.in
create mode 100644 package/swift/Float16.patch
create mode 100644 package/swift/RefCount.h.diff
create mode 100644 package/swift/swift-5.6-armv5.patch
create mode 100644 package/swift/swift.hash
create mode 100644 package/swift/swift.mk
diff --git a/package/Config.in b/package/Config.in
index 0d5d763180..b89a49913e 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1422,6 +1422,7 @@ menu "Crypto"
source "package/openssl/Config.in"
source "package/pkcs11-helper/Config.in"
source "package/rhash/Config.in"
+ source "package/swift-crypto/Config.in"
source "package/tinydtls/Config.in"
source "package/tpm2-pkcs11/Config.in"
source "package/tpm2-tss/Config.in"
@@ -1939,6 +1940,7 @@ menu "Other"
source "package/flann/Config.in"
source "package/flatbuffers/Config.in"
source "package/flatcc/Config.in"
+ source "package/foundation/Config.in"
source "package/gconf/Config.in"
source "package/gflags/Config.in"
source "package/gli/Config.in"
@@ -1968,6 +1970,7 @@ menu "Other"
source "package/libcrossguid/Config.in"
source "package/libcsv/Config.in"
source "package/libdaemon/Config.in"
+ source "package/libdispatch/Config.in"
source "package/libeastl/Config.in"
source "package/libee/Config.in"
source "package/libev/Config.in"
@@ -2001,6 +2004,7 @@ menu "Other"
source "package/libsigc/Config.in"
source "package/libsigsegv/Config.in"
source "package/libspatialindex/Config.in"
+ source "package/libswiftdispatch/Config.in"
source "package/libtalloc/Config.in"
source "package/libtasn1/Config.in"
source "package/libtommath/Config.in"
@@ -2021,6 +2025,10 @@ 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/lttng-libust/Config.in"
source "package/matio/Config.in"
source "package/mpc/Config.in"
@@ -2044,6 +2052,7 @@ endif
source "package/skalibs/Config.in"
source "package/sphinxbase/Config.in"
source "package/startup-notification/Config.in"
+ source "package/swift/Config.in"
source "package/tinycbor/Config.in"
source "package/tz/Config.in"
source "package/tzdata/Config.in"
@@ -2102,6 +2111,7 @@ menu "Mail"
endmenu
menu "Miscellaneous"
+ source "package/swift-hello/Config.in"
source "package/aespipe/Config.in"
source "package/bc/Config.in"
source "package/bitcoin/Config.in"
@@ -2125,6 +2135,7 @@ menu "Miscellaneous"
source "package/rtl_433/Config.in"
source "package/shared-mime-info/Config.in"
source "package/sunwait/Config.in"
+ source "package/swift-hello/Config.in"
source "package/taskd/Config.in"
source "package/wine/Config.in"
source "package/xmrig/Config.in"
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..f15edb8420
--- /dev/null
+++ b/package/foundation/foundation.hash
@@ -0,0 +1 @@
+sha256 3fa96321729ea1e99847320bc3b5eefcbc39ba57eb8750a16700afa0173b6bb0 swift-5.6-RELEASE.tar.gz
diff --git a/package/foundation/foundation.mk b/package/foundation/foundation.mk
new file mode 100644
index 0000000000..93c7cedbdd
--- /dev/null
+++ b/package/foundation/foundation.mk
@@ -0,0 +1,102 @@
+### Foundation
+FOUNDATION_VERSION = $(SWIFT_VERSION)
+FOUNDATION_SOURCE = swift-$(SWIFT_VERSION)-RELEASE.tar.gz
+FOUNDATION_SITE = https://github.com/apple/swift-corelibs-foundation/archive/refs/tags
+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" \
+
+ifeq ($(BR2_PACKAGE_LIBCURL),y)
+ FOUNDATION_DEPENDENCIES += libcurl
+ FOUNDATION_CONF_OPTS += \
+ -DCURL_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/libcurl.so \
+ -DCURL_INCLUDE_DIR="${STAGING_DIR}/usr/include" \
+
+endif
+
+ifeq ($(BR2_PACKAGE_LIBXML2),y)
+ FOUNDATION_DEPENDENCIES += libxml2
+ FOUNDATION_CONF_OPTS += \
+ -DLIBXML2_LIBRARY=${STAGING_DIR}/usr/lib/libxml2.so \
+ -DLIBXML2_INCLUDE_DIR=${STAGING_DIR}/usr/include/libxml2 \
+
+endif
+
+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..2f7c115375
--- /dev/null
+++ b/package/libdispatch/Config.in
@@ -0,0 +1,11 @@
+config BR2_PACKAGE_LIBDISPATCH
+ bool "libdispatch"
+ 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
diff --git a/package/libdispatch/libdispatch.hash b/package/libdispatch/libdispatch.hash
new file mode 100644
index 0000000000..a89c48c55f
--- /dev/null
+++ b/package/libdispatch/libdispatch.hash
@@ -0,0 +1,2 @@
+sha256 d2bbfb5b98d129caa2c6bd7662c850bf57cb434572d09844b56641c4558906ab swift-5.6-RELEASE.tar.gz
+sha256 c83647dac6a1e36795a62626e3a9c7dab7ed4b46919a757afb5562d5ed49da73 libdispatch-5.5.3-armv5.patch
diff --git a/package/libdispatch/libdispatch.mk b/package/libdispatch/libdispatch.mk
new file mode 100644
index 0000000000..a334c3052d
--- /dev/null
+++ b/package/libdispatch/libdispatch.mk
@@ -0,0 +1,78 @@
+### Grand Central Dispatch (C API)
+LIBDISPATCH_VERSION = $(SWIFT_VERSION)
+LIBDISPATCH_SOURCE = swift-$(SWIFT_VERSION)-RELEASE.tar.gz
+LIBDISPATCH_SITE = https://github.com/apple/swift-corelibs-libdispatch/archive/refs/tags
+LIBDISPATCH_LICENSE = Apache-2.0
+LIBDISPATCH_LICENSE_FILES = LICENSE
+LIBDISPATCH_INSTALL_STAGING = YES
+LIBDISPATCH_INSTALL_TARGET = YES
+LIBDISPATCH_SUPPORTS_IN_SOURCE_BUILD = NO
+LIBDISPATCH_DEPENDENCIES = libbsd
+LIBDISPATCH_PATCH = \
+ https://gist.githubusercontent.com/colemancda/e19ec96d8b3caa7f4a3f9ec9a82f356a/raw/a8a62d61856de09f02618d32d14ac637017cc44f/libdispatch-5.5.3-armv5.patch
+
+LIBDISPATCH_CONF_OPTS += \
+ -DLibRT_LIBRARIES="${STAGING_DIR}/usr/lib/librt.a" \
+
+ifeq (LIBDISPATCH_SUPPORTS_IN_SOURCE_BUILD),YES)
+LIBDISPATCH_BUILDDIR = $(LIBDISPATCH_SRCDIR)
+else
+LIBDISPATCH_BUILDDIR = $(LIBDISPATCH_SRCDIR)/build
+endif
+
+define LIBDISPATCH_CONFIGURE_CMDS
+ # Clean
+ rm -rf $(LIBDISPATCH_BUILDDIR)
+ rm -rf $(STAGING_DIR)/usr/lib/swift/dispatch
+ # Configure for Ninja
+ (mkdir -p $(LIBDISPATCH_BUILDDIR) && \
+ cd $(LIBDISPATCH_BUILDDIR) && \
+ rm -f CMakeCache.txt && \
+ PATH=$(BR_PATH):$(SWIFT_NATIVE_PATH) \
+ $(LIBDISPATCH_CONF_ENV) $(BR2_CMAKE) -S $(LIBDISPATCH_SRCDIR) -B $(LIBDISPATCH_BUILDDIR) -G Ninja \
+ -DCMAKE_INSTALL_PREFIX="/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 $(SWIFT_EXTRA_FLAGS) -target $(SWIFT_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 $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR)" \
+ -DCMAKE_CXX_FLAGS="-w -fuse-ld=lld $(SWIFT_EXTRA_FLAGS) -target $(SWIFT_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 $(SWIFT_TARGET_NAME) --sysroot=$(STAGING_DIR)" \
+ $(LIBDISPATCH_CONF_OPTS) \
+ )
+endef
+
+define LIBDISPATCH_BUILD_CMDS
+ # Compile
+ (cd $(LIBDISPATCH_BUILDDIR) && ninja)
+endef
+
+define LIBDISPATCH_INSTALL_TARGET_CMDS
+ (cd $(LIBDISPATCH_BUILDDIR) && \
+ cp ./*.so $(TARGET_DIR)/usr/lib/ \
+ )
+endef
+
+define LIBDISPATCH_INSTALL_STAGING_CMDS
+ # Copy libraries
+ cp $(LIBDISPATCH_BUILDDIR)/*.so $(STAGING_DIR)/usr/lib/
+ # Copy headers
+ mkdir -p ${STAGING_DIR}/usr/include/dispatch
+ cp $(LIBDISPATCH_SRCDIR)/dispatch/*.h ${STAGING_DIR}/usr/include/dispatch
+ mkdir -p ${STAGING_DIR}/usr/include/Block
+ cp $(LIBDISPATCH_SRCDIR)/src/BlocksRuntime/Block.h ${STAGING_DIR}/usr/include/Block/
+ mkdir -p ${STAGING_DIR}/usr/include/os
+ cp $(LIBDISPATCH_SRCDIR)/os/object.h ${STAGING_DIR}/usr/include/os/
+ cp $(LIBDISPATCH_SRCDIR)/os/generic_unix_base.h ${STAGING_DIR}/usr/include/os/
+endef
+
+$(eval $(generic-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/libswiftdispatch.hash b/package/libswiftdispatch/libswiftdispatch.hash
new file mode 100644
index 0000000000..a89c48c55f
--- /dev/null
+++ b/package/libswiftdispatch/libswiftdispatch.hash
@@ -0,0 +1,2 @@
+sha256 d2bbfb5b98d129caa2c6bd7662c850bf57cb434572d09844b56641c4558906ab swift-5.6-RELEASE.tar.gz
+sha256 c83647dac6a1e36795a62626e3a9c7dab7ed4b46919a757afb5562d5ed49da73 libdispatch-5.5.3-armv5.patch
diff --git a/package/libswiftdispatch/libswiftdispatch.mk b/package/libswiftdispatch/libswiftdispatch.mk
new file mode 100644
index 0000000000..45bef5b8f2
--- /dev/null
+++ b/package/libswiftdispatch/libswiftdispatch.mk
@@ -0,0 +1,86 @@
+### Grand Central Dispatch with Swift overlay
+LIBSWIFTDISPATCH_VERSION = $(SWIFT_VERSION)
+LIBSWIFTDISPATCH_SOURCE = swift-$(SWIFT_VERSION)-RELEASE.tar.gz
+LIBSWIFTDISPATCH_SITE = https://github.com/apple/swift-corelibs-libdispatch/archive/refs/tags
+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_PATCH = \
+ https://gist.githubusercontent.com/colemancda/e19ec96d8b3caa7f4a3f9ec9a82f356a/raw/a8a62d61856de09f02618d32d14ac637017cc44f/libdispatch-5.5.3-armv5.patch
+
+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
+ # Clean
+ rm -rf $(LIBSWIFTDISPATCH_BUILDDIR)
+ rm -rf $(STAGING_DIR)/usr/lib/swift/dispatch
+ # 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="/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
+ # Copy libraries
+ cp $(LIBSWIFTDISPATCH_BUILDDIR)/*.so $(STAGING_DIR)/usr/lib/swift/linux/
+ # Copy headers
+ mkdir -p ${STAGING_DIR}/usr/lib/swift/dispatch
+ cp $(LIBSWIFTDISPATCH_SRCDIR)/dispatch/*.h ${STAGING_DIR}/usr/lib/swift/dispatch/
+ cp $(LIBSWIFTDISPATCH_SRCDIR)/dispatch/module.modulemap ${STAGING_DIR}/usr/lib/swift/dispatch/
+ mkdir -p ${STAGING_DIR}/usr/lib/swift/Block
+ cp $(LIBSWIFTDISPATCH_SRCDIR)/src/BlocksRuntime/Block.h ${STAGING_DIR}/usr/lib/swift/Block/
+ mkdir -p ${STAGING_DIR}/usr/lib/swift/os
+ cp $(LIBSWIFTDISPATCH_SRCDIR)/os/object.h ${STAGING_DIR}/usr/lib/swift/os/
+ cp $(LIBSWIFTDISPATCH_SRCDIR)/os/generic_unix_base.h ${STAGING_DIR}/usr/lib/swift/os/
+ # Copy Swift modules
+ cp $(LIBSWIFTDISPATCH_BUILDDIR)/src/swift/swift/* ${STAGING_DIR}/usr/lib/swift/linux/$(SWIFT_TARGET_ARCH)/
+endef
+
+$(eval $(generic-package))
diff --git a/package/swift-crypto/Config.in b/package/swift-crypto/Config.in
new file mode 100644
index 0000000000..35c42fdc88
--- /dev/null
+++ b/package/swift-crypto/Config.in
@@ -0,0 +1,10 @@
+if BR2_PACKAGE_SWIFT
+
+config BR2_PACKAGE_SWIFT_CRYPTO
+ bool "swift-crypto"
+ depends on BR2_PACKAGE_SWIFT
+ depends on BR2_PACKAGE_FOUNDATION
+ help
+ Swift Crypto is an open-source implementation of a substantial portion of the API of Apple CryptoKit suitable for use on Linux platforms.
+
+endif
diff --git a/package/swift-crypto/swift-crypto-shared-lib.patch b/package/swift-crypto/swift-crypto-shared-lib.patch
new file mode 100644
index 0000000000..049a1a37d5
--- /dev/null
+++ b/package/swift-crypto/swift-crypto-shared-lib.patch
@@ -0,0 +1,13 @@
+diff --git a/Package.swift b/Package.swift
+index 4991568..2cb150f 100644
+--- a/Package.swift
++++ b/Package.swift
+@@ -39,7 +39,7 @@ let package = Package(
+ .tvOS(.v13),
+ ],
+ products: [
+- .library(name: "Crypto", targets: ["Crypto"]),
++ .library(name: "Crypto", type: .dynamic, targets: ["Crypto"]),
+ .library(name: "_CryptoExtras", targets: ["_CryptoExtras"]),
+ /* This target is used only for symbol mangling. It's added and removed automatically because it emits build warnings. MANGLE_START
+ .library(name: "CCryptoBoringSSL", type: .static, targets: ["CCryptoBoringSSL"]),
diff --git a/package/swift-crypto/swift-crypto.mk b/package/swift-crypto/swift-crypto.mk
new file mode 100644
index 0000000000..c0c34f53b3
--- /dev/null
+++ b/package/swift-crypto/swift-crypto.mk
@@ -0,0 +1,36 @@
+### Swift CryptoKit library
+SWIFT_CRYPTO_VERSION = 2.0.5
+SWIFT_CRYPTO_SOURCE = $(SWIFT_CRYPTO_VERSION).tar.gz
+SWIFT_CRYPTO_SITE = https://github.com/apple/swift-crypto/archive/refs/tags/
+SWIFT_CRYPTO_LICENSE = Apache-2.0
+SWIFT_CRYPTO_LICENSE_FILES = LICENSE.txt
+SWIFT_CRYPTO_INSTALL_STAGING = YES
+SWIFT_CRYPTO_INSTALL_TARGET = YES
+SWIFT_CRYPTO_SUPPORTS_IN_SOURCE_BUILD = YES
+SWIFT_CRYPTO_DEPENDENCIES = swift foundation
+SWIFT_CRYPTO_BUILDDIR = $(SWIFT_CRYPTO_SRCDIR)/.build/$(if $(BR2_ENABLE_RUNTIME_DEBUG),debug,release)
+
+define SWIFT_CRYPTO_BUILD_CMDS
+ ( \
+ cd $(SWIFT_CRYPTO_SRCDIR) && \
+ rm -rf .build && \
+ PATH=$(BR_PATH):$(SWIFT_NATIVE_PATH) \
+ $(SWIFT_NATIVE_PATH)/swift build -c $(if $(BR2_ENABLE_RUNTIME_DEBUG),debug,release) --destination $(SWIFTPM_DESTINATION_FILE) \
+ )
+endef
+
+define SWIFT_CRYPTO_INSTALL_TARGET_CMDS
+ # Copy dynamic libraries
+ cp -rf $(SWIFT_CRYPTO_BUILDDIR)/libCrypto.so $(TARGET_DIR)/usr/lib/
+endef
+
+define SWIFT_CRYPTO_INSTALL_STAGING_CMDS
+ # Copy dynamic libraries
+ cp -rf $(SWIFT_CRYPTO_BUILDDIR)/libCrypto.so $(STAGING_DIR)/usr/lib/swift/linux/
+ # Copy Swift module
+ cp -rf $(SWIFT_CRYPTO_BUILDDIR)/Crypto.swiftdoc ${STAGING_DIR}/usr/lib/swift/linux/$(SWIFT_TARGET_ARCH)/
+ cp -rf $(SWIFT_CRYPTO_BUILDDIR)/Crypto.swiftmodule ${STAGING_DIR}/usr/lib/swift/linux/$(SWIFT_TARGET_ARCH)/
+ cp -rf $(SWIFT_CRYPTO_BUILDDIR)/Crypto.swiftsourceinfo ${STAGING_DIR}/usr/lib/swift/linux/$(SWIFT_TARGET_ARCH)/
+endef
+
+$(eval $(generic-package))
diff --git a/package/swift-hello/Config.in b/package/swift-hello/Config.in
new file mode 100644
index 0000000000..cbeed69667
--- /dev/null
+++ b/package/swift-hello/Config.in
@@ -0,0 +1,10 @@
+if BR2_PACKAGE_SWIFT
+
+config BR2_PACKAGE_SWIFT_HELLO
+ bool "swift-hello"
+ depends on BR2_PACKAGE_SWIFT
+ depends on BR2_PACKAGE_FOUNDATION
+ help
+ Demo application for Swift.
+
+endif
diff --git a/package/swift-hello/src/Package.swift b/package/swift-hello/src/Package.swift
new file mode 100644
index 0000000000..d26517480c
--- /dev/null
+++ b/package/swift-hello/src/Package.swift
@@ -0,0 +1,22 @@
+// swift-tools-version:5.5
+import PackageDescription
+
+let package = Package(
+ name: "swift-hello",
+ dependencies: [
+ // Dependencies declare other packages that this package depends on.
+ // .package(url: /* package url */, from: "1.0.0"),
+ ],
+ targets: [
+ // Targets are the basic building blocks of a package. A target can define a module or a test suite.
+ // Targets can depend on other targets in this package, and on products in packages this package depends on.
+ .executableTarget(
+ name: "swift-hello",
+ dependencies: []
+ ),
+ .testTarget(
+ name: "swift-helloTests",
+ dependencies: ["swift-hello"]
+ ),
+ ]
+)
diff --git a/package/swift-hello/src/Sources/swift-hello/Hello.swift b/package/swift-hello/src/Sources/swift-hello/Hello.swift
new file mode 100644
index 0000000000..d68c3fb1a3
--- /dev/null
+++ b/package/swift-hello/src/Sources/swift-hello/Hello.swift
@@ -0,0 +1,31 @@
+import Foundation
+#if canImport(Crypto)
+import Crypto
+#endif
+
+@main
+struct Hello {
+ static func main() async throws {
+ print("Hello, world! 👋")
+ #if canImport(Crypto)
+ print("Swift Crypto installed")
+ #endif
+ let task = Task {
+ var didCatchError = false
+ do { try await errorTest() }
+ catch CocoaError.userCancelled { didCatchError = true }
+ catch { fatalError() }
+ print("Task ran")
+ }
+ for _ in 0 ..< 10 {
+ print(UUID())
+ try await Task.sleep(1_000_000_000)
+ }
+ }
+}
+
+func errorTest() async throws {
+ print("Will throw")
+ throw CocoaError(.userCancelled)
+}
+
diff --git a/package/swift-hello/src/Tests/swift-helloTests/swift_helloTests.swift b/package/swift-hello/src/Tests/swift-helloTests/swift_helloTests.swift
new file mode 100644
index 0000000000..f9ca48cacd
--- /dev/null
+++ b/package/swift-hello/src/Tests/swift-helloTests/swift_helloTests.swift
@@ -0,0 +1,47 @@
+import XCTest
+import class Foundation.Bundle
+
+final class swift_helloTests: XCTestCase {
+ func testExample() throws {
+ // This is an example of a functional test case.
+ // Use XCTAssert and related functions to verify your tests produce the correct
+ // results.
+
+ // Some of the APIs that we use below are available in macOS 10.13 and above.
+ guard #available(macOS 10.13, *) else {
+ return
+ }
+
+ // Mac Catalyst won't have `Process`, but it is supported for executables.
+ #if !targetEnvironment(macCatalyst)
+
+ let fooBinary = productsDirectory.appendingPathComponent("swift-hello")
+
+ let process = Process()
+ process.executableURL = fooBinary
+
+ let pipe = Pipe()
+ process.standardOutput = pipe
+
+ try process.run()
+ process.waitUntilExit()
+
+ let data = pipe.fileHandleForReading.readDataToEndOfFile()
+ let output = String(data: data, encoding: .utf8)
+
+ XCTAssertEqual(output, "Hello, world!\n")
+ #endif
+ }
+
+ /// Returns path to the built products directory.
+ var productsDirectory: URL {
+ #if os(macOS)
+ for bundle in Bundle.allBundles where bundle.bundlePath.hasSuffix(".xctest") {
+ return bundle.bundleURL.deletingLastPathComponent()
+ }
+ fatalError("couldn't find the products directory")
+ #else
+ return Bundle.main.bundleURL
+ #endif
+ }
+}
diff --git a/package/swift-hello/swift-hello.mk b/package/swift-hello/swift-hello.mk
new file mode 100644
index 0000000000..b3cded3f7c
--- /dev/null
+++ b/package/swift-hello/swift-hello.mk
@@ -0,0 +1,33 @@
+### Swift Demo
+SWIFT_HELLO_VERSION = 0.1.0
+SWIFT_HELLO_SITE = $(SWIFT_HELLO_PKGDIR)/src
+SWIFT_HELLO_SITE_METHOD = local
+SWIFT_HELLO_INSTALL_STAGING = NO
+SWIFT_HELLO_INSTALL_TARGET = YES
+SWIFT_HELLO_SUPPORTS_IN_SOURCE_BUILD = YES
+SWIFT_HELLO_DEPENDENCIES = swift foundation
+SWIFT_HELLO_EXECUTABLES = swift-hello
+SWIFT_HELLO_BUILDDIR = $(SWIFT_HELLO_SRCDIR)/.build/$(if $(BR2_ENABLE_RUNTIME_DEBUG),debug,release)
+
+define SWIFT_HELLO_BUILD_CMDS
+ ( \
+ cd $(SWIFT_HELLO_SRCDIR) && \
+ rm -rf .build && \
+ PATH=$(BR_PATH):$(SWIFT_NATIVE_PATH) \
+ $(SWIFT_NATIVE_PATH)/swift build -c $(if $(BR2_ENABLE_RUNTIME_DEBUG),debug,release) --destination $(SWIFTPM_DESTINATION_FILE) \
+ )
+endef
+
+define SWIFT_HELLO_INSTALL_TARGET_CMDS
+ # Copy dynamic libraries
+ #cp $(SWIFT_HELLO_BUILDDIR)/*.so $(TARGET_DIR)/usr/lib/
+ cp $(SWIFT_HELLO_BUILDDIR)/swift-hello $(TARGET_DIR)/usr/bin/hello
+endef
+
+define SWIFT_HELLO_INSTALL_STAGING_CMDS
+ # Copy dynamic libraries
+ #cp $(SWIFT_HELLO_BUILDDIR)/*.so $(STAGING_DIR)/usr/lib/swift/linux/
+ cp $(SWIFT_HELLO_BUILDDIR)/swift-hello $(STAGING_DIR)/usr/bin/hello
+endef
+
+$(eval $(generic-package))
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..3c1d012f41
--- /dev/null
+++ b/package/swift/swift.hash
@@ -0,0 +1 @@
+sha256 15e3e092ad165c35eef59cf2449e3089a0bb1906272127ba58fa31fc53512af5 swift-5.6-RELEASE.tar.gz
diff --git a/package/swift/swift.mk b/package/swift/swift.mk
new file mode 100644
index 0000000000..da10aae8fd
--- /dev/null
+++ b/package/swift/swift.mk
@@ -0,0 +1,232 @@
+### Apple's Swift Programming Language
+SWIFT_VERSION = 5.6
+SWIFT_SOURCE = swift-$(SWIFT_VERSION)-RELEASE.tar.gz
+SWIFT_SITE = https://github.com/apple/swift/archive/refs/tags
+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 = icu libxml2 libbsd libdispatch
+
+ifeq ($(BR2_TOOLCHAIN_HAS_LIBATOMIC),y)
+SWIFT_CONF_ENV += LIBS="-latomic"
+endif
+
+HOST_SWIFT_SUPPORT_DIR = $(HOST_DIR)/usr/share/swift
+SWIFTPM_DESTINATION_FILE = $(HOST_SWIFT_SUPPORT_DIR)/$(SWIFT_TARGET_NAME)-toolchain.json
+
+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
+ # Clean
+ rm -rf $(SWIFT_BUILDDIR)
+ # 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="/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
+ mkdir -p $(HOST_SWIFT_SUPPORT_DIR)
+ # Copy runtime libraries and swift interfaces
+ cp -rf $(SWIFT_BUILDDIR)/lib/swift ${STAGING_DIR}/usr/lib/
+ # Generate SwiftPM cross compilation toolchain file
+ rm -f $(SWIFTPM_DESTINATION_FILE)
+ touch $(SWIFTPM_DESTINATION_FILE)
+ echo '{' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "version":1,' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "sdk":"$(STAGING_DIR)",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "toolchain-bin-dir":"$(SWIFT_NATIVE_PATH)",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "target":"$(SWIFT_TARGET_NAME)",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "dynamic-library-extension":"so",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "extra-cc-flags":[' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-fPIC"' >> $(SWIFTPM_DESTINATION_FILE)
+
+ @if [ "$(SWIFT_TARGET_ARCH)" = "armv5" ]; then\
+ echo ' "-march=armv5te",' >> $(SWIFTPM_DESTINATION_FILE);\
+ fi
+
+ echo ' ],' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "extra-swiftc-flags":[' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-target", "$(SWIFT_TARGET_NAME)",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-use-ld=lld",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-tools-directory", "$(SWIFT_NATIVE_PATH)",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xlinker", "-rpath", "-Xlinker", "/usr/lib/swift/linux",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xlinker", "-L$(STAGING_DIR)",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xlinker", "-L$(STAGING_DIR)/lib",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xlinker", "-L$(STAGING_DIR)/usr/lib",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xlinker", "-L$(STAGING_DIR)/usr/lib/swift/linux",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xlinker", "-L$(STAGING_DIR)/usr/lib/swift/linux/$(SWIFT_TARGET_ARCH)",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xlinker", "-L$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xlinker", "--build-id=sha1",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-I$(STAGING_DIR)/usr/include",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-I$(STAGING_DIR)/usr/lib/swift",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-resource-dir", "$(STAGING_DIR)/usr/lib/swift",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xclang-linker", "-B$(STAGING_DIR)/usr/lib",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xclang-linker", "-B$(HOST_DIR)/lib/gcc/$(GNU_TARGET_NAME)/$(call qstrip,$(BR2_GCC_VERSION))",' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-Xclang-linker", "-latomic",' >> $(SWIFTPM_DESTINATION_FILE);\
+
+ @if [ "$(SWIFT_TARGET_ARCH)" = "powerpc" ]; then\
+ echo ' "-Xcc", "-mcpu=7400",' >> $(SWIFTPM_DESTINATION_FILE);\
+ fi
+
+ @if [ "$(SWIFT_TARGET_ARCH)" = "armv5" ]; then\
+ echo ' "-Xcc", "-march=armv5te",' >> $(SWIFTPM_DESTINATION_FILE);\
+ fi
+
+ echo ' "-sdk", "$(STAGING_DIR)"' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' ],' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "extra-cpp-flags":[' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' "-lstdc++"' >> $(SWIFTPM_DESTINATION_FILE)
+ echo ' ]' >> $(SWIFTPM_DESTINATION_FILE)
+ echo '}' >> $(SWIFTPM_DESTINATION_FILE)
+
+endef
+
+$(eval $(generic-package))
+$(eval $(host-generic-package))
\ No newline at end of file
--
2.30.2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment