1 PREFIX = $(HOME)/opt/hercules-compiler
2 TMP_DESTDIR = $(CURDIR)/install
4 all: passes libpremnotify-cpu
6 llvm-clang: build/bin/opt
8 build/bin/opt: build/build.ninja
20 ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
22 LLVM_CROSS_FLAGS += -DCMAKE_C_COMPILER=$(DEB_HOST_GNU_TYPE)-gcc
23 LLVM_CROSS_FLAGS += -DCMAKE_CXX_COMPILER=$(DEB_HOST_GNU_TYPE)-g++
24 LLVM_CROSS_FLAGS += -DCMAKE_SYSTEM_PROCESSOR=$(DEB_HOST_GNU_CPU)
26 LLVM_CROSS_FLAGS += -DCMAKE_CROSSCOMPILING=True
27 ## We don't need host tablegens, because we use qemu & binfmt to run
28 ## arm64 binaries on x86
29 # LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="<path-to-host-bin>/llvm-tblgen"
30 # LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="<path-to-host-bin>/clang-tblgen"
31 LLVM_CROSS_FLAGS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(DEB_HOST_GNU_TYPE)
32 LLVM_CROSS_FLAGS += -DLLVM_TARGET_ARCH=$(DEB_TARGET_GNU_CPU)
33 #LLVM_CROSS_FLAGS += -DLLVM_TARGETS_TO_BUILD=$(shell echo $(DEB_HOST_ARCH)|tr '[:lower:]' '[:upper:]')
37 build/build.ninja: | build llvm/tools/clang llvm/projects/openmp
38 cd $(@D) && cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
39 -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF \
40 -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON $(LLVM_CROSS_FLAGS) \
41 -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules\"' \
42 -G "Ninja" $(CURDIR)/llvm
44 $(TMP_DESTDIR)/$(PREFIX)/lib/cmake/llvm: | llvm-clang
45 DESTDIR=$(TMP_DESTDIR) ninja -C build install
47 build_passes/build.ninja: | build_passes $(TMP_DESTDIR)/$(PREFIX)/lib/cmake/llvm
48 cd $(@D) && cmake -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
49 -DLLVM_DIR':'STRING=$(TMP_DESTDIR)$(PREFIX)/lib/cmake/llvm -DCMAKE_BUILD_TYPE=DEBUG \
50 -DLLVM_TARGETS_TO_BUILD="X86;ARM" -G "Ninja" $(CURDIR)/HerculesCompiler/llvm-passes
52 passes: build_passes/build.ninja
55 $(DESTDIR)$(PREFIX)/bin/herculesCompileCPU.sh: HerculesCompiler/cpu-driver/herculesCompileCPU.sh
56 sed -e '/^PASSROOT=/ s!=.*!="$(PREFIX)/lib/hercules"!' \
57 -e '/^LLVM_BIN_DIR=/ s!=.*!="$(PREFIX)/bin/"!' \
58 -e '/^PREM_RUNTIME_PATH=/ s!=.*!="$(PREFIX)/lib/hercules"!' \
63 $(MAKE) -C HerculesCompiler/libpremnotify
66 DESTDIR=$(DESTDIR) ninja -C build install
67 DESTDIR=$(DESTDIR) ninja -C build_passes install
68 $(MAKE) $(DESTDIR)$(PREFIX)/bin/herculesCompileCPU.sh
69 $(MAKE) -C HerculesCompiler/libpremnotify install DESTDIR=$(DESTDIR) PREFIX=$(PREFIX)
72 rm -rf build build_passes install
75 $(foreach subarch,$(shell git submodule --quiet foreach 'echo $$toplevel/../$(prefix)-$$path.tar'),tar --concatenate --file=../$(prefix).tar $(subarch)
79 create-orig-tgz: prefix=$(notdir $(CURDIR))
81 git archive --format=tar --prefix=$(prefix)/ -o ../$(prefix).tar HEAD
82 git submodule foreach 'git archive --format=tar --prefix=$(prefix)/$$path/ -o $$toplevel/../$(prefix)-$$path.tar HEAD'
84 gzip -c ../$(prefix).tar > "../$(prefix)_$(shell dpkg-parsechangelog --show-field Version|sed -e s/-.*//).orig.tar.gz"