]> rtime.felk.cvut.cz Git - hercules2020/hercules-compiler.git/commitdiff
Build native *-tblgen during cross builds
authorMichal Sojka <michal.sojka@cvut.cz>
Thu, 10 May 2018 20:42:23 +0000 (22:42 +0200)
committerMichal Sojka <michal.sojka@cvut.cz>
Fri, 11 May 2018 05:08:47 +0000 (07:08 +0200)
For some reason, LLVM buildsystem does treat our crossbuilds as native
builds. Perhaps because we use qemu-user-static to allow running cross
binaries. To build everything correcly, native tblgen binaries are
needed.

This commit build native tblgen binaries and uses them for the cross
build.

Makefile

index ef0edf37bd71d6db049cd200430b205854b01fd7..938764d22b76dc42b90c6783ba534790e38e83a3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -14,11 +14,14 @@ llvm/tools/clang:
 llvm/projects/openmp:
        ln -s ../../openmp $@
 
-build build_passes:
+build build_passes build_native:
        mkdir $@
 
 ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
 
+LLVM_TBLGEN=$(CURDIR)/build_native/bin/llvm-tblgen
+CLANG_TBLGEN=$(CURDIR)/build_native/bin/clang-tblgen
+
 LLVM_CROSS_FLAGS += -DCMAKE_C_COMPILER=$(DEB_HOST_GNU_TYPE)-gcc
 LLVM_CROSS_FLAGS += -DCMAKE_CXX_COMPILER=$(DEB_HOST_GNU_TYPE)-g++
 LLVM_CROSS_FLAGS += -DCMAKE_SYSTEM_PROCESSOR=$(DEB_HOST_GNU_CPU)
@@ -28,9 +31,23 @@ LLVM_CROSS_FLAGS += -DCMAKE_CROSSCOMPILING=True
 ## arm64 binaries on x86
 # LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="<path-to-host-bin>/llvm-tblgen"
 # LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="<path-to-host-bin>/clang-tblgen"
+LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="$(LLVM_TBLGEN)"
+LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="$(CLANG_TBLGEN)"
 LLVM_CROSS_FLAGS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(DEB_HOST_GNU_TYPE)
 LLVM_CROSS_FLAGS += -DLLVM_TARGET_ARCH=$(DEB_TARGET_GNU_CPU)
 #LLVM_CROSS_FLAGS += -DLLVM_TARGETS_TO_BUILD=$(shell echo $(DEB_HOST_ARCH)|tr '[:lower:]' '[:upper:]')
+
+build/build.ninja: | $(LLVM_TBLGEN) $(CLANG_TBLGEN)
+
+$(LLVM_TBLGEN) $(CLANG_TBLGEN): | build_native/build.ninja
+       ninja -C build_native bin/llvm-tblgen bin/clang-tblgen
+
+build_native/build.ninja: | build_native
+       cd $(@D) && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
+               -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF \
+               -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON \
+               -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules\"' \
+               -G "Ninja" $(CURDIR)/llvm
 endif