Skip to content

Instantly share code, notes, and snippets.

@mxcl
Last active April 21, 2023 17:13
Show Gist options
  • Star 23 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save mxcl/05ced0268bbd5db6ab0c to your computer and use it in GitHub Desktop.
Save mxcl/05ced0268bbd5db6ab0c to your computer and use it in GitHub Desktop.
#!/bin/bash
#
# Faster toolchain build: skips as much as possible.
#
# To use this toolchain from the command line:"
# export TOOLCHAINS=$(whoami)
#
# we build to the same prefix every time (instead of building
# to a versioned prefix) because every time the prefix changes
# *everything* rebuilds.
set -e
trap "exit;" SIGINT SIGTERM
SRCROOT="$HOME/src"
ALIAS=$(whoami)
TOOLCHAIN_NAME="swift-${ALIAS}.xctoolchain"
TOOLCHAIN_PREFIX="$HOME/Library/Developer/Toolchains/${TOOLCHAIN_NAME}"
export TOOLCHAINS=default
if [[ $1 == "--reconfigure" ]]; then
RECONFIGURE="--reconfigure"
fi
# so if anything is put in the wrong place we will *see* it
cd "$HOME/Desktop"
"$SRCROOT/swift/utils/build-script" \
--release \
--llvm \
--llbuild \
--swiftpm \
--build-subdir="${ALIAS}" \
--assertions \
--no-swift-stdlib-assertions \
--install-prefix="${TOOLCHAIN_PREFIX}/usr" \
--lldb \
--darwin-xcrun-toolchain=mxcl \
-- \
--lldb-use-system-debugserver \
${RECONFIGURE} \
--skip-ios \
--skip-tvos \
--skip-watchos \
--skip-build-linux \
--skip-build-freebsd \
--skip-build-cygwin \
--skip-build-ios \
--skip-build-ios-device \
--skip-build-ios-simulator \
--skip-build-tvos \
--skip-build-tvos-device \
--skip-build-tvos-simulator \
--skip-build-watchos \
--skip-build-watchos-device \
--skip-build-watchos-simulator \
--skip-build-xctest \
--skip-build-foundation \
--skip-build-libdispatch \
--skip-build-benchmarks \
--skip-test-cmark \
--skip-test-lldb \
--skip-test-swift \
--skip-test-llbuild \
--skip-test-swiftpm \
--skip-test-xctest \
--skip-test-foundation \
--skip-test-libdispatch \
--skip-test-linux \
--skip-test-freebsd \
--skip-test-cygwin \
--skip-test-osx \
--skip-test-ios-simulator \
--skip-test-ios-host \
--skip-test-tvos-simulator \
--skip-test-tvos-host \
--skip-test-watchos-simulator \
--skip-test-watchos-host \
--skip-test-benchmarks \
--skip-test-optimized \
--swift-sdks=OSX \
--swift-enable-ast-verifier=0 \
--build-swift-examples=0 \
--build-swift-stdlib-unittest-extra=0 \
--build-swift-static-stdlib=1 \
--compiler-vendor=apple \
--swift-install-components="compiler;clang-builtin-headers;stdlib;sdk-overlay;license;sourcekit-xpc-service" \
--llvm-install-components="libclang;libclang-headers" \
--install-swift=1 \
--install-llbuild=1 \
--install-swiftpm=1 \
--install-destdir="/" \
--install-lldb=1 \
--toolchain-prefix="${TOOLCHAIN_PREFIX}"
# doing by hand as the only other way to trigger this
# is by specifying --installable-package, which tars
# all installed products and is super slow
DATE=$(date +%Y.%m.%d)
SWIFT_VERSION=$("${TOOLCHAIN_PREFIX}/usr/bin/swift" --version | ruby -e 'ARGF.read =~ /Swift version (\d+\.\d(\.\d+)?(-.*?)?) /; print "#{$1}\n"')
if [[ "$SWIFT_VERSION" == "3.0-dev" ]]; then
SWIFT_VERSION="3.0.0-dev"
fi
VERSION="${SWIFT_VERSION}-${ALIAS}+${DATE}"
cat > "${TOOLCHAIN_PREFIX}/Info.plist" <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Aliases</key>
<array>
<string>${ALIAS}</string>
</array>
<key>CompatibilityVersion</key>
<integer>2</integer>
<key>CFBundleIdentifier</key>
<string>org.swift.${SWIFT_VERSION}.${ALIAS}</string>
<key>DisplayName</key>
<string>Swift ${SWIFT_VERSION}.${ALIAS}+${DATE}</string>
<key>ReportProblemURL</key>
<string>https://bugs.swift.org/</string>
<key>Version</key>
<string>${DATE}</string>
<key>OverrideEnvironment</key>
<dict>
<key>ENABLE_BITCODE</key>
<false/>
<key>SWIFT_DISABLE_REQUIRED_ARCLITE</key>
<true/>
<key>SWIFT_LINK_OBJC_RUNTIME</key>
<true/>
</dict>
</dict>
</plist>
EOF
# again, only way to trigger this otherwise is do a lengthy --installable-package step
cp "${SRCROOT}/swift/utils/swift-stdlib-tool-substitute" "${TOOLCHAIN_PREFIX}/usr/bin/swift-stdlib-tool"
@akrabat
Copy link

akrabat commented Jun 2, 2016

Note that with latest master (on 2 June 2016 anyway), --swift-sdks=OSX \ now needs to be --stdlib-deployment-targets=macosx-x86_64 \ as per apple/swift@9d822cd

@bhargavg
Copy link

bhargavg commented Jun 5, 2016

@akrabat, even with that change is this script working? It's failing for me when trying to install swift.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment