Можно ли скомпилировать ядро ​​Linux с чем-то другим, кроме gcc? - PullRequest
19 голосов
/ 27 марта 2009

Интересно, удалось ли кому-нибудь скомпилировать ядро ​​Linux с другим компилятором, отличным от gcc. Или если кто-то когда-либо пробовал? Вопрос может показаться глупым или академическим, но он возник, когда я подумал об ответах: Являются ли операции C ++ int атомарными в архитектуре mips

Кажется, что атомарность некоторых операций зависит не только от архитектуры процессора, но и от используемого компилятора. Итак, мне интересно, существует ли в мире Linux какой-либо компилятор, отличный от gcc.

Ответы [ 10 ]

12 голосов
/ 27 марта 2009

Linux явно зависит от некоторых расширений gcc , поэтому любой другой компилятор должен быть совместим с необходимыми расширениями, в этом случае.

Это не «нет», поскольку для отдельного поставщика / разработчика компилятора, конечно, невозможно отследить расширения gcc, просто точка данных, которая может помочь вам в поиске.

10 голосов
/ 27 марта 2009

В какой-то момент tcc обработает и запустит исходный код ядра Linux. Так что это было бы да, я думаю.

:: Шляпа, подсказывающая в комментариях .::1007*

9 голосов
/ 15 июня 2009

LLVM разработчики пытаются скомпилировать его с помощью clang . Мета-ошибка при компиляции ядра Linux с помощью clang содержит больше подробностей (дерево зависимостей для этого мета-ошибки показывает, как мало всего осталось).

8 голосов
/ 27 марта 2009

Были предприняты некоторые усилия (и исправления ) для компиляции ранней версии ядра 2.6 с icc.

7 голосов
5 голосов
/ 27 марта 2009

Компилятор IBM смог сделать это несколько версий назад, но я не уверен насчет этого и не уверен, насколько хорошо IBM оптимизировала ядро ​​в соответствии с инструкциями. Все, что я знаю, они построили это.

Поскольку Linux является самостоятельным хостингом (со своим собственным libc) и изначально разрабатывался с использованием gcc (и кросс-компиляторов gcc), это глупо, если использовать что-либо еще.

Я думаю, в основном, хорошая игра с макросами препроцессора и проинструктированными оптимизациями является самым большим препятствием (даже не отходя от газа), так как GNU в основном написал книгу выше и расширил ее. Кроме того, Linux настраивает свои оптимизации для работы с gcc, например, чтобы не попасться при использовании 'volatile' в ядре без чертовски веской причины. Использование inline и фактическое согласие компилятора - еще одна проблема.

Линус первым назвал GCC дырой & * # $, что делает его лучшим компилятором.

Вот почему у нас большие дебаты по GNU / Linux.

3 голосов
/ 29 марта 2009

Много, много, много лет назад, на самом деле можно было скомпилировать ядро ​​с помощью g ++ , и, насколько я помню, часть мотивации заключалась в том, что в C ++ была более строгая проверка типов, необязательно иметь g ++ для создания объектных файлов. Но, как указал Нил Баттерворт, Линус не особенно любит C ++ , и есть нулевой шанс, что это когда-нибудь снова станет возможным.

1 голос
/ 07 ноября 2011

Я сейчас работаю над компиляцией ядра Linux с использованием Open64 для архитектуры MIPS, а некоторые другие ребята сейчас работают только над тем, чтобы Open64 могла собрать для архитектуры X86. Теперь ядро ​​может частично запускаться и по-прежнему иметь ошибки Run fail.

Однако для атомной проблемы, по крайней мере, я не придумал ее. И я не думаю, что это действительно проблема. Причины:

  1. Ядро Linux уже представляет собой набор исходного кода, который может успешно собираться с помощью GCC, поэтому проблема заключается только в компиляторе, если он не может его собрать или сборка ядра запускается неудачно. 1008 *

  2. Если компилятор хочет успешно собрать ядро ​​Linux, он должен соблюдать расширение GNU C, и это расширение даст четкое описание того, что такое атомарная операция, поэтому такой компиляции нужно только генерировать код в соответствии с это расширение.

1 голос
/ 17 июня 2011

Компилятор EKOPath 4, не сейчас. но, вероятно, с некоторыми незначительными исправлениями

https://github.com/path64/repositories

http://www.pathscale.com/ekopath-compiler-suite

0 голосов
/ 23 мая 2009

Мое нетехническое предположение: В настоящее время ядро ​​Linux ( 2009 ) не может быть скомпилировано ни с каким компилятором, кроме компилятора GNU, gcc .

Я говорю это на основании того, что я слышал, что Ричард Столлман с некоторой убежденностью говорит, что Linux следует называть GNU / Linux , потому что ядро ​​"состоит только из 1 части операционной системы ", и я предполагаю, что он не смог бы сказать это, если бы ядро ​​не зависело от GNU (например, тонна встроенных устройств работает под управлением ОС Linux без какого-либо программного обеспечения GNU).

Как я уже сказал, просто предположение, дайте мне знать, если я ошибаюсь ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...