GCC, Binutils und Clang für Windows
-
GCC, Clang und Binutils für Windows
Downloadlink zu den aktuellen Binutils+GCC
GCC-Version: 6.1
Binutils-Version: 2.26
Download: Crosstools.zipDownloadlink zum aktuellen Clang
Clang-Version: 3.9-dev (svn-trunk vom 04.06.2016)
Download: Clang.zipAnleitung zum Selberbauen
Binutils und GCC
Erfordert MinGW und MSYS. Benutzung auf eigene Gefahr.
- GCC-core-Sourcecode downloaden und als gcc-core.zip abspeichern
- binutils-Sourcecode downloaden und als binutils.zip abspeichern
- Folgende build.bat anlegen, PREFIX anpassen und ausführen. Damit der GCC erfolgreich gebaut wird, ist die MinGW-Shell zu benutzen.
set TARGET=i586-elf set PREFIX="D:/Cross/bin" set PATH=%PATH%;%PREFIX%/bin mingw-get install gmp mpfr mpc mkdir bin mkdir binutils tar -C binutils/ --strip-components 1 -xjf binutils.tar.bz2 cd binutils sh configure --prefix=%PREFIX% --target=%TARGET% --disable-nls make make install cd .. pause mkdir gcc tar -C gcc/ --strip-components 1 -xjf gcc-core.tar.bz2 mkdir temp cd temp sh ../gcc/configure --prefix=%PREFIX% --target=%TARGET% --enable-languages=c,c++ --disable-nls --without-headers make all-gcc make install-gcc pause
- Die Binaries sollten jetzt in PREFIX liegen.
Diese Anleitung basiert auf http://www.lowlevel.eu/wiki/Cross-Compiler. Danke auch an Jidder aus #lost sowie Jonas_OSDever für ihre Hilfe.
Clang
Clang lässt sich problemlos mit Visual Studio bauen, vorausgesetzt, CMake ist installiert (ggf. wird auch Python benötigt).
Folgendes Script erstellt eine 64-bit-Version von Clang mit einigen Optimierungen:
mkdir build cd build cmake.exe ../ -DCMAKE_BUILD_TYPE:STRING="Release" -DCMAKE_EXE_LINKER_FLAGS="/OPT:ICF /OPT:REF" -DCMAKE_CXX_FLAGS:STRING="/Zc:inline /Zc:throwingNew /Oi /Ot /Oy /GF" -DLLVM_INCLUDE_TESTS:BOOL=OFF -DLLVM_INCLUDE_EXAMPLES:BOOL=OFF -DLLVM_TARGETS_TO_BUILD:STRING="X86" -G "Visual Studio 14 Win64" pause
Alle Versionen
GCC 6.1 - Binutils 2.26
GCC 5.3 - Binutils 2.26
GCC 4.9.2 - Binutils 2.25
GCC 4.9.0 - Binutils 2.23
GCC 4.7.2 - Binutils 2.23
Clang 3.9-dev (svn-trunk vom 04.06.2016)
Clang 3.9-dev (svn-trunk vom 29.02.2016)
Clang 3.6-dev (svn-trunk vom 26.12.2014)
-
Vielen Dank an MrX im Namen der Community!
-
Nachdem Jonas_OSDever den Fehler im o.g. Script gefunden hat, habe ich nun die Crosstools in einer aktualisierten Fassung hochgeladen: GCC 4.7.2, Binutils 2.23.
Das Script aktualisiere ich beizeiten - solange muss der GCC-Teil manuell in die MinGW-Shell eingetippt werden (Für Binutils reicht ausführen über die CMD aus).
-
Da wir Clang schon seit längerem als Compiler unterstützen, habe ich jetzt auch mal eine Build-Anleitung und ein Binary bereitgestellt (s.o.).
-
kernel.bin: GCC: 370 KB, clang: 327 KB
Das erspart Schreib-/Lesezeit beim Testen mit Hardware. Die Kompilierung erfolgt ebenfalls rascher.
-
Erhard Henkes schrieb:
kernel.bin: GCC: 370 KB, clang: 327 KB
Das erspart Schreib-/Lesezeit beim Testen mit Hardware.Schonmal -Os probiert?
-
Nach dem Download/Installation im Ordner und in Pfadvariable erfolgt leider diese error message:
...\Source>build -release ...\Source>SET flags=OS=WINDOWS ...\Source>IF [-release] == [-release] ( SET flags=OS=WINDOWS CONFIG=RELEASE IF [] == [-clang] ( SET flags=OS=WINDOWS CONFIG=RELEASE COMPILER=CLANG IF [] == [-vs] (SET flags=OS=WINDOWS CONFIG=RELEASE COMPILER=CLANG MESSAGEFORMA T=VS ) ) ) ...\Source>IF [-release] == [-clang] ( SET flags=OS=WINDOWS COMPILER=CLANG IF [] == [-vs] (SET flags=OS=WINDOWS COMPILER=CLANG MESSAGEFORMAT=VS ) ) ...\Source>tools\mingw32-make FloppyImag e.img OS=WINDOWS CONFIG=RELEASE i586-elf-gcc assert.c -c -std=c99 -march=i486 -mtune=generic -Wshadow -m32 -Werr or -Wall -ffunction-sections -fdata-sections -O2 -nostdinc -fno-builtin -fno-sta ck-protector -fomit-frame-pointer -fno-common -Iinclude -fno-pic -o ..\..\object _files\user\stdlibc/assert.o process_begin: CreateProcess(NULL, i586-elf-gcc assert.c -c -std=c99 -march=i486 -mtune=generic -Wshadow -m32 -Werror -Wall -ffunction-sections -fdata-sections -O2 -nostdinc -fno-builtin -fno-stack-protector -fomit-frame-pointer -fno-common -Iinclude -fno-pic -o ..\..\object_files\user\stdlibc/assert.o, ...) failed. make (e=2): Das System kann die angegebene Datei nicht finden. mingw32-make[1]: *** [assert.o] Error 2 mingw32-make: *** [userlibs] Error 2
Was fehlt?
-
GCC, denke ich. Der bin-Ordner muss im PATH liegen.
-
clang verstärkt nun doch etwas Probleme bei usb-Transfers. Da ist der mit gcc compilierte Kernel gutmütiger.