All Projects → uraimo → Buildswiftonarm

uraimo / Buildswiftonarm

All you need to build Swift on a RaspberryPi or other ARM boards, updated to Swift 5.1.5

Programming Languages

shell
77523 projects
swift
15916 projects

Projects that are alternatives of or similar to Buildswiftonarm

Piadvanced
This started as a custom install for my pihole!
Stars: ✭ 144 (-67.86%)
Mutual labels:  raspberrypi, ubuntu, debian
Mobilenet Ssd Realsense
[High Performance / MAX 30 FPS] RaspberryPi3(RaspberryPi/Raspbian Stretch) or Ubuntu + Multi Neural Compute Stick(NCS/NCS2) + RealSense D435(or USB Camera or PiCamera) + MobileNet-SSD(MobileNetSSD) + Background Multi-transparent(Simple multi-class segmentation) + FaceDetection + MultiGraph + MultiProcessing + MultiClustering
Stars: ✭ 322 (-28.12%)
Mutual labels:  raspberrypi, ubuntu, raspbian
Raspberrypi Ua Netinst
RaspberryPi (minimal) unattended netinstaller
Stars: ✭ 179 (-60.04%)
Mutual labels:  raspberrypi, debian, raspbian
Pieman
Script for creating custom OS images for single-board computers
Stars: ✭ 149 (-66.74%)
Mutual labels:  ubuntu, debian, raspbian
Tensorflow Bin
Prebuilt binary with Tensorflow Lite enabled (native build). For RaspberryPi / Jetson Nano. And, solved Tensorflow issues #15062,#21574,#21855,#23082,#25120,#25748,#29617,#29704,#30359. Support for custom operations in MediaPipe.
Stars: ✭ 349 (-22.1%)
Mutual labels:  raspberrypi, debian, raspbian
Tmoe Linux
🍭Without any basic knowledge of linux shell,you can easily install and configure a GNU/Linux graphical desktop environment on 📱Android termux and 💻WSL .🍰You can also run VSCode on your android phone.🍹Graphical qemu manager,🐋support running docker on Android.配置WSL和安卓手机的linux容器,桌面环境,主题美化,远程桌面,音频服务,镜像源,uefi开机启动项,webdav(nginx),fcitx输入法以及qemu-system虚拟机...
Stars: ✭ 149 (-66.74%)
Mutual labels:  ubuntu, debian, raspbian
Raspberrypi tempmon
Raspberry pi CPU temperature monitor with many functions such as logging, GPIO output, graphing, email, alarm, notifications and stress testing. Python 3.
Stars: ✭ 52 (-88.39%)
Mutual labels:  arm, raspberrypi, raspbian
Hardware
The devices I have, what runs on them, their configurations, issues, solutions, and associated projects
Stars: ✭ 67 (-85.04%)
Mutual labels:  ubuntu, debian, raspbian
Piwheels
Python package repository providing wheels (pre-built binaries) for Raspberry Pi
Stars: ✭ 180 (-59.82%)
Mutual labels:  arm, raspberrypi, raspbian
Build
Armbian Linux build framework
Stars: ✭ 1,827 (+307.81%)
Mutual labels:  arm, ubuntu, debian
Nginx Ee
Automated Nginx compilation from sources with additional modules support. Compatible with WordOps, EasyEngine & Plesk
Stars: ✭ 132 (-70.54%)
Mutual labels:  ubuntu, debian, raspbian
dist-detect
Try to determine what Linux/Unix distribution is running on a remote host and get a hint if security updates are applied.
Stars: ✭ 14 (-96.87%)
Mutual labels:  debian, ubuntu, raspbian
Pihole Panel
Python/GTK3 based Pi-hole (network-level adblocker) dashboard for stats and more
Stars: ✭ 125 (-72.1%)
Mutual labels:  ubuntu, debian, raspbian
Slickstack
SlickStack is a free LEMP stack automation script written in Bash designed to enhance and simplify WordPress provisioning, performance, and security.
Stars: ✭ 311 (-30.58%)
Mutual labels:  ubuntu, debian, raspbian
Dockstarter
DockSTARTer helps you get started with home server apps running in Docker.
Stars: ✭ 1,265 (+182.37%)
Mutual labels:  ubuntu, debian, raspbian
Piku
The tiniest PaaS you've ever seen. Piku allows you to do git push deployments to your own servers.
Stars: ✭ 902 (+101.34%)
Mutual labels:  arm, ubuntu, raspbian
Atomic Toolkit
AtoMiC Toolkit simplifies HTPC / Home Server setup and management on Ubuntu and Debian variants including Raspbian. It currently supports: Couchpotato, Deluged, Emby, FFmpeg, Headphones, Htpcmanager, Jackett, Kodi, Lazylibrarian, Madsonic, Mono, Mylar, Nzbget, Nzbhydra, NzbToMedia, Ombi, Plex, Plexpy, Pyload, qBittorrent, Radarr, Sabnzbd+, Sickgear, Sickrage, Sonarr, Subsonic, Transmission, Unrar, Watcher, and Webmin.
Stars: ✭ 747 (+66.74%)
Mutual labels:  ubuntu, debian, raspbian
Spocon
SpoCon - A Spotify Connect Client for Debian , Ubuntu and Raspberry Pi based on librespot-java
Stars: ✭ 51 (-88.62%)
Mutual labels:  ubuntu, debian, raspbian
Nwjs rpi
[NW.js port for Raspberry Pi] binary compiled for the ARMv6 used in Raspberry Pi (compatible with RPi 2 and RPi 3)
Stars: ✭ 91 (-79.69%)
Mutual labels:  arm, raspberrypi, raspbian
Bazel bin
Bazel's pre-built binaries for armv7l / aarch64 / x86_64.
Stars: ✭ 23 (-94.87%)
Mutual labels:  debian, raspberrypi, raspbian

