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