Я портировал newlib и GCC сам тоже. И я помню, что мне не приходилось делать много нового, чтобы сделать работу newlib (большая часть работы была портирована GCC, gas и libbfd).
Просто пришлось изменить некоторые файлы о числах с плавающей точкой, отключить некоторые/SomeOtherStandard флагов POSIX, которые сделали это не использовать некоторые более сложные функции и написать код поддержки для longjmp
/setjmp
, что нагрузки и сохранить регистр состояния в буфера перехода. Но вы, конечно, должны сказать ему цель, используя --target
, поэтому он использует правильную подкаталоги машин и еще много чего. Я помню, мне пришлось добавить небольшой код в configure.sub
, чтобы узнать о моей цели и распечатать полную конфигурацию trible (cpu-manufacturer-os или аналогичный). Просто я обнаружил, что мне пришлось редактировать файл с именем configure.host
, который задает некоторые параметры для вашей цели (например, обрабатывают ли операционные системы сигналы, поднятые на raise
, или же сам модуль newlib должен имитировать обработку).
Я использовал this blog Энтони Грина в качестве ориентира, где он описывает портирование GCC, newlib и binutils. Я думаю, что это отличный источник, когда вы должны сделать это сами. В любом случае, весело читать. Потребовалось в общей сложности 2 месяца для компиляции и запуска некоторых развлекательных программ на C, для которых требуется только автономный C (с фиктивными функциями чтения/записи, которые записывались в терминал симулятора).
Так что я думаю, что количество работы, безусловно, управляемо. Тот, который сделал меня почти сумасшедшим, - это скрипты сборки libgloss
. Я, конечно, был потерян в этих магаках autoconf :) Во всяком случае, я желаю вам удачи! :)
спасибо за ссылку. Я уже заметил эту страницу, но она не охватывает, как работают подкаталоги для работы в libgloss, что было моей путаницей – sparklewhiskers