Минимальная сборка FPC

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Минимальная сборка FPC

Сообщение hinst »

Предположим, нужно что-то скомпилировать фрипаскалем на компьютере у случайного юзверя. Но при этом нельзя заставлять его устанавливать фрипаскаль. Подскажите пожалуйста, каков минимальный набор файлов компилятора FPC, могущий работать. я подозреваю, что исп. файл fpc и ещё линкер ld необходимы. (правда, линкер у многих есть, но кто ж его знает...). Может быть, есть какая-нибудь облегчённая сборка дистрибутива FPC? Почему-то мне хочется, чтобы такой минимальный набор всего необходимого для сборки не превысил 10 мегабайт. ессно надо ещё system.ppu, system.p, system.compiled, мб ещё что-то. Вообщем, я слабо представляю, что именно надо, поэтому и решил спросить.
Заранее спасибо.
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Самый простой путь - эксперимент: сделать отдельную установку FPC и постепенно удалять из неё файлы/папки (после каждого удаления для проверки компилировать какой-нибудь приличный проектик).
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

hinst писал(а):Предположим, нужно что-то скомпилировать фрипаскалем на компьютере у случайного юзверя. Но при этом нельзя заставлять его устанавливать фрипаскаль. Подскажите пожалуйста, каков минимальный набор файлов компилятора FPC, могущий работать. я подозреваю, что исп. файл fpc и ещё линкер ld необходимы. (правда, линкер у многих есть, но кто ж его знает...). Может быть, есть какая-нибудь облегчённая сборка дистрибутива FPC? Почему-то мне хочется, чтобы такой минимальный набор всего необходимого для сборки не превысил 10 мегабайт. ессно надо ещё system.ppu, system.p, system.compiled, мб ещё что-то. Вообщем, я слабо представляю, что именно надо, поэтому и решил спросить.
Заранее спасибо.


Для Windows:
ppcXXX и собранный RTL.

Для Linux:
ppcXXX и собранный RTL.
ld + системные библиотеки, вроде crt0.o (ставяться с gnutools). Но системные библиотеки лучше НЕ таскать с собой, а ставить на каждую систему свои из соответствующих репозиториев :)

Для других:
ppcXXX и собранный RTL,
as, ld + системные библиотеки.

Добавить необходимые package по вкусу ;) Исходники, как RTL при этом совсем не обязательно с собой таскать.

все модули rtl можно найти, посмотрев fpc.cfg. примерно такая строчка как бы намекает, где искать модули rtl:
-Fu/usr/local/lib/fpc/$fpcversion/units/$fpctarget/rtl

ещё с fpc идут утилиты, вроде fpcres (при компиляции ресурсов). Их использование не строго обязательно, но мало ли прижучит ;)
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

неутешительно. собранный rtl нааерняка жирно весит
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

В RTL модули привязаны к конкретным целевым платформам. Наверняка модули для платформ, которые вам не нужны, можно убрать.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

hinst писал(а):неутешительно. собранный rtl нааерняка жирно весит

fpc 2.5.1, размеры папки units/rtl
i386-win32 - 12 mb
i386-linux - 15 mb
i386-darwin - 5.9 mb
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

Зависит от целей и способов. Для сборки под виндой и для винды достаточно ppc386. Можно пересобрать выкинув лишнее.
RTL, нужен ли он вообще -- читать выше. Если нужен -- читать выше (соберите свой, ограничьте тот что из коробки).

p.s. В конце концов, если очень хочется то научите брать компилятор модули из архива. Вообщем, на эти разговоры ушло чуть ли больше времени чем требуется на сборку компилятора под себя.

..bw
Аватара пользователя
hinst
энтузиаст
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Сообщение hinst »

то есть я правильно понял, что всё что нужно для сборки для винды - это исп. файл ppc386 и юниты из папки rtl???
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

hinst писал(а):и юниты из папки rtl???

Не все, а только те, которые используются программой.
Минимальный набор модулей уже обсуждался на форуме. Где - не помню, поиск поможет. ;)
В результате недолгого эксперимента самостоятельно можно выяснить, что для сборки программы типа "hello world", нужен такой набор файлов:
fpintres.o
fpintres.ppu
hello.pas
ppc386.exe
sysinitpas.o
sysinitpas.ppu
system.o
system.ppu

Без них компилятор работать вообще не будет.
Остальные модули нужны только если они используются в программе, т.е. если указаны в строке USES самой программы или в используемых ею модулях.
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

> Без них компилятор работать вообще не будет.
Поспорим на деньги? (Я про модули, см. ключ -Us.)
system и sysinitpas не из воздуха и за счёт магии берутся, они так же собираются, тем же компилятором и в тех же условиях что и весь остальной код.

p.s. Вот тут могу ошибаться, но .o не нужны для виндовой сборки с использованием (а он по умолчанию) встроенного линковщика.

p.p.s. Простой рецепт (без перекомпиляции fpc и системных модулей): ложим ppc386.exe, system.ppu и sysinit.ppu (про fpintres не в курсе, когда разбирался во всём этом, он не был нужен) в одно место и используем с ключом -n. Но я бы сделал свою сборку компилятора вырезал бы лишние платформы, минимизировал бы влияние среды, брал бы модули из архива и т.д..

..bw
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

bw писал(а):Поспорим на деньги?

Я не буду спорить ;) , т.к. уверен, что речь у товарища hinst идёт о сборке приложений, которые не являются компилятором или модулем типа System. Именно на таком предположении мой ответ и основан.
bw писал(а):p.s. Вот тут могу ошибаться, но .o не нужны для виндовой сборки с использованием (а он по умолчанию) встроенного линковщика.

Если Вы ещё раз всмотритесь в приведённый список файлов, то внешнего линковщика там не увидите. Ergo, используется внутренний линковщик. Я специально обнулил переменную PATH, чтобы быть убеждённым, что не используется ни один внешний, по отношению к текущему каталогу, файл. Как результат - без файлов .o линковщик меня обругал, в процессе линьки, неизвестным символом. :)
bw писал(а):p.p.s. Простой рецепт

Дружище, я как раз этим рецептом и пользовался. ;) Поэтому в качестве обязательных файлов для сборки "hello world" оказались именно эти файлы. Если выкинуть любой из них - "hello world" не собирётся с той или иной ошибкой.

Про перекомпиляцию компилятора ничего сказать не могу - как то оно от меня слишком далеко... :)
Могу только сказать, что если подцепить к исходнику программы исходник ресурсов (.rc), то он тоже откомпилируется. Видимо для этого fpintres и требуется. Если знаете, как его отключить в файле конфигурации - напишите, hinst Вам будет, вне всякого сомнения, благодарен. ;)

Добавлено спустя 12 минут:
hinst писал(а):Почему-то мне хочется, чтобы такой минимальный набор всего необходимого для сборки не превысил 10 мегабайт.

В моём варианте компилятора, минимальный набор весит 1,9 МБ. Так что в комплект ещё можно напихать всяких разных поросят - до 10 МБ. ;)
Ответить