Цитата(romez777 @ Aug 21 2008, 10:53)

Приветствую,
читаю описание сборки тулчейна, стараюсь освежить в памяти. Не могу понять, что влияет на выбор префикса тулчейна (arm-unknown-linux-gnu, arm-elf-linux и пр.). В скриптах Дэна Кегеля на каждую архитектуру заведен свой .dat файл, в котором описывается будущий TARGET. Так вот как определяется имя для этого таргета?
Спасибо.
Имя файла компилятора задается в виде триплета cpu-machine-os
Таким образом если Вы хотите собрать компилер, который будет создавать исполняемые (назовем их так для определенности) файлы для процессора ARM то первая часть триплета будет
arm. Если данный процессор используется в нескольких различных типах машин, например x86 процессор может использоваться как в IBM PC AT машинах так и в Apple MAC, то вторая часть должна содержать имя той машины, на которую он будет создавать исполняемые файлы. Для x86 на машину IBM PC AT вторая часть триплета будет
pc. Для ARM есть несколько видов машин. Например ядра Intel xScale несколько отличаются от "классического" ARM ядра. Для использования их особенностей нужно указать машину
xscale. Если Вам не нужна какя либо специфическая машина (а в подавляющем большинстве случаев это так), то указывается
unknown. И последняя часть триплета - ОС. Если исполняемые файлы предназначены для ОС Линукс - то третья часть триплета
linux, или более новое

название
linux-gnu. Еще для ARM существует два ABI, так наз. old ABI и новый EABI. Если хотите использовать новый - то третья часть будет
linux-gnu-eabi. Дальше, если целевая машина представляет собой микроконтроллер в чистом виде - то эта часть триплета будет
elf.
Кроме того часто некоторые несущественные в
каждом конкретном случае особенности можно не указывать.
По этому триплету компилер составляется из определенных функциональных блоков. Если какая-то часть триплета не указана то будет выбран состав по умолчанию.
Например:
arm-elf - cpu = arm, машина не указана т.е unknown, ОС elf.
arm-linux - cpu = arm, машина не указана т.е unknown, ОС linux (old ABI).
arm-unknown-linux-gnu - то-же что и выше но явно указана машина.
arm-iwmmx-linux - cpu = arm, машина iwmmx (расширенный набор команд от Intel), ОС - linux (old ABI)
arm-xscale-linux-gnu-eabi - cpu = arm, машина xscale (еще один расширенный набор команд от Intel), ОС - linux EABI (новый/расширенный ABI).
Вам для EJS как я понимаю можно выбрать arm-unknown-linux-gnu, и указать опцию configure --with-cpu=arm926ej-s
Полный список можно посмотреть в man gcc.
Эта опция выбирает cpu по умолчанию. Не помню точно, но то-ли эта опция позволяет задать список, или есть другая со списком поддерживаемых архитектур. И еще есть кажется --with-arch. Опции можно найти в файле gcc/configure и в мануале gcc-int (в смысле GCC Internals) но ка всегда мануал отстает.
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.