(Cross-) Compilación de Swift para Raspberry PI
raspberry-pi raspberry-pi2 (2)
El administrador de paquetes Swift obtuvo soporte personalizado para la cadena de herramientas a través de PR-1098 finales de abril de 2017.
Escribí instrucciones detalladas sobre cómo construir una cadena de herramientas de RaspberryPi aquí: macOS -> RasPi Cross Compilation Toolchain e incluso lo contrario ( compile los binarios de macOS en una RaspberryPi ) por el gusto de hacerlo. Lo mismo funcionaría para Intel-Linux a ARM-Linux con modificaciones mínimas. El repositorio de SwiftPM contiene una secuencia de comandos de ejemplo sobre cómo hacer esto para Intel-macOS a Intel-Ubuntu.
Puede encontrar una actualización 2017-05-01 en Swift-on-ARM aquí: Una actualización en Swift 3.1.1 para Raspberry Pi Zero / 1/2/3 .
Como un pequeño resumen, para que esta respuesta no sea solo los enlaces ;-), estado ARM 2017-05-16:
- puede compilar Swift 3.1 / 3.1.1 en RaspberryPi Ubuntu
- no olvide configurar swap, se requieren algunos parches mínimos para 3.1.1. El disco de 8GB puede ser un poco demasiado pequeño.
- La compilación en Raspbian no parece funcionar todavía (la última versión conocida es 3.0.2)
- puede compilar de forma cruzada Swift utilizando una cadena de herramientas personalizada, que es razonablemente fácil de configurar
- necesitas una instantánea de SwiftPM (Swift 4) para esto (pero la propia cadena de herramientas puede ser 3.1 o incluso 3.0.2 con cambios menores)
- también puede ejecutar (y compilar) Swift a través de Docker , por ejemplo, en HypriotOS.
- hay un grupo Slack para Swift ARM:
swift-arm
Swift es ahora Open Source. ¿Alguien intentó compilar Swift para una Raspberry PI? Comencé a hacerlo, pero mi tarjeta SD de 8 GB parece ser demasiado pequeña para eso;) ¿Es posible compilarlo desde Ubuntu?
Una tarjeta SD de 8GB funciona bien, pero necesitará extender el volumen raíz. Lo tengo funcionando y el espacio utilizado en /dev/root
partición /dev/root
es de alrededor de 3.1GB.
Los pasos a continuación se basan en la publicación del blog de Andrew Madsen con un poco de atención adicional en los pasos dentro de fdisk
.
Obtener Ubuntu
Descargue una imagen de Ubuntu 14.04 para Raspberry Pi 2 de finnie.org y finnie.org en la tarjeta SD. Arranca la frambuesa pi.
Cambiar la particion
Inicie sesión en la Raspberry Pi y cambie el tamaño de la partición. El tamaño predeterminado para /dev/root
es 1.7G con 1.1G disponible. Eso no es suficiente.
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 1.7G 540M 1.1G 35% /
devtmpfs 458M 4.0K 458M 1% /dev
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 93M 228K 93M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 462M 0 462M 0% /run/shm
none 100M 0 100M 0% /run/user
/dev/mmcblk0p1 64M 20M 45M 31% /boot/firmware
Corre fdisk
sudo fdisk /dev/mmcblk0
Cuando se le solicite, ingrese p
para ''imprimir la tabla de particiones''. Hay dos particiones
/dev/mmcblk0p1 * 2048 133119 65536 c W95 FAT32 (LBA)
/dev/mmcblk0p2 133120 3670015 1768448 83 Linux
Cuando se le solicite, ingrese d
(para eliminar), luego 2
. Luego, vuelva a crear la partición ingresando n
, luego p
, luego 2
, luego presione enter en las siguientes dos solicitudes aceptando los valores predeterminados.
Vuelva a ingresar p
y verá que la segunda partición ahora es más grande, ahora se usa todo el espacio en una tarjeta de 8GB.
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 133119 65536 c W95 FAT32 (LBA)
/dev/mmcblk0p2 133120 15523839 7695360 83 Linux
Ingrese w
para escribir los cambios en el disco, luego reinicie
sudo reboot
Cambiar el tamaño de la partición
Después del reinicio, cambie el tamaño del sistema de archivos de la partición ejecutando
sudo resize2fs /dev/mmcblk0p2
Espacio de intercambio
Configurar un archivo de intercambio haciendo
sudo apt-get install dphys-swapfile
Instala libicu-dev y clang-3.6
sudo apt-get install libicu-dev clang-3.6
Use las alternativas de actualización para proporcionar los enlaces / usr / bin para clang y clang ++:
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
Luego, agregue la clave del repositorio de @ iachievedit:
wget -qO- http://dev.iachieved.it/iachievedit.gpg.key | sudo apt-key add -
Agregue el repositorio apropiado a sources.list:
echo "deb [arch=armhf] http://iachievedit-repos.s3.amazonaws.com/ trusty main" | sudo tee --append /etc/apt/sources.list
Ejecutar apt-get update:
sudo apt-get update
Instalar Swift
sudo apt-get install swift-2.2
Una vez completada la instalación, ¡está listo para compilar los programas Swift!
Escribe Swift
Abra su editor de texto favorito, escriba un programa y guárdelo (por ejemplo, en "hello.swift"):
let device = "Raspberry Pi 2!"
print("Hello from Swift on /(device)")
Compilarlo
swiftc hello.swift
y ejecutarlo:
./hello
Hello from Swift on Raspberry Pi 2!
¡Eso es! Swift corriendo en Raspberry Pi