-
-
Save griotspeak/abdc6dc3bddfaa5a047dae4e2931eb84 to your computer and use it in GitHub Desktop.
This is the script I currently use on OS X to get a working "swift-dev.xctoolchain" out of a built Swift. It isn't designed to work for anyone but me, but it should be easy to adapt. I always run this after every build, and then use `TOOLCHAINS=swift-dev swift build` (etc) to use the development compiler.
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
#!/bin/sh | |
#################################################### | |
# HEY! set SWIFT_SOURCE_PATH or nothing will work. # | |
#################################################### | |
set -e | |
if [ -z "${SWIFTPM_CONFIGURATION}" ]; then | |
SWIFTPM_CONFIGURATION=lib/swift/pm/4 | |
fi | |
if [ -z "${CONFIGURATION}" ]; then | |
CONFIGURATION=release | |
fi | |
if [ -z "${SWIFT_SOURCE_PATH}" ]; then | |
SWIFT_SOURCE_PATH=~/Desktop/Swift | |
fi | |
# Create the development toolchain. | |
rm -rf ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain | |
mkdir -p ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/bin | |
if ! /usr/libexec/PlistBuddy -c "Add CFBundleIdentifier string 'swift-dev'" "${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/Info.plist" > /dev/null; then | |
echo "error: unable to create Info.plist" | |
exit 1 | |
fi | |
if ! /usr/libexec/PlistBuddy -c "Add CompatibilityVersion integer 2" "${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/Info.plist" > /dev/null; then | |
echo "error: unable to create Info.plist" | |
exit 1 | |
fi | |
# Install the `swift` provided binaries. | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/bin/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/bin/swift \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/bin/swiftc \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/bin/swift-demangle \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/bin | |
# Install the `swiftpm` provided binaries. | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swiftpm-macosx-x86_64/${CONFIGURATION}/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swiftpm-macosx-x86_64/${CONFIGURATION}/swift-build \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swiftpm-macosx-x86_64/${CONFIGURATION}/swift-package \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swiftpm-macosx-x86_64/${CONFIGURATION}/swift-test \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/bin/ | |
# Install the `llbuild` provided binaries. | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/llbuild-macosx-x86_64/bin/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/llbuild-macosx-x86_64/bin/swift-build-tool \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/bin/ | |
# Install fake versions of `lldb` and `lldb-mi`. | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/llbuild-macosx-x86_64/bin/ \ | |
$(which false) \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/bin/lldb | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/llbuild-macosx-x86_64/bin/ \ | |
$(which false) \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/bin/lldb-mi | |
# Install the `swiftpm` runtime libraries. | |
mkdir -p ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/pm/ | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swiftpm-macosx-x86_64/${CONFIGURATION}/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swiftpm-macosx-x86_64/${SWIFTPM_CONFIGURATION}/libPackageDescription.dylib \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swiftpm-macosx-x86_64/${SWIFTPM_CONFIGURATION}/PackageDescription.swiftmodule \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/pm/ | |
# Install the `clang` runtime data. | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/llvm-macosx-x86_64/lib/libclang.dylib \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/llvm-macosx-x86_64/lib/libclang.dylib \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/ | |
# Install the standard libraries. | |
mkdir -p ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/macosx/ | |
rsync -a \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/macosx/ \ | |
$(ls ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/macosx/*.dylib | \ | |
grep -v SwiftPrivate | \ | |
grep -v StdlibUnittest | \ | |
grep -v SwiftReflectionTest | \ | |
grep -v SwiftExperimental) \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/macosx/ | |
rsync -a \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/macosx/x86_64/ \ | |
$(ls ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/macosx/x86_64/*.swiftdoc | \ | |
grep -v SwiftPrivate | \ | |
grep -v StdlibUnittest | \ | |
grep -v SwiftReflectionTest | \ | |
grep -v SwiftExperimental) \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/macosx/x86_64/ | |
rsync -a \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/macosx/x86_64/ \ | |
$(ls ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/macosx/x86_64/*.swiftmodule | \ | |
grep -v SwiftPrivate | \ | |
grep -v StdlibUnittest | \ | |
grep -v SwiftReflectionTest | \ | |
grep -v SwiftExperimental) \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/macosx/x86_64/ | |
rsync -a \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/macosx/x86_64/ \ | |
$(ls ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/macosx/x86_64/*.apinotesc | \ | |
grep -v SwiftPrivate | \ | |
grep -v StdlibUnittest | \ | |
grep -v SwiftReflectionTest | \ | |
grep -v SwiftExperimental) \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/macosx/x86_64/ | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/sourcekitd.framework/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/sourcekitd.framework/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/sourcekitd.framework/ | |
# Install the `clang` symlink. | |
rsync -ar \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/clang \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/clang | |
rsync -ar \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/shims/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/swift/shims/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/swift/shims/ | |
rsync -a \ | |
--link-dest ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/ \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-macosx-x86_64/lib/lib*Demangle.dylib \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/lib/ | |
# Copy over `swift-stdlib-tool`. | |
cp $(xcrun --find swift-stdlib-tool) \ | |
${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain/usr/bin/ | |
read -p "Would you like to move this to /Library/Developer/Toolchains; you must restart Xcode: (y/n)? " answer | |
case ${answer:0:1} in | |
y|Y ) | |
sudo mkdir -p /Library/Developer/Toolchains; | |
sudo cp -r ${SWIFT_SOURCE_PATH}/build/Ninja-ReleaseAssert/swift-dev.xctoolchain /Library/Developer/Toolchains/swift-dev.xctoolchain; | |
;; | |
* ) | |
exit | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment