Building the Swift compiler and Foundation on Linux

25 Apr 2016  Swift

Before building the Swift compiler it might be a good idea to check to verify the build is currently passing. And to free up as much memory as possible first you can shut down the graphical interface with sudo service lightdm stop.

(has been tested on Ubuntu 15.10):

#!/usr/bin/env bash

# exit at the first sign of trouble
set -e

sudo apt-get update
sudo apt-get install -y build-essential wget clang libedit-dev python2.7 python2.7-dev rsync libxml2 git
sudo apt-get install -y cmake ninja-build python uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config

#If on Ubuntu 14.04 LTS, upgrade the clang compiler for C++14 support and create a symlink:
#sudo apt-get install clang-3.6
#sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.6 100
#sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.6 100

mkdir swift
cd swift
git clone
swift/utils/update-checkout --clone


… and then do something else for a while. On an iMac 2011 quad core with 16 GB of memory running a fresh install of Ubuntu 15.10 with no GUI it took 3 hours.

If you’re going to work on Foundation you will want to replace the last line with this:

swift/utils/build-script --xctest --foundation -t
cd swift-corelibs-foundation

Then just run ninja to build your changes and ninja test to test. Thankfully this is a lot faster than building swift.