Scripts to clone, configure, patch and build Swift 5.1.3 on Linux ARM devices.

For precompiled Swift 5.1.3 binaries see the Prebuilt binaries section, if you want to build Swift on your own instead, check out the Building on ARM section and the step-by-step instructions.

Summary

Supported Architectures

  • ✅ ARMv6 32bit: Original RaspberryPi, Pi Zero, etc...
  • ✅ ARMv7/8 32bit: All versions of RaspberryPi 2/3, OrangePi, ODroid, CHIP, etc...
  • ✅ aarch64: RaspberryPis or other ARMv8 boards with a 64 bit OS, Pine64, etc...

Prebuilt binaries

OS Architecture Boards Download
Raspbian Stretch ARMv6 All RaspberryPis: Classic, Zero, 2, 3 5.1.5
Raspbian Buster ARMv6 All RaspberryPis: Classic, Zero, 2, 3, 4 5.1.5
Debian Stretch ARMv7 Every ARMv7 board, RaspberryPis 2/3 included 5.1.5
Debian Buster ARMv7 Every ARMv7 board, RaspberryPis 2/3/4 included 5.1.5
Ubuntu 16.04 ARMv7 All versions of RaspberryPi 2/3, other ARMv7 boards 5.1.5
Ubuntu 18.04 ARMv7 All versions of RaspberryPi 2/3/4, other ARMv7 boards 5.1.5
Ubuntu 16.04/18.04 aarch64 All versions of RaspberryPi 3/4, other ARMv7 boards 5.1.3: swift-arm64
Fedora/CentOS/RHEL aarch64 All versions of RaspberryPi 3/4, other ARMv7 boards 5.1.4: sudo dnf install swift-lang

For binaries of older releases, check out the releases page.

For alternative ways to install these Swift binaries on your ARM board, check out Swift on Balena by Will Lisac, Helge Heß's dockSwiftOnARM, both based on Docker, and the Swift Deb Repository maintained by Neil Jones.

To quickly cross-compile your Swift applications for ARM on a Mac (a time saver) check out the Swift Cross Compilation Toolchains project built by Van Simmons.

Usage

When using the Swift Package Manager on one of these boards, that usually have limited memory/cpu, you'll need to use the new -j option to reduce the number of threads spawned by the tool and be able to compile. For example, when building an SPM project most of the times we'll limit the number of jobs to one:

    [email protected]:> swift build -j 1 

Dependencies

In order to use the provided prebuilt binaries you'll need to install the following dependencies:

Raspbian Stretch and Ubuntu 16.04

sudo apt install clang-3.8 libicu-dev libcurl4-nss-dev
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 100
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 100

