Cross compiling
Передмова
Це короткий вступ для новачків. У наступних розділах описується, як налаштувати систему для кроскомпіляції, що означає створення двійкових файлів (виконуваних файлів) для платформи, відмінної від тієї, яка використовується для компіляції, напр., що працюють під Linux і створюють виконувані файли Win32 (або FreeBSD або Darwin і і т.д.). У цьому випадку платформу, що використовується для компіляції, зазвичай називають"хостом"[(host)] (Linux у наведеному вище прикладі), а платформа, в якій ви хочете запускати створені двійкові файли, є вашою"метою"[(target)]. FreePascal є компілятором і в основному перетворює вихідний код на двійкові файли (машинна мова). Ці двійкові файли також містять інформацію про те, як операційна система запускає виконувані файли. Більше того, двійкові файли відносяться до API-інтерфейсів, що надаються конкретною операційною системою, тому для різних операційних систем потрібна інша реалізація нашої бібліотеки часу виконання. Отже, ці двійкові файли є специфічними для платформи. Сам FreePascal не потребує великого настроювання. Він може створювати двійкові файли для багатьох платформ. Таким чином, просто накажіть [компілятор] зробити це.
Хост і ціль на одному процесорі
FPC розроблений таким чином, що розподілений компілятор може створювати машинний код для певного процесора [(CPU)] (оскільки різні процесори потребують різного комп'ютерного коду), і він знає конкретні вимоги для всіх підтримуваних платформ (операційних систем), доступних на цьому конкретному процесорі . Це означає, що ви можете виконувати крос-компіляцію з тим же компілятором, який використовується для вбудованої компіляції, якщо видотримуєтеся того самого CPU.
Хост і ціль на різних процесорах
Якщо необхідно створити двійкові файли для іншого процесора, вам потрібен спеціальний кроскомпілятор, тобто компілятор, що працює на платформі хоста, але здатний створювати машинний код для іншого процесора (у разі FPC такий крос-компілятор знову можна націлити на всі платформи, що підтримуються, доступні в _target_ CPU). Цей крос-компілятор зазвичай зберігається у тому каталозі, як і власний компілятор. Такий крос-компілятор може бути скомпільований вами, або ви можете використовувати готовий розподілений крос-компілятор, що надається для деяких платформ безпосередньо командою [розробників] FPC (зазвичай це платформи, які в основному використовуються в портативних пристроях, таких як arm-linux або arm -wince, тому що вони зазвичай не використовуються як хост-платформ). Потім двійковий файл Fpc може вибрати правильний компілятор (власний компілятор або кроскомпілятор) для цільового CPU, вибраного за допомогою параметра -P.
Асемблер та компонувальник
Компілятор – це лише одна частина. Нам також потрібен асемблер та компонувальник. FPC надає внутрішній асемблер та/або компонувальник для деяких платформ, але для інших платформ потрібні зовнішні інструменти. Зазвичай, ці інструменти не можуть створювати двійкові файли для різних платформ. Ось чому ми повинні використовувати різні спеціальні компонувальники 'ld' та асемблер 'як' для кожної цільової платформи. Це [і є] binutils.
Модулі, необхідні для цільової платформи
Після створення (або наявності/установки) крос-інструментів потрібні FPC RTL та інші модулі, скомпільовані для обраної цільової платформи. Наприклад, кожна цільова платформа потребує іншого файлуsystem.ppu (модуль System) і т.д. Ці модулі можуть бути скомпільовані з використанням компілятора, налаштованого для компіляції на цільову платформу, або ви можете використовувати офіційно розповсюджувані модулі, скомпіловані (і розповсюджувані) з такою ж версією FPC (якщо вона доступна у форматі, доступному для конкретної платформи хоста).
Конфігурація
Потім буде налаштований ваш конфігураційний файл fpc так, що крос-компіляція стане настільки простою, що ви зможете забути про всі нудні деталі. Те саме буде зроблено для LCL - бібліотеки компонентів lazarus (при використанні Lazarus). І після цього ви можете перехресно скомпілювати програми паскаля для іншої цільової платформи. Отримані двійкові файли можуть бути скопійовані на машину з запущеною цільовою платформою або запущені під емулятором (наприклад, у Wine для Win32 двійкові файли під Linux і т.д.).
Основні кроки
Є кілька спільних кроків, пов'язаних із крос-компіляцією, які ви повинні робити в кожному випадку:
- Вже маємо компілятор FreePascal для платформи, з якої ви хочете компілювати.
- У вас має бути вихідний код FreePascal (за винятком спеціальних випадків, коли все було підготовлено кимось іншим).
- Вам потрібно [буде] або зібрати з вихідного коду, або отримати двійкові файли cross-binutils (див. Binutils), які [запускатимуться] на платформі, на якій ви знаходитесь [(хост-платформі)], і [будуть] призначені для створення програм для вашої цільової платформи.
- Іноді вам потрібні деякі файли з цільової платформи, під яку ви компілюєте.
З Linux x64 на Linux i386
Швидше за все, ваш 64-розрядний дистрибутив Linux вже здатний компілювати32-бітові програми, але через те, [що] процес складання fpc [так] розроблений, є кілька речей, які вам, можливо, доведеться зробити.
- На мультиархітектурному debian/ubuntu необхідно встановити пакет libc6-dev-i386
- Спочатку перевірте, чи є у вас файли i386-linux-ld та i386-linux-as:
Якщо у вас є ці файли, пропустіть заголовок "Compile FPC" [("Компілювати FPC")]. Обидва [файли] можуть бути створені за допомогою наступного сценарію: