Доброго времени суток!
Хотелось бы узнать зачем нужен CHOST.
Понятно, что он определяет платформу. Но почему он может быть только i386, i586 или i686. Тогда как -match может принимать значения pentium, pentium-m и так далее. В чём разница между CHOST и march? Вот man по make.conf, но в секции про CHOST там куча ссылок на man gcc, в котором описывается куча параметров и не описывается как они связаны с CHOST. Вот ещё интересный сайтик, в котором опсываются рекомендации по флагам для компиляции под различные платформы. К примеру, там написано
Фактически CHOST определяет тип используемого компилятора. Что означает, что gcc собранный для i386 (CHOST="i386-pc-linux-gnu") не сможет произвести бинарь для x86_64 (CHOST="x86_64-pc-linux-gnu"). Для каждой конкретной сборки (архитектуры, типа) компилятора доступен свой набор оптимизирующих флагов (CFLAGS, CXXFLAGS).
как я понимаю i386-pc-linux-gnu составное имя. i386-pc-linux-gnu:
1. i386 - архитектура
2. pc - P.C. - какой здесь может быть выбор ещё?
3. linux-gnu - какой здесь может быть выбор ещё?
странно, что это нигде не описывается.
первый пункт определяет архитектуру процессора. если верить мануалу по gcc, то у него существует ещё и другие архитектуры для платформы x86, кроме i*86. Например, pentium3, pentium-m, pentiumpro, pentium4. Но почему выбирается в CHOST для платформы x86, только i*86?
Люди поделитесь, пожалуйста, где можно прочитать об этом, или расскажите, если знаете.
2. Про PowerPC, например, не слышали?
3. BSD, например.
Не могу понять - какой еще вам нужен ответ?
Если взять две машины, скажем с GNU/Linux (проц. какой-нибудь x86 с набором инструкций i686) и FreeBSD (проц., пусть будет, просто AMD64), собрать на каждой их них GCC, то будем иметь два GCC, примерно с такими CHOST:
- i686-pc-linux-gnu
- x86_64-pc-bsd
Теперь запихнем это все на третью машину с процессором x86 из семества i386. Можно будет использовать два GCC (т.е., в случае Gentoo, указывать CHOST как первый, так и второй). Все. Правда запускаться, на этой машине, оба компилятора не будут. Надеюсь, что разжевал.
спасибо, serzh-z! В этом направлении мне понятно, что
gcc собранный для i386 (CHOST="i386-pc-linux-gnu") не сможет произвести бинарь для x86_64 (CHOST="x86_64-pc-linux-gnu"). Для каждой конкретной сборки (архитектуры, типа) компилятора доступен свой набор оптимизирующих флагов (CFLAGS, CXXFLAGS)
1. Возможно ли написать так, pentium4-pc-linux-gnu? Почему нет если нет.
2. i386 понятно, что определяет архитектуру процессора. А что определяет pc и linux-gnu?
Спасибо, всем кто помогает мне разобраться с этими ключами!
1. Можно, если у вас есть в системе такой профиль GCC.
Poor Fred
CHOST, как и написано в хендбуке, можно менять лишь для stage1. Т.е. на том этапе, когда самый первый (gcc из stage1 не в счет) компилятор будет собираться с помощью bootstrap*.sh.
Возможно, что я не совсем прав - но, увы, не могу этого сейчас проверить.
2. i386 понятно, что определяет архитектуру процессора. А что определяет pc и linux-gnu?
я не совсем вопрос корректно поставил
если i386 это определяет инструкции, которыми будет компилироваться машиный кода. То тогда, что определяет pc и linux-gnu? Можно предположить, что linux-gnu будет определять что-то, что связано с системными вызовами в линукс... а что тогда pc определяет?
CHOST, как и написано в хендбуке, можно менять лишь для stage1. Т.е. на том этапе, когда самый первый (gcc из stage1 не в счет) компилятор будет собираться с помощью bootstrap*.sh.
Возможно, что я не совсем прав - но, увы, не могу этого сейчас проверить.
Да, все правильно. Пытался сначала впереди паровоза бежать, т.е. без bootstrap, у меня и собирался компилятор 386-й. Теперь все ок.