]> rtime.felk.cvut.cz Git - hercules2020/hercules-compiler.git/blobdiff - Makefile
Update patch
[hercules2020/hercules-compiler.git] / Makefile
index 7142f4a2ff0e8f65e8aff61c4345fc0eba086d58..1c0e49520b46be17cd9977a50c876a416a2578c1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,11 @@
 PREFIX = $(HOME)/opt/hercules-compiler
-all: build/bin/clang
+TMP_DESTDIR = $(CURDIR)/install
 
-build/bin/clang: build/build.ninja
+all: passes libpremnotify-cpu
+
+llvm-clang: build/bin/opt
+
+build/bin/opt: build/build.ninja
        ninja -C build
 
 llvm/tools/clang:
@@ -10,14 +14,71 @@ llvm/tools/clang:
 llvm/projects/openmp:
        ln -s ../../openmp $@
 
-build:
+build build_passes:
        mkdir $@
 
-build/build.ninja: build llvm/tools/clang llvm/projects/openmp
-       cd $(@D) && cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="$(PREFIX)" -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON -G "Ninja" $(CURDIR)/llvm
+ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
+
+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)
+
+LLVM_CROSS_FLAGS += -DCMAKE_CROSSCOMPILING=True
+## We don't need host tablegens, because we use qemu & binfmt to run
+## 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_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:]')
+endif
+
+
+build/build.ninja: | build llvm/tools/clang llvm/projects/openmp
+       cd $(@D) && cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
+               -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF \
+               -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON $(LLVM_CROSS_FLAGS) \
+               -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules\"' \
+               -G "Ninja" $(CURDIR)/llvm
+
+$(TMP_DESTDIR)/$(PREFIX)/lib/cmake/llvm: | llvm-clang
+       DESTDIR=$(TMP_DESTDIR) ninja -C build install
+
+build_passes/build.ninja: | build_passes $(TMP_DESTDIR)/$(PREFIX)/lib/cmake/llvm
+       cd $(@D) && cmake -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
+               -DLLVM_DIR':'STRING=$(TMP_DESTDIR)$(PREFIX)/lib/cmake/llvm -DCMAKE_BUILD_TYPE=DEBUG \
+               -DLLVM_TARGETS_TO_BUILD="X86;ARM" -G "Ninja" $(CURDIR)/HerculesCompiler/llvm-passes
+
+passes: build_passes/build.ninja
+       ninja -C build_passes
+
+$(DESTDIR)$(PREFIX)/bin/herculesCompileCPU.sh: HerculesCompiler/cpu-driver/herculesCompileCPU.sh
+       sed -e '/^PASSROOT=/          s!=.*!="$(PREFIX)/lib/hercules"!'  \
+           -e '/^LLVM_BIN_DIR=/      s!=.*!="$(PREFIX)/bin/"!'  \
+           -e '/^PREM_RUNTIME_PATH=/ s!=.*!="$(PREFIX)/lib/hercules"!'  \
+               < $< > $@
+       chmod +x $@
+
+libpremnotify-cpu:
+       $(MAKE) -C HerculesCompiler/libpremnotify
 
 install: all
-       cd build && ninja install
+       DESTDIR=$(DESTDIR) ninja -C build install
+       DESTDIR=$(DESTDIR) ninja -C build_passes install
+       $(MAKE) $(DESTDIR)$(PREFIX)/bin/herculesCompileCPU.sh
+       $(MAKE) -C HerculesCompiler/libpremnotify install DESTDIR=$(DESTDIR) PREFIX=$(PREFIX)
 
 clean:
-       rm -rf build
+       rm -rf build build_passes install
+
+define tar_concat
+$(foreach subarch,$(shell git submodule --quiet foreach 'echo $$toplevel/../$(prefix)-$$path.tar'),tar --concatenate --file=../$(prefix).tar $(subarch)
+)
+endef
+
+create-orig-tgz: prefix=$(notdir $(CURDIR))
+create-orig-tgz:
+       git archive --format=tar --prefix=$(prefix)/ -o ../$(prefix).tar HEAD
+       git submodule foreach 'git archive --format=tar --prefix=$(prefix)/$$path/ -o $$toplevel/../$(prefix)-$$path.tar HEAD'
+       $(tar_concat)
+       gzip -c ../$(prefix).tar > "../$(prefix)_$(shell dpkg-parsechangelog --show-field Version|sed -e s/-.*//).orig.tar.gz"