Skip to content

Commit

Permalink
Add support for building Dispatch and Foundation statically
Browse files Browse the repository at this point in the history
 - Needed for a complete swift_static distribution!
  • Loading branch information
xtremekforever committed Feb 28, 2025
1 parent 5c7d7f5 commit e54c219
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 31 deletions.
10 changes: 9 additions & 1 deletion build-dispatch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@
set -e
source swift-define

if [ $STATIC_BUILD ]; then
LIBDISPATCH_BUILDDIR=$LIBDISPATCH_STATIC_BUILDDIR
LIBDISPATCH_INSTALL_PREFIX=$LIBDISPATCH_STATIC_INSTALL_PREFIX
BUILD_SHARED_LIBS=OFF
else
BUILD_SHARED_LIBS=ON
fi

echo "Create Dispatch build folder ${SWIFT_BUILDDIR}"
mkdir -p $LIBDISPATCH_BUILDDIR
rm -rf $LIBDISPATCH_INSTALL_PREFIX
Expand All @@ -12,7 +20,7 @@ rm -rf $LIBDISPATCH_BUILDDIR/CMakeCache.txt
LIBS="-latomic" cmake -S $LIBDISPATCH_SRCDIR -B $LIBDISPATCH_BUILDDIR -G Ninja \
-DCMAKE_INSTALL_PREFIX=${LIBDISPATCH_INSTALL_PREFIX} \
-DBUILD_TESTING=OFF \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS \
-DCMAKE_BUILD_TYPE=${SWIFT_BUILD_CONFIGURATION} \
-DCMAKE_C_COMPILER=${SWIFT_NATIVE_PATH}/clang \
-DCMAKE_CXX_COMPILER=${SWIFT_NATIVE_PATH}/clang++ \
Expand Down
68 changes: 38 additions & 30 deletions build-foundation.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,51 @@
set -e
source swift-define

if [ $STATIC_BUILD ]; then
FOUNDATION_BUILDDIR=$FOUNDATION_STATIC_BUILDDIR
FOUNDATION_INSTALL_PREFIX=$FOUNDATION_STATIC_INSTALL_PREFIX
BUILD_SHARED_LIBS=OFF
else
BUILD_SHARED_LIBS=ON
fi

echo "Create Foundation build folder ${FOUNDATION_BUILDDIR}"
mkdir -p $FOUNDATION_BUILDDIR
rm -rf $FOUNDATION_INSTALL_PREFIX
mkdir -p $FOUNDATION_INSTALL_PREFIX

echo "Configure Foundation"
echo "Configure Foundation BUILD_SHARED_LIBS=$BUILD_SHARED_LIBS"
rm -rf $FOUNDATION_BUILDDIR/CMakeCache.txt
LIBS="-latomic" cmake -S $FOUNDATION_SRCDIR -B $FOUNDATION_BUILDDIR -G Ninja \
-DCMAKE_INSTALL_PREFIX=${FOUNDATION_INSTALL_PREFIX} \
-DBUILD_TESTING=OFF \
-DBUILD_SHARED_LIBS=ON \
-DCMAKE_BUILD_TYPE=${SWIFT_BUILD_CONFIGURATION} \
-DCMAKE_C_COMPILER=${SWIFT_NATIVE_PATH}/clang \
-DCMAKE_CXX_COMPILER=${SWIFT_NATIVE_PATH}/clang++ \
-DCMAKE_C_FLAGS="${RUNTIME_FLAGS}" \
-DCMAKE_CXX_FLAGS="${RUNTIME_FLAGS}" \
-DCMAKE_C_LINK_FLAGS="${LINK_FLAGS}" \
-DCMAKE_CXX_LINK_FLAGS="${LINK_FLAGS}" \
-DCMAKE_ASM_FLAGS="${ASM_FLAGS}" \
-DCMAKE_TOOLCHAIN_FILE="${CROSS_TOOLCHAIN_FILE}" \
-DCF_DEPLOYMENT_SWIFT=ON \
-Ddispatch_DIR="${LIBDISPATCH_BUILDDIR}/cmake/modules" \
-DLIBXML2_LIBRARY=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libxml2.so \
-DLIBXML2_INCLUDE_DIR=${STAGING_DIR}/usr/include/libxml2 \
-DCURL_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libcurl.so \
-DCURL_INCLUDE_DIR="${STAGING_DIR}/usr/include" \
-DICU_I18N_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicui18n.so \
-DICU_UC_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicuuc.so \
-DICU_INCLUDE_DIR="${STAGING_DIR}/usr/include" \
-DCMAKE_Swift_FLAGS="${SWIFTC_FLAGS}" \
-DCMAKE_Swift_FLAGS_DEBUG="" \
-DCMAKE_Swift_FLAGS_RELEASE="" \
-DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \
-DSwiftFoundation_MACRO="${SWIFT_NATIVE_PATH}../lib/host/plugins/libFoundationMacros.so" \
-D_SwiftFoundation_SourceDIR="$SRC_ROOT/downloads/swift-foundation" \
-D_SwiftFoundationICU_SourceDIR="$SRC_ROOT/downloads/swift-foundation-icu" \
-D_SwiftCollections_SourceDIR="$SRC_ROOT/downloads/swift-collections" \
-DCMAKE_INSTALL_PREFIX=${FOUNDATION_INSTALL_PREFIX} \
-DBUILD_TESTING=OFF \
-DBUILD_SHARED_LIBS=$BUILD_SHARED_LIBS \
-DCMAKE_BUILD_TYPE=${SWIFT_BUILD_CONFIGURATION} \
-DCMAKE_C_COMPILER=${SWIFT_NATIVE_PATH}/clang \
-DCMAKE_CXX_COMPILER=${SWIFT_NATIVE_PATH}/clang++ \
-DCMAKE_C_FLAGS="${RUNTIME_FLAGS}" \
-DCMAKE_CXX_FLAGS="${RUNTIME_FLAGS}" \
-DCMAKE_C_LINK_FLAGS="${LINK_FLAGS}" \
-DCMAKE_CXX_LINK_FLAGS="${LINK_FLAGS}" \
-DCMAKE_ASM_FLAGS="${ASM_FLAGS}" \
-DCMAKE_TOOLCHAIN_FILE="${CROSS_TOOLCHAIN_FILE}" \
-DCF_DEPLOYMENT_SWIFT=ON \
-Ddispatch_DIR="${LIBDISPATCH_BUILDDIR}/cmake/modules" \
-DLIBXML2_LIBRARY=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libxml2.so \
-DLIBXML2_INCLUDE_DIR=${STAGING_DIR}/usr/include/libxml2 \
-DCURL_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libcurl.so \
-DCURL_INCLUDE_DIR="${STAGING_DIR}/usr/include" \
-DICU_I18N_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicui18n.so \
-DICU_UC_LIBRARY_RELEASE=${STAGING_DIR}/usr/lib/arm-linux-gnueabihf/libicuuc.so \
-DICU_INCLUDE_DIR="${STAGING_DIR}/usr/include" \
-DCMAKE_Swift_FLAGS="${SWIFTC_FLAGS}" \
-DCMAKE_Swift_FLAGS_DEBUG="" \
-DCMAKE_Swift_FLAGS_RELEASE="" \
-DCMAKE_Swift_FLAGS_RELWITHDEBINFO="" \
-DSwiftFoundation_MACRO="${SWIFT_NATIVE_PATH}../lib/host/plugins/libFoundationMacros.so" \
-D_SwiftFoundation_SourceDIR="$SRC_ROOT/downloads/swift-foundation" \
-D_SwiftFoundationICU_SourceDIR="$SRC_ROOT/downloads/swift-foundation-icu" \
-D_SwiftCollections_SourceDIR="$SRC_ROOT/downloads/swift-collections" \

echo "Build Foundation"
(cd $FOUNDATION_BUILDDIR && ninja)
Expand Down
2 changes: 2 additions & 0 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ rm -rf $STAGING_DIR/usr/lib/swift*
# Build Swift
./build-swift-stdlib.sh
./build-dispatch.sh
STATIC_BUILD=1 ./build-dispatch.sh
./build-foundation.sh
STATIC_BUILD=1 ./build-foundation.sh
./build-xctest.sh

