Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
#!/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

This comment has been minimized.

Show comment
Hide comment
@akrabat

akrabat 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

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

This comment has been minimized.

Show comment
Hide comment
@bhargavg

bhargavg Jun 5, 2016

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

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