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