2009-03-27 16 views
17

? Me pregunto si alguien logró compilar el kernel de Linux con algún otro compilador que no sea gcc. O si alguien alguna vez lo ha intentado? La pregunta puede parecer tonta o académica, pero surgió cuando pensé en las respuestas a: Are C++ int operations atomic on the mips architecture¿Es posible compilar kernel de Linux con algo distinto a gcc

Parece que la atomicidad de algunas operaciones depende no solo de la arquitectura de la CPU, sino también del compilador utilizado. Entonces, me pregunto si en el mundo Linux aún existe algún compilador que no sea gcc.

+0

En resumen, sí ... pero ¿por qué? –

+0

Me pregunto si alguna escritura suave para alguna arquitectura de CPU puede dejar de funcionar correctamente cuando se compila con compilador diferente (muy probablemente sí, así que quería saber qué tan grande es la probabilidad de que algún compilador distinto de gcc se use alguna vez para Linux). –

+0

clang specific: https://unix.stackexchange.com/questions/17972/is-there-a-linux-distro-compiled-with-clang-llvm –

Respuesta

12

Linux explícitamente depende de algunos gcc extensions, por lo que cualquier otro compilador debe ser compatible con las extensiones necesarias, en ese caso.

Esto no es un "no", ya que por supuesto no es imposible que un proveedor/desarrollador de compilador independiente rastree las extensiones de gcc, solo un punto de datos que podría ayudarlo a buscar.

+0

Algunas ** extensiones de ** gcc ** no documentadas que fueron utilizadas por los desarrolladores de Linux porque "simplemente funciona y no hay ninguna advertencia para VLAIS" incluso con '-ansi -padantic' (gcc ladrará solo con' -pedantic-errors 'poco usado', [gracias a Lundin] (http: // stackoverflow.com/a/14629651/196561)). – osgx

+1

Y existe un exitoso proyecto LLVMLinux de Linux Foundation y Behan Webster en 2013-2014 años: http://llvm.linuxfoundation.org/ para eliminar peores gcc-isms del kernel Linux de vanilla. – osgx

5

El compilador de IBM pudo hacerlo hace algunas versiones de Linux, pero no estoy seguro ahora, ni estoy seguro de qué tan bien IBM optimizó el kernel como se le indicó. Todo lo que sé es que lo construyeron.

Como Linux es autohospedaje (con su propia libc) y se ha desarrollado desde el principio con gcc (y compiladores cruzados gcc), es una especie de tontería usar cualquier otra cosa.

Creo que jugar de maravilla con las macros de los preprocesadores y las optimizaciones instruidas es el mayor obstáculo (ni siquiera entrar en una desviación del gas), ya que GNU básicamente escribió el libro y lo extendió. Más allá de eso, Linux sintoniza sus optimizaciones para trabajar con gcc, por ejemplo, no se deje atrapar usando 'volátil' en el kernel sin un maldito buen motivo. Usar en línea y tener al compilador de acuerdo es otro desafío.

Linus es el primero en llamar a GCC un & * # $ hole, lo que lo convierte en un mejor compilador.

Es por eso que tenemos el gran debate de GNU/Linux.

8

Ha habido algunos esfuerzos (y patches) para compilar una versión anterior del kernel 2.6 con icc.

+2

Más recientemente, (25 de febrero de 2009) http://www.linuxjournal.com/content/linuxdna-supercharges-linux-intel-cc-compiler –

+0

Intel es realmente el único que intenta obtener el kernel para compilar con otro compilador . – supercheetah

+0

Dunno Estoy bastante seguro de que logré construir el kernel con icc (no recuerdo si fue 2.6 o 2.4) –

9

En algún punto tcc procesaría y run la fuente del núcleo de Linux. Entonces eso sería un sí, supongo.

punta

:: Sombrero de ephemient en los comentarios. :: Hace

+2

http://bellard.org/tcc/tccboot.html "TCCBOOT es un gestor de arranque capaz de compilar y arrancar un kernel Linux directamente desde su * código fuente *. " Sí, tcc pudo construir un kernel de Linux ejecutable en algún momento. – ephemient

+0

@ephemient: Nunca me había dado cuenta de eso. Gracias. – dmckee

3

Muchos, muchos, muchos años, en realidad era posible compile the kernel with g++, y por lo que yo recuerdo parte de la motivación era porque tenía fuertes C++ tipo de verificación, no necesariamente para tener g ++ para producir archivos de objetos. Pero, como ha señalado Neil Butterworth, Linus es not particularfond of C++, y no hay ninguna posibilidad de que esto vuelva a ser posible.

-3

Mi suposición no técnica: El núcleo Linux no puede actualmente (2009 ) ser compilado con cualquier compilador que no sea el compilador GNU, gcc .

Digo esto sobre la base de que he oído Richard Stallman, con un poco de convicción, dicen Linux debería llamarse GNU/Linux porque el núcleo es "sólo el 1 parte del sistema operativo" y estoy Supongo que no podría decir esto si el kernel no dependiera de GNU (por ejemplo, una tonelada de dispositivos integrados ejecuta un sistema operativo Linux sin ningún software GNU).

Como ya he dicho, sólo una suposición, que me haga saber si estoy equivocado ...

+0

incorrecto :) Ver otras respuestas. – Arafangion

+2

RMS se refiere a coreutils de GNU y otras utilidades de usuario. –

1

Ahora mismo estoy trabajando en compilación del kernel Linux usando Open64 para MIPS añadido de arquitectura, y algunos otros tipos son ahora sólo trabajando para hacer Open64 puede construir para X86 arco. Ahora el kernel puede ejecutarse parcialmente y aún tener errores de ejecución de fallas.

Sin embargo, por el problema atómico, al menos no se me ocurrió. Y no creo que en realidad es un problema.El razones son: núcleo

  1. El Linux ya han sido una colección de código fuente, que se puede construir con éxito con GCC, por lo que es el único problema del compilador si no puede construirlo, o las ejecuciones kernel construidas fallan.

  2. Si un compilador desea construir con éxito el kernel de Linux, debe obviar la extensión C de GNU, y esta extensión dará una descripción clara de lo que es una operación atómica, por lo que dicha compilación solo necesita generar código de acuerdo con este extensión.

Cuestiones relacionadas