[swift-build-dev] Building custom toolchain

bhargav gurlanka bhargav.grlnk at gmail.com
Thu Jun 2 05:12:58 CDT 2016


Hi all,

I'm trying to build a custom toolchain, but it is failing with error:

--- Installing swift ---
+ env DESTDIR=// /usr/local/bin/cmake --build
/Users/bhargavg/Documents/workspaces/xcode/github/apple/build/bhargavg/swift-macosx-x86_64
-- install
ninja: error: unknown target 'install'
swift/utils/build-script: fatal error: command terminated with a non-zero
exit status 1, aborting


Script to build toolchain:

#!/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/Documents/workspaces/xcode/github/apple/"

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 \
        --stdlib-deployment-targets=macosx-x86_64 \
        --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"



You can find the script at:
https://gist.github.com/bhargavg/e40b2e7cfe3b34ca5decdb6531068365

Regards,
Bhargav Gurlanka
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-build-dev/attachments/20160602/ea5abb93/attachment.html>


More information about the swift-build-dev mailing list