Raspbian Buster, Ubuntu 18.04 and newer

sudo apt install clang libicu-dev libcurl4-nss-dev curl

Decompress the archive on the RaspberryPi, you'll find the Swift binaries in usr/bin/ relative to where you decompressed the archive.

tar -xzf <archivename.tgz>

Ensure that the path you decompressed to is in your PATH environment variable: echo $PATH. If it's not then add it to your path for your shell.

PATH="$HOME/usr/bin:$PATH"

To permanently add this to your PATH variable, you can add the following block of code to the end of your ~/.profile file:

if [ -d "$HOME/usr/bin" ] ; then
    PATH="$HOME/usr/bin:$PATH"
fi

Verify the swift version is setup:

$ swift --version

Swift version 5.1.3 (swift-5.1.3-RELEASE)
Target: armv7-unknown-linux-gnueabihf

Building on ARM

For the latest updates on Swift on ARM, check out my blog here.

Check out Helge Heß's project dockSwiftOnARM to build Swift in a Docker container or to build a cross-compiling toolchain that will allow you to build arm binaries directly from your Mac using a precompiled swiftc for ARM.

The scripts that buildSwiftOnARM provides:

  • clone.sh - Install dependencies and clones the main Swift repository and all the related projects

  • checkoutRelease.sh - Resets all repos, updates them, checks out a specific tag (5.1.3 at the moment) and apply the patches.

  • build.sh - Builds Swift producing a tgz archive with the Swift distributions.

  • clean.sh - Cleans all build artifacts, only needed when you want to start again from scratch.

Step by step instructions

First of all, use a suitably sized sd-card, at least 32Gb in size, but I recommend to use an external USB drive to clone the project and build Swift.

Configure a swap file of at least 2Gb, on Ubuntu:

sudo fallocate -l 2G swapfile
sudo chmod 600 swapfile
sudo mkswap swapfile
sudo swapon swapfile

You'll need to manually enable the swap file with swapon each time you reboot the RaspberryPi (or the system will just run without swap).

On Raspbian, since the swapfile is already configured, open /etc/dphys-swapfile and edit CONF_SWAPSIZE to increase the size:

CONF_SWAPSIZE=2048

Save the file and:

sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

Now, call the included scripts as follows:

  1. Launch clone.sh that will install the required dependencies (git cmake ninja-build clang-3.8 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 autoconf libtool systemtap-sdt-dev libcurl4-openssl-dev libz-dev), fix clang links and clone apple/swift with all its dependecies.

  2. Run checkoutRelease.sh that will select the current release (5.1.3) and apply the needed patches.

  3. Once done, start the build with build.sh.

  4. Once the build completes a few hours later, you'll have a swift-5.1.3-armv7.tgz archive containing the whole Swift compiler distribution. Once decompressed you'll find the Swift binaries under usr/bin.

I recommend to perform all these operations in a permanent background tmux or screen session (CTRL+B d to detach from the session and tmux a to reattach to it when you ssh again into the RaspberryPi).

Additional steps could be required in some cases check the latest ARM posts on my blog for additional info.

To build a different release than the one currently configured in the script, open checkoutRelease.sh and build.sh and modify the variables on top, with the branch name for the release and the release name for the tgz respectively.

Setup your own build infrastructure

If you need to replicate a setup like the one I use to build all the Swift binaries you can find above, using only a single Raspberry Pi 4 or a similar board ARMv7 board as build machine, check out buildSwiftOnARMInfra with its docker containers.

GitHub CI on ARM

ARM projects can be tested in an environment simulated through QEMU on GitHub using the Run-On-Architecture action. While you will not be able to use hardware interfaces available on real ARM boards, this environment should be more than enough to perform some basic testing or even build your projects and deploy them directly to your target ARM board (with considerable time savings).

REPL Issues

Since the first releases of Swift on ARM32, the REPL has never been available on this platform, but that doesn't impact the compiler itself. Considering this, as you would expect, launching swift without parameters will result in an error instead of the REPL prompt.

Acknowledgments

We wouldn't have Swift on ARM and most of the patches included on buildSwiftOnARM without the work done by these developers:

The community can be reached at the swift-arm Slack channel.

Previous Releases

You can compile old releases checking out the specific tag:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].