Last active
March 27, 2022 06:58
-
-
Save colemancda/83e681b53807e7f82517ec3b32d40cd3 to your computer and use it in GitHub Desktop.
Buildroot patches to add Swift 5.6 package with RISCV64 support
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 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..8fded1d2a5 | |
--- /dev/null | |
+++ b/package/swift-crypto/Config.in | |
@@ -0,0 +1,10 @@ | |
+if BR2_PACKAGE_SWIFT | |
+ | |
+config BR2_PACKAGE_SWIFT_CRYPTO | |
+ bool "swift-crypto" | |
+ select BR2_PACKAGE_SWIFT | |
+ select 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..2f8e596d66 | |
--- /dev/null | |
+++ b/package/swift-hello/Config.in | |
@@ -0,0 +1,10 @@ | |
+if BR2_PACKAGE_SWIFT | |
+ | |
+config BR2_PACKAGE_SWIFT_HELLO | |
+ bool "swift-hello" | |
+ select BR2_PACKAGE_SWIFT | |
+ select 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/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-riscv64.patch b/package/swift/swift-5.6-riscv64.patch | |
new file mode 100644 | |
index 0000000000..41f9e1dad9 | |
--- /dev/null | |
+++ b/package/swift/swift-5.6-riscv64.patch | |
@@ -0,0 +1,199 @@ | |
+diff --git a/CMakeLists.txt b/CMakeLists.txt | |
+index bc9b6790922..6cc8149e184 100644 | |
+--- a/CMakeLists.txt | |
++++ b/CMakeLists.txt | |
+@@ -724,6 +724,8 @@ else() | |
+ set(SWIFT_HOST_VARIANT_ARCH_default "i686") | |
+ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "wasm32") | |
+ set(SWIFT_HOST_VARIANT_ARCH_default "wasm32") | |
++ elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "riscv64") | |
++ set(SWIFT_HOST_VARIANT_ARCH_default "riscv64") | |
+ else() | |
+ message(FATAL_ERROR "Unrecognized architecture on host system: ${CMAKE_SYSTEM_PROCESSOR}") | |
+ endif() | |
+diff --git a/cmake/modules/SwiftConfigureSDK.cmake b/cmake/modules/SwiftConfigureSDK.cmake | |
+index 3c866f2e65c..21d325c07c7 100644 | |
+--- a/cmake/modules/SwiftConfigureSDK.cmake | |
++++ b/cmake/modules/SwiftConfigureSDK.cmake | |
+@@ -325,7 +325,7 @@ macro(configure_sdk_unix name architectures) | |
+ if("${prefix}" STREQUAL "LINUX") | |
+ if(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)") | |
++ elseif(arch MATCHES "(aarch64|i686|powerpc64|powerpc64le|s390x|x86_64|riscv64)") | |
+ set(SWIFT_SDK_LINUX_ARCH_${arch}_TRIPLE "${arch}-unknown-linux-gnu") | |
+ else() | |
+ message(FATAL_ERROR "unknown arch for ${prefix}: ${arch}") | |
+diff --git a/cmake/modules/SwiftSetIfArchBitness.cmake b/cmake/modules/SwiftSetIfArchBitness.cmake | |
+index fa29d77fe26..d43050d2a6e 100644 | |
+--- a/cmake/modules/SwiftSetIfArchBitness.cmake | |
++++ b/cmake/modules/SwiftSetIfArchBitness.cmake | |
+@@ -23,7 +23,8 @@ function(set_if_arch_bitness var_name) | |
+ "${SIA_ARCH}" STREQUAL "aarch64" OR | |
+ "${SIA_ARCH}" STREQUAL "powerpc64" OR | |
+ "${SIA_ARCH}" STREQUAL "powerpc64le" OR | |
+- "${SIA_ARCH}" STREQUAL "s390x") | |
++ "${SIA_ARCH}" STREQUAL "s390x" OR | |
++ "${SIA_ARCH}" STREQUAL "riscv64") | |
+ set("${var_name}" "${SIA_CASE_64_BIT}" PARENT_SCOPE) | |
+ else() | |
+ message(FATAL_ERROR "Unknown architecture: ${SIA_ARCH}") | |
+diff --git a/lib/Basic/LangOptions.cpp b/lib/Basic/LangOptions.cpp | |
+index b9e8b488d9c..04ce2b64444 100644 | |
+--- a/lib/Basic/LangOptions.cpp | |
++++ b/lib/Basic/LangOptions.cpp | |
+@@ -66,6 +66,7 @@ static const SupportedConditionalValue SupportedConditionalCompilationArches[] = | |
+ "powerpc64le", | |
+ "s390x", | |
+ "wasm32", | |
++ "riscv64", | |
+ }; | |
+ | |
+ static const SupportedConditionalValue SupportedConditionalCompilationEndianness[] = { | |
+@@ -312,6 +313,9 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) { | |
+ addPlatformConditionValue(PlatformConditionKind::Arch, "arm64"); | |
+ } | |
+ break; | |
++ case llvm::Triple::ArchType::riscv64: | |
++ addPlatformConditionValue(PlatformConditionKind::Arch, "riscv64"); | |
++ break; | |
+ case llvm::Triple::ArchType::ppc64: | |
+ addPlatformConditionValue(PlatformConditionKind::Arch, "powerpc64"); | |
+ break; | |
+@@ -346,6 +350,7 @@ std::pair<bool, bool> LangOptions::setTarget(llvm::Triple triple) { | |
+ case llvm::Triple::ArchType::aarch64_32: | |
+ case llvm::Triple::ArchType::ppc64le: | |
+ case llvm::Triple::ArchType::wasm32: | |
++ case llvm::Triple::ArchType::riscv64: | |
+ case llvm::Triple::ArchType::x86: | |
+ case llvm::Triple::ArchType::x86_64: | |
+ addPlatformConditionValue(PlatformConditionKind::Endianness, "little"); | |
+diff --git a/stdlib/cmake/modules/SwiftSource.cmake b/stdlib/cmake/modules/SwiftSource.cmake | |
+index 4bc312f7f89..322e7829578 100644 | |
+--- a/stdlib/cmake/modules/SwiftSource.cmake | |
++++ b/stdlib/cmake/modules/SwiftSource.cmake | |
+@@ -520,6 +520,10 @@ function(_compile_swift_files | |
+ | |
+ list(APPEND swift_flags ${SWIFT_STDLIB_EXTRA_SWIFT_COMPILE_FLAGS}) | |
+ | |
++ if(CFLAGS_ARCH STREQUAL "riscv64") | |
++ list(APPEND swift_flags "-Xcc" "-mno-relax") | |
++ endif() | |
++ | |
+ list(APPEND swift_flags ${SWIFT_EXPERIMENTAL_EXTRA_FLAGS}) | |
+ | |
+ if(SWIFTFILE_OPT_FLAGS) | |
+diff --git a/stdlib/public/core/AtomicInt.swift.gyb b/stdlib/public/core/AtomicInt.swift.gyb | |
+index a66212f4b35..1910009c996 100644 | |
+--- a/stdlib/public/core/AtomicInt.swift.gyb | |
++++ b/stdlib/public/core/AtomicInt.swift.gyb | |
+@@ -68,7 +68,7 @@ internal func _swift_stdlib_atomicCompareExchangeStrongInt( | |
+ #if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) | |
+ let (oldValue, won) = Builtin.cmpxchg_seqcst_seqcst_Int32( | |
+ target._rawValue, expected.pointee._value, desired._value) | |
+-#elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) | |
++#elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) || arch(riscv64) | |
+ let (oldValue, won) = Builtin.cmpxchg_seqcst_seqcst_Int64( | |
+ target._rawValue, expected.pointee._value, desired._value) | |
+ #endif | |
+@@ -85,7 +85,7 @@ func _swift_stdlib_atomicLoadInt( | |
+ #if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) | |
+ let value = Builtin.atomicload_seqcst_Int32(target._rawValue) | |
+ return Int(value) | |
+-#elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) | |
++#elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) || arch(riscv64) | |
+ let value = Builtin.atomicload_seqcst_Int64(target._rawValue) | |
+ return Int(value) | |
+ #endif | |
+@@ -97,7 +97,7 @@ internal func _swift_stdlib_atomicStoreInt( | |
+ desired: Int) { | |
+ #if arch(i386) || arch(arm) || arch(arm64_32) || arch(wasm32) | |
+ Builtin.atomicstore_seqcst_Int32(target._rawValue, desired._value) | |
+-#elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) | |
++#elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) || arch(riscv64) | |
+ Builtin.atomicstore_seqcst_Int64(target._rawValue, desired._value) | |
+ #endif | |
+ } | |
+@@ -115,7 +115,7 @@ func _swift_stdlib_atomicFetch${operation}Int( | |
+ let value = _swift_stdlib_atomicFetch${operation}Int32( | |
+ object: rawTarget.assumingMemoryBound(to: Int32.self), | |
+ operand: Int32(operand)) | |
+-#elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) | |
++#elseif arch(x86_64) || arch(arm64) || arch(powerpc64) || arch(powerpc64le) || arch(s390x) || arch(riscv64) | |
+ let value = _swift_stdlib_atomicFetch${operation}Int64( | |
+ object: rawTarget.assumingMemoryBound(to: Int64.self), | |
+ operand: Int64(operand)) | |
+diff --git a/stdlib/public/core/Builtin.swift b/stdlib/public/core/Builtin.swift | |
+index 8a7bb33243a..f74f5c7b769 100644 | |
+--- a/stdlib/public/core/Builtin.swift | |
++++ b/stdlib/public/core/Builtin.swift | |
+@@ -389,7 +389,7 @@ internal var _objectPointerLowSpareBitShift: UInt { | |
+ } | |
+ | |
+ #if arch(i386) || arch(arm) || arch(wasm32) || arch(powerpc64) || arch( | |
+- powerpc64le) || arch(s390x) || arch(arm64_32) | |
++ powerpc64le) || arch(s390x) || arch(arm64_32) || arch(riscv64) | |
+ @inlinable | |
+ internal var _objectPointerIsObjCBit: UInt { | |
+ @inline(__always) get { return 0x0000_0002 } | |
+diff --git a/stdlib/public/runtime/Float16Support.cpp b/stdlib/public/runtime/Float16Support.cpp | |
+index 817739d4cdf..acc4cb93811 100644 | |
+--- a/stdlib/public/runtime/Float16Support.cpp | |
++++ b/stdlib/public/runtime/Float16Support.cpp | |
+@@ -29,8 +29,8 @@ | |
+ | |
+ // 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__)) || \ | |
+- ((defined(__i386__) || defined(__i686__) || defined(__x86_64__)) && !defined(__APPLE__)) | |
++#if ((defined(__ANDROID__) || defined(__linux__)) && defined(__arm__)) || \ | |
++ ((defined(__i386__) || defined(__i686__) || defined(__x86_64__) || defined(__riscv)) && !defined(__APPLE__)) | |
+ | |
+ #include "../SwiftShims/Visibility.h" | |
+ | |
+diff --git a/stdlib/public/runtime/HeapObject.cpp b/stdlib/public/runtime/HeapObject.cpp | |
+index 0a276206225..74589177170 100644 | |
+--- a/stdlib/public/runtime/HeapObject.cpp | |
++++ b/stdlib/public/runtime/HeapObject.cpp | |
+@@ -66,7 +66,7 @@ static inline bool isValidPointerForNativeRetain(const void *p) { | |
+ // arm64_32 is special since it has 32-bit pointers but __arm64__ is true. | |
+ // Catch it early since __POINTER_WIDTH__ is generally non-portable. | |
+ return p != nullptr; | |
+-#elif defined(__x86_64__) || defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64) || defined(__s390x__) || (defined(__powerpc64__) && defined(__LITTLE_ENDIAN__)) | |
++#elif defined(__x86_64__) || defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64) || defined(__s390x__) || (defined(__powerpc64__) && defined(__LITTLE_ENDIAN__)) || defined(__riscv) | |
+ // On these platforms, except s390x, the upper half of address space is reserved for the | |
+ // kernel, so we can assume that pointer values in this range are invalid. | |
+ // On s390x it is theoretically possible to have high bit set but in practice | |
+diff --git a/stdlib/public/stubs/MathStubs.cpp b/stdlib/public/stubs/MathStubs.cpp | |
+index 8d0617089ca..7ff97bc3687 100644 | |
+--- a/stdlib/public/stubs/MathStubs.cpp | |
++++ b/stdlib/public/stubs/MathStubs.cpp | |
+@@ -64,6 +64,7 @@ extern "C" { | |
+ (defined(__linux__) && defined(__aarch64__)) || \ | |
+ (defined(__linux__) && defined(__powerpc64__)) || \ | |
+ (defined(__linux__) && defined(__s390x__)) || \ | |
++ (defined(__linux__) && defined(__riscv)) || \ | |
+ (defined(__ANDROID__) && defined(__aarch64__)) | |
+ | |
+ SWIFT_RUNTIME_STDLIB_API | |
+diff --git a/utils/build-presets.ini b/utils/build-presets.ini | |
+index 64ba12b1e04..c2827b1212b 100644 | |
+--- a/utils/build-presets.ini | |
++++ b/utils/build-presets.ini | |
+@@ -864,6 +864,7 @@ relocate-xdg-cache-home-under-build-subdir | |
+ mixin-preset= | |
+ mixin_linux_installation | |
+ build-subdir=buildbot_linux | |
++llvm-targets-to-build=X86;ARM;AArch64;PowerPC;SystemZ;Mips;RISCV | |
+ lldb | |
+ release | |
+ test | |
+@@ -1481,7 +1482,7 @@ mixin-preset= | |
+ [preset: LLDB_Nested] | |
+ skip-build-benchmarks | |
+ install-destdir=%(swift_install_destdir)s | |
+-llvm-targets-to-build=X86;ARM;AArch64;PowerPC;SystemZ;Mips | |
++llvm-targets-to-build=X86;ARM;AArch64;PowerPC;SystemZ;Mips;RISCV | |
+ | |
+ [preset: LLDB_Swift_DebugAssert] | |
+ mixin-preset= | |
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..2785fc1f1e | |
--- /dev/null | |
+++ b/package/swift/swift.mk | |
@@ -0,0 +1,170 @@ | |
+### 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 | |
+SWIFT_CMAKE_TOOLCHAIN_FILE = $(HOST_SWIFT_SUPPORT_DIR)/linux-$(SWIFT_TARGET_ARCH)-toolchain.cmake | |
+ | |
+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),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 | |
+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 | |
+ | |
+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) \ | |
+ -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 \ | |
+ -DZLIB_LIBRARY=$(STAGING_DIR)/usr/lib/libz.so \ | |
+ -DSWIFT_PATH_TO_LIBDISPATCH_SOURCE=${LIBDISPATCH_SRCDIR} \ | |
+ -DSWIFT_ENABLE_EXPERIMENTAL_CONCURRENCY=ON \ | |
+ -DCMAKE_Swift_FLAGS="-Xcc -mno-relax" \ | |
+ -DCMAKE_Swift_FLAGS_DEBUG="" \ | |
+ -DCMAKE_Swift_FLAGS_RELEASE="" \ | |
+ -DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \ | |
+ ) | |
+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 | |
+ cp -rf $(SWIFT_BUILDDIR)/lib/swift ${STAGING_DIR}/usr/lib/ | |
+ # Generate SwiftPM cross compilation toolchain file | |
+ mkdir -p $(HOST_SWIFT_SUPPORT_DIR) | |
+ 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) | |
+ 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", "/usr/bin",' >> $(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 ' "-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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment