Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/futurejones/swift-arm64
Swift for Arm64/aarch64 Servers and SBC's - Rock64, RaspberryPi3 and many more
https://github.com/futurejones/swift-arm64
raspberry-pi swift swift-development
Last synced: 12 days ago
JSON representation
Swift for Arm64/aarch64 Servers and SBC's - Rock64, RaspberryPi3 and many more
- Host: GitHub
- URL: https://github.com/futurejones/swift-arm64
- Owner: futurejones
- Created: 2018-05-05T22:59:40.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-07-02T22:51:32.000Z (4 months ago)
- Last Synced: 2024-10-14T00:06:54.676Z (about 1 month ago)
- Topics: raspberry-pi, swift, swift-development
- Language: Dockerfile
- Homepage:
- Size: 5.13 MB
- Stars: 184
- Watchers: 14
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# Swift for Arm64/AArch64 Servers and SBC's
## Latest build info from our CI server
Thanks to the great support from the [Works on Arm](https://www.worksonarm.com/) project we have received an awesome update to our CI Server!
The Cavium ThunderX from [Packet Bare Metal Servers](https://www.packet.com/cloud/servers/c1-large-arm/) who are now [Equinox Metal](https://metal.equinix.com/) has been upgraded to the latest [Ampere Altra](https://amperecomputing.com/altra/) server.
* 80 cpu cores @ 3.0GHz
* 256GB sdram
* 960GB NVME SSDWe are seeing a massive increase in overall performance and a huge reduction in build times.
## [The Swift Arm Community CI Server](https://ci.swiftlang.xyz)
### Debian 11 Bullseye
main branch [![Build Status](https://ci.swiftlang.xyz/job/swift-main-debian-bullseye/badge/icon)](https://ci.swiftlang.xyz/job/swift-main-debian-bullseye/)
release/6.0 branch [![Build Status](https://ci.swiftlang.xyz/job/swift-6.0-debian-bullseye/badge/icon)](https://ci.swiftlang.xyz/job/swift-6.0-debian-bullseye/)### Debian 12 Bookworm
main branch [![Build Status](https://ci.swiftlang.xyz/job/swift-main-debian-bookworm/badge/icon)](https://ci.swiftlang.xyz/job/swift-main-debian-bookworm/)
release/6.0 branch [![Build Status](https://ci.swiftlang.xyz/job/swift-6.0-debian-bookworm/badge/icon)](https://ci.swiftlang.xyz/job/swift-6.0-debian-bookworm/)### Ubuntu 24.04 Noble
main branch [![Build Status](https://ci.swiftlang.xyz/job/swift-main-ubuntu-noble/badge/icon)](https://ci.swiftlang.xyz/job/swift-main-ubuntu-noble/)
release/6.0 branch [![Build Status](https://ci.swiftlang.xyz/job/swift-6.0-ubuntu-noble/badge/icon)](https://ci.swiftlang.xyz/job/swift-6.0-ubuntu-noble/)# Swift-Arm64
Swift for Arm64/aarch64 Servers and SBC's - Rock64, RaspberryPi3 and many more## [The Swift Community Apt Repository](https://swiftlang.xyz)
Install packages are now available for arm64/aarch64 compatible Servers and SBC's for Ubuntu and Debian based OS's in the
new [Swift Community Apt Repository](https://swiftlang.xyz)Add repo
```bash
curl -s https://archive.swiftlang.xyz/install.sh | sudo bash
```Install Swift
```bash
sudo apt-get install swiftlang
```
For more information about the repository please see the [User Guide](https://www.swiftlang.xyz/user-guide)### Tested Servers
*Ampere Altra Mt Snow* - [Equinox Metal](https://metal.equinix.com/)
*Cavium ThunderX* - [Packet Bare Metal Servers](https://www.packet.com/cloud/servers/c1-large-arm/)
*Amazon EC2 Arm64 instances* - [AWS](https://aws.amazon.com/ec2/instance-types/a1/)
### Tested Boards and OS's*Rock64 / RockPro64* - Debian/Stretch Ubuntu/Xenial - [http://pine64.org](http://pine64.org)
*RaspberryPi 3 / 4 models* - Ubuntu 18.04 / 20.04 / 20.10 64bit
*ODROID-C2* - Ubuntu 16.04.4 LTS xenial### RaspberyPi 3 / 4 64bit OS
An official 64 bit Ubuntu install image is now available for Raspberry Pi 2/3/4.
### Ubuntu Focal available for Raspberry Pi
Download images here - https://ubuntu.com/download/raspberry-pi## Building Swift With Docker
You can now build Swift for multiple OS releases all from the same build server using Docker containers. - [Build with Docker](https://github.com/futurejones/swift-arm64/blob/master/swift-ci-docker/README.md)## Building Swift
*Swift development on AArch64 systems is currently possible on Ubuntu 16.04 and 18.04.*
*The following build instructions are for Ubuntu 16.04 and 18.04.*### Setting up the Swift development environment
* If possible start with a new clean install of Ubuntu 16.04 / 18.04 and then update and upgrade your system:
```$ sudo apt-get update```
```$ sudo apt-get upgrade```
* Install development dependencies:
```$ sudo apt-get install git cmake ninja-build clang python uuid-dev libicu-dev icu-devtools libbsd-dev libedit-dev libxml2-dev libsqlite3-dev swig libpython-dev libncurses5-dev pkg-config libblocksruntime-dev libcurl4-openssl-dev systemtap-sdt-dev tzdata rsync python-six```### CMake minimum version.
* Swift build now requires cmake version 3.15.1 or greater.
The version you have installed will depend your OS version.
To check cmake version run -
```cmake --version```
If your version is less than 3.15.2 you have 2 choices
1. Do nothing. Swift build will automatically download the cmake source code and build cmake version 3.15.1. before starting the swift build. NOTE* This will take considerable time depending on your build machine.
2. Download and install cmake 3.15.2 from swift-arm/build_tools repo
```$ curl -s https://packagecloud.io/install/repositories/swift-arm/build_tools/script.deb.sh | sudo bash```
```$ sudo apt-get install cmake```*NOTE: Minimum CMake version for Swift 5.3: is now 3.16.5*
### Getting Sources for Swift and Related Projects
* First create a directory for all of the Swift sources:
```mkdir swift-source```
```cd swift-source```* Next clone the Swift repository:
```$ git clone https://github.com/apple/swift.git```* Next use the "update-checkout" utility to clone the related repositories. When using this utility we can use either a `--tag` to specify a release or `--scheme` to specify a branch. If no tag or scheme is used then the master will be used as default.
The following command will clone and checkout all necessary repositories to build a 4.2.1 release.
```$ ./swift/utils/update-checkout --clone --tag swift-4.2.1-RELEASE```
The following command will clone and checkout all necessary repositories to build the swift-5.0-branch.
```$ ./swift/utils/update-checkout --clone --scheme swift-5.0-branch```### Applying Patches
* Some branches require additional patches for successful builds.
* swift-4.2-branch:
```$ cd swift```
```$ wget https://github.com/futurejones/swift-arm64/raw/master/swift-4.2-patches/swift-4.2-aarch64-VarArgs.patch```
```$ git apply swift-4.2-aarch64-VarArgs.patch```
```$ wget https://github.com/futurejones/swift-arm64/raw/master/swift-4.2-patches/swift-4.2-pm-fix.patch```
```$ git apply swift-4.2-pm-fix.patch```
```$ cd -```
NOTE: From v4.2.3 swift-4.2-branch no longer needs patching.
* swift-5.0-branch:
From 2019-01-30 changes have been merged with the `swift-5.0-branch` so patches are no longer required.* swift-5.2-branch:
Currently requires a patch for the swift package manager.
~~```$ cd swift```~~
~~```$ wget https://github.com/futurejones/swift-arm64/raw/master/swiftpm/triple-gnu.patch```~~
~~```$ git apply triple-gnu.patch```~~
fixed* release/5.3:
No patches required.
* master:
Currently requires a patch for the swift package manager.
~~```$ cd swift```~~
~~```$ wget https://github.com/futurejones/swift-arm64/raw/master/swiftpm/triple-gnu.patch```~~
~~```$ git apply triple-gnu.patch```~~
fixed
### Building with Ninja
* The ```build-script``` is a high-level build automation script that supports basic options such as building a Swift-compatible LLDB, building the Swift Package Manager, building for various platforms, running tests after builds, and more.
We will be using ```buildbot_linux``` presets to specify OS, install directories and package names.
*NOTE: Replace [USER] with your user name. You should also rename "swift-4.2.1-aarch64-RELEASE-Ubuntu-16.04.tar.gz" tarball to match your build if needed*
```$ ./swift/utils/build-script --preset=buildbot_linux,no_test install_destdir=/home/[USER]/swift-source/install installable_package=/home/[USER]/swift-source/install/swift-4.2.1-aarch64-RELEASE-Ubuntu-16.04.tar.gz -n```
Using the "-n" tag on the end of the command enables a "dry run" to check the commands are correct before running the actual build.
If everything is correct then you can remove "-n" and proceed with the build.
Depending on your build system the build can take from 1.5hrs to 15hrs or more.