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.zip

    Downloadlink zum aktuellen Clang

    Clang-Version: 3.9-dev (svn-trunk vom 04.06.2016)
    Download: Clang.zip

    Anleitung zum Selberbauen

    Binutils und GCC

    Erfordert MinGW und MSYS. Benutzung auf eigene Gefahr.

    1. GCC-core-Sourcecode downloaden und als gcc-core.zip abspeichern
    2. binutils-Sourcecode downloaden und als binutils.zip abspeichern
    3. 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
    
    1. 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)


  • Mod

    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.).


  • Mod

    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.


  • Mod

    clang verstärkt nun doch etwas Probleme bei usb-Transfers. Da ist der mit gcc compilierte Kernel gutmütiger.


Log in to reply