(Кросс-компиляция) Swift для малины PI

Swift теперь является Open Source. Кто-нибудь пытался собрать Swift для малины PI? Я начал делать, но моя 8-Гбайт SD-карта кажется слишком маленькой для нее;) Можно ли переписать ее с Ubuntu?

Ответы

Ответ 1

SD-карта на 8 ГБ работает нормально, но вам необходимо увеличить объем корня. Я работаю, и используемое пространство в разделе /dev/root составляет около 3,1 ГБ.

Следующие шаги основаны на сообщении блога Andrew Madsen с небольшим дополнительным фокусом на шагах внутри fdisk.

Получить Ubuntu

Загрузите изображение Ubuntu 14.04 для Raspberry Pi 2 из finnie.org и скопируйте его на SD-карту. Загрузите малину Pi.

Измените раздел

Войдите в малиновый Pi и измените размер раздела. Размер по умолчанию для /dev/root равен 1.7G с доступным 1.1G. Этого недостаточно.

$ 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

Запустить fdisk

sudo fdisk /dev/mmcblk0

В командной строке введите p для 'print the partition table'. Существует два раздела

/dev/mmcblk0p1   *        2048      133119       65536    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          133120     3670015     1768448   83  Linux

При появлении запроса введите d (для удаления), затем 2. Затем заново создайте раздел, введя n, затем p, затем 2, затем нажмите enter в следующих двух приглашениях, принимающих значения по умолчанию.

Введите p снова и увидите, что второй раздел теперь больше, теперь используется все пространство на карте 8 ГБ.

           Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *        2048      133119       65536    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          133120    15523839     7695360   83  Linux

Введите w, чтобы записать изменения на диск, затем перезагрузите

sudo reboot

Изменение размера раздела

После перезагрузки измените размер файловой системы разделов, запустив

sudo resize2fs /dev/mmcblk0p2

Место подкачки

Настройте файл подкачки, выполнив

sudo apt-get install dphys-swapfile

Установить libicu-dev и clang-3.6

sudo apt-get install libicu-dev clang-3.6

Используйте альтернативы обновлений для предоставления /usr/bin ссылок для clang и 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

Затем добавьте ключ репозитория @iachievedits:

wget -qO- http://dev.iachieved.it/iachievedit.gpg.key | sudo apt-key add -

Добавьте соответствующий репозиторий в sources.list:

echo "deb [arch=armhf] http://iachievedit-repos.s3.amazonaws.com/ trusty main" | sudo tee --append /etc/apt/sources.list

Запустите apt-get update:

sudo apt-get update

Установить Swift

sudo apt-get install swift-2.2

После завершения установки вы готовы скомпилировать программы Swift!

Write Swift

Откройте свой любимый текстовый редактор, напишите программу и сохраните ее (например, на hello.swift):

let device = "Raspberry Pi 2!" 
print("Hello from Swift on \(device)")

Скомпилировать его

swiftc hello.swift

и запустите его:

./hello

Hello from Swift on Raspberry Pi 2!

Вот оно! Быстрая работа над малиной Pi

Ответ 2

Менеджер пакетов Swift получил пользовательскую поддержку инструментальной привязки через PR-1098 конец апреля 2017 года.

Я написал подробные инструкции о том, как построить здесь toolchain RaspberryPi: macOS → Инструментальная кросс-компоновка RasPi и даже наоборот (строить бинарные файлы macOS на RaspberryPi) для удовольствия. То же самое можно было бы использовать для Intel-Linux до ARM-Linux с минимальными изменениями. Репо SwiftPM содержит пример script о том, как это сделать для Intel-macOS для Intel-Ubuntu.

Вы можете найти обновление 2017-05-01 для Swift-on-ARM здесь: Обновление для Swift 3.1.1 для Raspberry Pi Zero/1/2/3.

Как небольшое резюме, так что этот ответ - это не просто ссылки;-), статус ARM 2017-05-16:

  • вы можете скомпилировать Swift 3.1/3.1.1 на RaspberryPi Ubuntu
    • не забудьте настроить swap, требуются некоторые минимальные исправления для 3.1.1. 8 ГБ диск может быть немного мало.
  • компиляция на Raspbian пока не работает (последняя известная версия 3.0.2)
  • вы можете перекрестно скомпилировать Swift с помощью специальной инструментальной цепочки, которая достаточно легко настроить
    • вам нужно получить снимок SwiftPM (Swift 4) для этого (но сама инструментальная цепочка может быть 3.1 или даже 3.0.2 с небольшими изменениями)
  • вы также можете запустить (и скомпилировать) Swift через Docker, например в HypriotOS.
  • существует группа Slack для Swift ARM: swift-arm