Skip to content

Conversation

@dkurt
Copy link
Contributor

@dkurt dkurt commented Oct 7, 2022

Hi! I tried cross-compile Halide with LLVM for RISC-V host and found that imported targets llvm-as and clang ignore CMAKE_CROSSCOMPILING_EMULATOR. So need to use it manually in the command.

Please let me know if you're interested in the complete cross-compilation guide.

@alexreinking
Copy link
Member

Hmm, is there no way to import host-built LLVM tools, but target-built binaries?

@alexreinking
Copy link
Member

alexreinking commented Oct 7, 2022

found that imported targets llvm-as and clang ignore CMAKE_CROSSCOMPILING_EMULATOR.

Yes. That is how add_custom_command works... the intent is that imported targets that are used in custom commands should be built for the host.

@dkurt
Copy link
Contributor Author

dkurt commented Oct 7, 2022

Hmm, is there no way to import host-built LLVM tools, but target-built binaries?

@alexreinking, I tried LLVM and Halide both with RISC-V toolchain in this scenario. So am I right that it's not necessary to cross-compile LLVM but use host version and cross-compile only Halide?

@dkurt
Copy link
Contributor Author

dkurt commented Oct 7, 2022

Oh, you're absoultely right. I just had to specify ZLIB_LIBRARY to the right location and now it's OK.

@dkurt dkurt closed this Oct 7, 2022
@dkurt dkurt deleted the fix_cross_compilation branch October 7, 2022 16:33
@alexreinking
Copy link
Member

Glad it's working. 🙂

In the future, please open an issue with at least an error message (but ideally a reproducer) first so we can evaluate whether a proposed fix is the best one.

@dkurt
Copy link
Contributor Author

dkurt commented Oct 7, 2022

@alexreinking, actually, I think I got stuck again 😅. I tried two approaches:

  1. x86 LLVM + RISC-V Halide (an error below)
  2. RISC-V LLVM + RISC-V Halide (OK but requires the changes from this PR)
x86 LLVM + RISC-V Halide

Build LLVM

git clone --depth 1 --branch llvmorg-15.0.2 https://github.com/llvm/llvm-project.git

cmake -DCMAKE_BUILD_TYPE=Release \
      -DLLVM_ENABLE_PROJECTS="clang;lld;clang-tools-extra" \
      -DLLVM_TARGETS_TO_BUILD="X86;RISCV" \
      -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ASSERTIONS=ON \
      -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_BUILD_32_BITS=OFF \
      -S llvm-project/llvm -B llvm-build

cmake --build llvm-build -j$(nproc --all)
cmake --install llvm-build --prefix llvm-install

Install zlib (tested on Ubuntu 20.04):

sudo dpkg --add-architecture riscv64
sudo sed -i -E 's|^deb ([^ ]+) (.*)$|deb [arch=amd64] \1 \2\ndeb [arch=riscv64] http://ports.ubuntu.com/ubuntu-ports/ \2|' /etc/apt/sources.list
sudo apt-get update
sudo apt-get install -y zlib1g-dev:riscv64

Build a toolchain

git clone --depth 1 https://github.com/riscv-collab/riscv-gnu-toolchain

cd riscv-gnu-toolchain
git submodule init
git submodule update glibc
git submodule update gcc
cd glibc && git checkout 9ea3686 && cd ..
cd gcc && git checkout 13c83c4 && cd ..

./configure --prefix=/opt/riscv
sudo make linux -j$(nproc --all)
sudo make build-qemu -j$(nproc --all)

Build Halide

Using a file riscv64.toolchain.cmake:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR riscv64)

