]> rtime.felk.cvut.cz Git - hercules2020/hercules-compiler.git/blob - Makefile
Specify minimum cmake version
[hercules2020/hercules-compiler.git] / Makefile
1 PREFIX ?= $(HOME)/opt/hercules-compiler
2 TMP_DESTDIR = $(CURDIR)/install
3
4 all: passes libpremnotify-cpu
5
6 llvm-clang: build/bin/opt
7
8 build/bin/opt: build/build.ninja
9         ninja -C build
10
11 llvm/tools/clang:
12         ln -s ../../clang $@
13
14 llvm/projects/openmp:
15         ln -s ../../openmp $@
16
17 build build_passes build_native:
18         mkdir $@
19
20 ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
21
22 LLVM_TBLGEN=$(CURDIR)/build_native/bin/llvm-tblgen
23 CLANG_TBLGEN=$(CURDIR)/build_native/bin/clang-tblgen
24
25 LLVM_CROSS_FLAGS += -DCMAKE_C_COMPILER=$(DEB_HOST_GNU_TYPE)-gcc
26 LLVM_CROSS_FLAGS += -DCMAKE_CXX_COMPILER=$(DEB_HOST_GNU_TYPE)-g++
27 LLVM_CROSS_FLAGS += -DCMAKE_SYSTEM_PROCESSOR=$(DEB_HOST_GNU_CPU)
28
29 LLVM_CROSS_FLAGS += -DCMAKE_CROSSCOMPILING=True
30 ## We don't need host tablegens, because we use qemu & binfmt to run
31 ## arm64 binaries on x86
32 # LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="<path-to-host-bin>/llvm-tblgen"
33 # LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="<path-to-host-bin>/clang-tblgen"
34 LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="$(LLVM_TBLGEN)"
35 LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="$(CLANG_TBLGEN)"
36 LLVM_CROSS_FLAGS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(DEB_HOST_GNU_TYPE)
37 LLVM_CROSS_FLAGS += -DLLVM_TARGET_ARCH=$(DEB_TARGET_GNU_CPU)
38 #LLVM_CROSS_FLAGS += -DLLVM_TARGETS_TO_BUILD=$(shell echo $(DEB_HOST_ARCH)|tr '[:lower:]' '[:upper:]')
39
40 build/build.ninja: | $(LLVM_TBLGEN) $(CLANG_TBLGEN)
41
42 $(LLVM_TBLGEN) $(CLANG_TBLGEN): | build_native/build.ninja
43         ninja -C build_native bin/llvm-tblgen bin/clang-tblgen
44
45 build_native/build.ninja: | build_native
46         cd $(@D) && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
47                 -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF \
48                 -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON \
49                 -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules\"' \
50                 -G "Ninja" $(CURDIR)/llvm
51 endif
52
53
54 build/build.ninja: | build llvm/tools/clang llvm/projects/openmp
55         cd $(@D) && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
56                 -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF \
57                 -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON $(LLVM_CROSS_FLAGS) \
58                 -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules\"' \
59                 -G "Ninja" $(CURDIR)/llvm
60
61 $(TMP_DESTDIR)/$(PREFIX)/lib/cmake/llvm: | llvm-clang
62         DESTDIR=$(TMP_DESTDIR) ninja -C build install
63
64 build_passes/build.ninja: | build_passes $(TMP_DESTDIR)/$(PREFIX)/lib/cmake/llvm
65         cd $(@D) && cmake -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
66                 -DLLVM_DIR':'STRING=$(TMP_DESTDIR)$(PREFIX)/lib/cmake/llvm -DCMAKE_BUILD_TYPE=DEBUG \
67                 $(LLVM_CROSS_FLAGS) -DLLVM_TARGETS_TO_BUILD="X86;ARM" \
68                 -G "Ninja" $(CURDIR)/HerculesCompiler/llvm-passes
69
70 passes: build_passes/build.ninja
71         ninja -C build_passes
72
73 $(DESTDIR)$(PREFIX)/bin/herculesCompileCPU.sh: HerculesCompiler/cpu-driver/herculesCompileCPU.sh
74         sed -e '/^PASSROOT=/          s!=.*!="$(PREFIX)/lib/hercules"!'  \
75             -e '/^LLVM_BIN_DIR=/      s!=.*!="$(PREFIX)/bin/"!'  \
76             -e '/^PREM_RUNTIME_PATH=/ s!=.*!="$(PREFIX)/lib/hercules"!'  \
77                 < $< > $@
78         chmod +x $@
79
80 libpremnotify-cpu:
81         $(MAKE) -C HerculesCompiler/libpremnotify
82
83 install: all
84         DESTDIR=$(DESTDIR) ninja -C build install
85         DESTDIR=$(DESTDIR) ninja -C build_passes install
86         $(MAKE) $(DESTDIR)$(PREFIX)/bin/herculesCompileCPU.sh
87         $(MAKE) -C HerculesCompiler/libpremnotify install DESTDIR=$(DESTDIR) PREFIX=$(PREFIX)
88
89 clean:
90         rm -rf build build_passes install
91
92 define tar_concat
93 $(foreach subarch,$(shell git submodule --quiet foreach 'echo $$toplevel/../$(prefix)-$$path.tar'),tar --concatenate --file=../$(prefix).tar $(subarch)
94 )
95 endef
96
97 create-orig-tgz: prefix=$(notdir $(CURDIR))
98 create-orig-tgz:
99         git archive --format=tar --prefix=$(prefix)/ -o ../$(prefix).tar HEAD
100         git submodule foreach 'git archive --format=tar --prefix=$(prefix)/$$path/ -o $$toplevel/../$(prefix)-$$path.tar HEAD'
101         $(tar_concat)
102         gzip -c ../$(prefix).tar > "../$(prefix)_$(shell dpkg-parsechangelog --show-field Version|sed -e s/-.*//).orig.tar.gz"
103
104 cross-tx2:
105         sbuild --host=arm64 -d xenial --add-depends="libc6-dev, libstdc++-5-dev" --build-failed-commands='%s'