• 编译LoongArch的llvm交叉工具链


    OS:Ubuntu 22.04 x86_64

    1. 下载llvm 源码

    从https://github.com/llvm/llvm-project 下最新的release 版本,这里下载的是llvm17.0.0-rc4

    2.编译

    解压源码后,在源码目录执行编译脚本 build.sh

    $ cat build.sh
    
    #!/bin/bash
    set -e
    set -x
    
    CONFIG_AND_BUILD=true
    
    INSTALL_DIR="$PWD/llvm_install"
    
    while $CONFIG_AND_BUILD ; do
      rm -rf _build
      mkdir _build
      break
    done
    
    cd _build
    
    while $CONFIG_AND_BUILD; do
    
      #cmake --log-level=VERBOSE --debug-output \
      cmake \
        -DCMAKE_VERBOSE_MAKEFILE=ON \
        -DCMAKE_BUILD_TYPE="Release" \
        -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
        \
           ../llvm -G Ninja \
        \
        -DLLVM_TARGETS_TO_BUILD="all" \
        -DLLVM_ENABLE_PROJECTS="clang;lld;compiler-rt" \
        -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
        \
        -DLLVM_INSTALL_UTILS=ON \
        -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF \
        -DBUILD_SHARED_LIBS=OFF \
        \
        -DLLVM_INCLUDE_TOOLS=ON \
        -DLLVM_BUILD_TOOLS=ON \
        \
        -DLLVM_INCLUDE_UTILS=ON \
        -DLLVM_BUILD_UTILS=ON \
        \
        -DLLVM_INCLUDE_RUNTIMES=ON \
        -DLLVM_BUILD_RUNTIME=ON \
        \
        -DLLVM_INCLUDE_EXAMPLES=ON \
        -DLLVM_BUILD_EXAMPLES=OFF \
        \
        -DLLVM_INCLUDE_TESTS=ON \
        -DLLVM_BUILD_TESTS=OFF \
        \
        -DLLVM_INCLUDE_DOCS=ON \
        -DLLVM_BUILD_DOCS=OFF \
        -DLLVM_ENABLE_DOXYGEN=OFF \
        -DLLVM_ENABLE_SPHINX=OFF \
        -DLLVM_ENABLE_OCAMLDOC=OFF \
        -DLLVM_ENABLE_BINDINGS=OFF \
        \
        -DLLVM_BUILD_LLVM_DYLIB=ON \
        -DLLVM_LINK_LLVM_DYLIB=ON \
        \
        -DLLVM_ENABLE_LIBCXX=OFF \
        -DLLVM_ENABLE_ZLIB=ON \
        -DLLVM_ENABLE_FFI=ON \
        -DLLVM_ENABLE_RTTI=ON \
        -DCOMPILER_RT_BUILD_LIBRUZZER=OFF
    
      break
    done
    
    ninja -v -j6
    
    ninja -v install
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    2.1 交叉编译

    下载gcc交叉工具链https://github.com/sunhaiyong1978/CLFS-for-LoongArch/releases/download/8.1/CLFS-loongarch64-8.1.1-x86_64-cross-tools-gcc-libc.tar.xz,并解压到/opt

    执行交叉编译脚本 cross_build.sh

    $ cat cross_build.sh
    
    #!/bin/bash
    set -e
    set -x
    
    CONFIG_AND_BUILD=true
    #CONFIG_AND_BUILD=false
    
    CONFIG_DIR="$PWD/llvm_install/bin"
    LA_TOOLCHAIN=/opt/cross-tools/loongarch64-unknown-linux-gnu
    LA_FLAGS="-B$LA_TOOLCHAIN"
    
    while $CONFIG_AND_BUILD ; do
      rm -rf _build_cross
      mkdir _build_cross
      break
    done
    
    cd _build_cross
    
    while $CONFIG_AND_BUILD; do
    
      cmake \
        -DCMAKE_CROSSCOMPILING=True \
        -DLLVM_CONFIG_PATH=$CONFIG_DIR/llvm-config \
        -DCMAKE_C_COMPILER=/opt/cross-tools/bin/loongarch64-unknown-linux-gnu-gcc \
        -DCMAKE_CXX_COMPILER=/opt/cross-tools/bin/loongarch64-unknown-linux-gnu-g++ \
        -DCMAKE_SYSROOT="/opt/cross-tools/target"  \
        -DCMAKE_VERBOSE_MAKEFILE=ON \
        -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \
        -DCMAKE_C_COMPILER_TARGET="loongarch64" \
        -DCMAKE_CXX_COMPILER_TARGET="loongarch64" \
        -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
        -DCMAKE_C_FLAGS="$LA_FLAGS" \
        -DCMAKE_BUILD_TYPE="Release" \
        -DCMAKE_INSTALL_PREFIX="`$CONFIG_DIR/clang -print-resource-dir`" \
        \
           ../compiler-rt -G Ninja
    
      break
    done
    
    ninja -v -j6
    
    ninja -v install
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    编译完成之后会安装到当前目录下的 llvm_install 目录。

    $ cd llvm_install/bin
    $ ./llc -version
    LLVM (http://llvm.org/):
      LLVM version 17.0.0rc
      Optimized build.
      Default target: x86_64-unknown-linux-gnu
      Host CPU: haswell
    
      Registered Targets:
        aarch64     - AArch64 (little endian)
        aarch64_32  - AArch64 (little endian ILP32)
        aarch64_be  - AArch64 (big endian)
        amdgcn      - AMD GCN GPUs
        arm         - ARM
        arm64       - ARM64 (little endian)
        arm64_32    - ARM64 (little endian ILP32)
        armeb       - ARM (big endian)
        avr         - Atmel AVR Microcontroller
        bpf         - BPF (host endian)
        bpfeb       - BPF (big endian)
        bpfel       - BPF (little endian)
        hexagon     - Hexagon
        lanai       - Lanai
        loongarch32 - 32-bit LoongArch
        loongarch64 - 64-bit LoongArch
        mips        - MIPS (32-bit big endian)
        mips64      - MIPS (64-bit big endian)
        mips64el    - MIPS (64-bit little endian)
        mipsel      - MIPS (32-bit little endian)
        msp430      - MSP430 [experimental]
        nvptx       - NVIDIA PTX 32-bit
        nvptx64     - NVIDIA PTX 64-bit
        ppc32       - PowerPC 32
        ppc32le     - PowerPC 32 LE
        ppc64       - PowerPC 64
        ppc64le     - PowerPC 64 LE
        r600        - AMD GPUs HD2XXX-HD6XXX
        riscv32     - 32-bit RISC-V
        riscv64     - 64-bit RISC-V
        sparc       - Sparc
        sparcel     - Sparc LE
        sparcv9     - Sparc V9
        systemz     - SystemZ
        thumb       - Thumb
        thumbeb     - Thumb (big endian)
        ve          - VE
        wasm32      - WebAssembly 32-bit
        wasm64      - WebAssembly 64-bit
        x86         - 32-bit X86: Pentium-Pro and above
        x86-64      - 64-bit X86: EM64T and AMD64
        xcore       - XCore
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
  • 相关阅读:
    超越npm和yarn的包管理工具,为什么说pnpm才是工程化项目的未来。
    你可能忘了的HTML知识 建议看看
    【Numpy总结】第四节:Numpy的切片索引与高级索引
    如何写好技术文档 - 排版格式和规范(一)
    上线部署流程
    Java 18中简单 Web 服务器
    [SSR渲染学习]nuxt的跨域处理
    python-----字典练习
    电脑屏幕变色了怎么调回来,电脑屏幕颜色怎么改
    HTML5期末大作业——HTML+CSS+JavaScript平遥古城旅游景点介绍(6页)
  • 原文地址:https://blog.csdn.net/mxcai2005/article/details/132722659