# Enable Swift Testing for 6.0 and later
Expand Down
10 changes: 10 additions & 0 deletions deploy-to-sysroot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,19 @@ source swift-define
echo "Install Dispatch to sysroot"
cp -rf ${LIBDISPATCH_INSTALL_PREFIX}/* ${STAGING_DIR}/usr/

if [ $LIBDISPATCH_STATIC_INSTALL_PREFIX ]; then
echo "Install Dispatch Static to sysroot"
cp -rf ${LIBDISPATCH_STATIC_INSTALL_PREFIX}/* ${STAGING_DIR}/usr/
fi

echo "Install Foundation to sysroot"
cp -rf ${FOUNDATION_INSTALL_PREFIX}/* ${STAGING_DIR}/usr/

if [ $FOUNDATION_STATIC_INSTALL_PREFIX ]; then
echo "Install Foundation Static to sysroot"
cp -rf ${FOUNDATION_STATIC_INSTALL_PREFIX}/* ${STAGING_DIR}/usr/
fi

echo "Install XCTest to sysroot"
cp -rf ${XCTEST_INSTALL_PREFIX}/* ${STAGING_DIR}/usr/

Expand Down
1 change: 1 addition & 0 deletions fetch-sources.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ fi
# Apply patches
echo "Apply CXX interop patch"
patch -d . -p1 <$SRC_ROOT/patches/0001-Swift-fix-find-libstdc++-for-cxx-interop.patch
patch -d . -p1 <$SRC_ROOT/patches/0002-Add-arm-to-float16support-for-missing-symbol.patch

# Only applies to Swift 5.9
if [[ $SWIFT_VERSION == *"5.9"* ]]; then
Expand Down
25 changes: 25 additions & 0 deletions patches/0002-Add-arm-to-float16support-for-missing-symbol.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
From 59b301cf43388999cc230814043a9720710533e5 Mon Sep 17 00:00:00 2001
From: "Jesse L. Zamora" <[email protected]>
Date: Fri, 28 Feb 2025 15:27:33 -0500
Subject: [PATCH] Add __arm__ to Float16Support for missing symbol

---
stdlib/public/runtime/Float16Support.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/stdlib/public/runtime/Float16Support.cpp b/stdlib/public/runtime/Float16Support.cpp
index fa259559e45..dfa9c9876de 100644
--- a/stdlib/public/runtime/Float16Support.cpp
+++ b/stdlib/public/runtime/Float16Support.cpp
@@ -31,7 +31,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__)) || \
- ((defined(__i386__) || defined(__i686__) || defined(__x86_64__)) && !defined(__APPLE__))
+ ((defined(__i386__) || defined(__i686__) || defined(__arm__) || defined(__x86_64__)) && !defined(__APPLE__))

#include "swift/shims/Visibility.h"

--
2.43.0

4 changes: 4 additions & 0 deletions swift-define
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,13 @@ STRING_PROCESSING_SRCDIR=$SRC_ROOT/downloads/swift-experimental-string-processin
LIBDISPATCH_SRCDIR=$SRC_ROOT/downloads/swift-corelibs-libdispatch
LIBDISPATCH_BUILDDIR=$SRC_ROOT/build/libdispatch-linux-$SWIFT_TARGET_ARCH
LIBDISPATCH_INSTALL_PREFIX=$SRC_ROOT/build/libdispatch-linux-$SWIFT_TARGET_ARCH-install
LIBDISPATCH_STATIC_BUILDDIR=$SRC_ROOT/build/libdispatch-linux-$SWIFT_TARGET_ARCH-static
LIBDISPATCH_STATIC_INSTALL_PREFIX=$SRC_ROOT/build/libdispatch-linux-$SWIFT_TARGET_ARCH-static-install
FOUNDATION_SRCDIR=$SRC_ROOT/downloads/swift-corelibs-foundation
FOUNDATION_BUILDDIR=$SRC_ROOT/build/foundation-linux-$SWIFT_TARGET_ARCH
FOUNDATION_INSTALL_PREFIX=$SRC_ROOT/build/foundation-linux-$SWIFT_TARGET_ARCH-install
FOUNDATION_STATIC_BUILDDIR=$SRC_ROOT/build/foundation-linux-$SWIFT_TARGET_ARCH-static
FOUNDATION_STATIC_INSTALL_PREFIX=$SRC_ROOT/build/foundation-linux-$SWIFT_TARGET_ARCH-static-install
XCTEST_SRCDIR=$SRC_ROOT/downloads/swift-corelibs-xctest
XCTEST_BUILDDIR=$SRC_ROOT/build/xctest-linux-$SWIFT_TARGET_ARCH
XCTEST_INSTALL_PREFIX=$SRC_ROOT/build/xctest-linux-$SWIFT_TARGET_ARCH-install
Expand Down

0 comments on commit e54c219

Please sign in to comment.