set(CMAKE_C_COMPILER riscv64-unknown-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER riscv64-unknown-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

find_program(QEMU_RISCV64 qemu-riscv64)
if (QEMU_RISCV64)
    set(CMAKE_CROSSCOMPILING_EMULATOR ${QEMU_RISCV64})
endif ()
git clone --depth 1 -b riscv_update https://github.com/halide/Halide

export PATH=/opt/riscv/bin:$PATH

cmake -DLLVM_DIR=$(realpath llvm-install/lib/cmake/llvm) \
          -DCMAKE_BUILD_TYPE=Release \
          -DZLIB_LIBRARY=/usr/lib/riscv64-linux-gnu/libz.so \
          -DCMAKE_TOOLCHAIN_FILE=$(realpath riscv64.toolchain.cmake) \
          -DWITH_TESTS=OFF \
          -DWITH_TUTORIALS=OFF \
          -DWITH_PYTHON_BINDINGS=OFF \
          -S Halide -B halide-build-rvv

cmake --build halide-build-rvv -j$(nproc --all)
Error log
[ 98%] Linking CXX shared library libHalide.so
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a(MCJIT.cpp.o): Relocations in generic ELF (EM: 62)
/opt/riscv/lib/gcc/riscv64-unknown-linux-gnu/9.4.0/../../../../riscv64-unknown-linux-gnu/bin/ld: /home/dkurt/llvm-install/lib/libLLVMMCJIT.a: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
make[2]: *** [src/CMakeFiles/Halide.dir/build.make:3714: src/libHalide.so.15.0.0] Error 1
make[1]: *** [CMakeFiles/Makefile2:509: src/CMakeFiles/Halide.dir/all] Error 2
make: *** [Makefile:166: all] Error 2

@dkurt
Copy link
Contributor Author

dkurt commented Nov 17, 2022

Sorry, still cannot cross-compile LLVM+Halide without these changes. Used crossbuild-essential-riscv64.

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR riscv64)

set(CMAKE_C_COMPILER riscv64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER riscv64-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

find_program(QEMU_RISCV64 qemu-riscv64-static)
if (QEMU_RISCV64)
    set(CMAKE_CROSSCOMPILING_EMULATOR ${QEMU_RISCV64})
endif ()

LLVM:

cmake -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_TOOLCHAIN_FILE=$(realpath riscv64.toolchain.cmake) \
      -DLLVM_ENABLE_PROJECTS="clang;lld;clang-tools-extra" \
      -DLLVM_TARGETS_TO_BUILD="X86;RISCV" \
      -DLLVM_TARGET_ARCH="riscv64" \
      -DLLVM_HOST_TRIPLE="riscv64-unknown-linux-gnu" \
      -DLLVM_DEFAULT_TARGET_TRIPLE="riscv64-unknown-linux-gnu" \
      -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_ENABLE_ASSERTIONS=ON \
      -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_BUILD_32_BITS=OFF \
      -S llvm-project/llvm -B llvm-build-riscv64

cmake --build llvm-build-riscv64/ -j4
cmake --install llvm-build-riscv64 --prefix llvm-install-riscv64 

Halide:

cmake -DLLVM_DIR=$(realpath llvm-install-riscv64/lib/cmake/llvm) \
      -DClang_DIR=$(realpath llvm-install-riscv64/lib/cmake/clang) \
      -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_TOOLCHAIN_FILE=$(realpath riscv64.toolchain.cmake) \
      -DWITH_TESTS=OFF \
      -DWITH_TUTORIALS=OFF \
      -DWITH_PYTHON_BINDINGS=OFF \
      -S Halide -B halide-build-riscv64

cmake --build halide-build-riscv64 -j4

OK with this PR and /bin/sh: 1: /home/dkurt/llvm-install-riscv64/bin/clang-16: Exec format error without.

@dkurt
Copy link
Contributor Author

dkurt commented Feb 6, 2023

Please review

@alexreinking alexreinking merged commit a55a09a into halide:main Feb 7, 2023
ardier pushed a commit to ardier/Halide-mutation that referenced this pull request Mar 3, 2024
Use CMAKE_CROSSCOMPILING_EMULATOR for llvm-as and clang imported targets
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants