]> rtime.felk.cvut.cz Git - hercules2020/hercules-compiler.git/blob - Makefile
Update changelog for 2018.12.14-1 release
[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 USE_GPUGUARD = # OFF if empty
9
10 all: libpremnotify
11 all: passes
12
13 llvm-clang: build/bin/opt
14
15 build/bin/opt: build/build.ninja
16         ninja -C build
17
18 llvm/tools/clang:
19         ln -s ../../clang $@
20
21 llvm/tools/lld:
22         ln -s ../../lld $@
23
24 llvm/projects/openmp:
25         ln -s ../../openmp $@
26
27 build build_passes build_native:
28         mkdir $@
29
30 ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
31
32 LLVM_TBLGEN=$(CURDIR)/build_native/bin/llvm-tblgen
33 CLANG_TBLGEN=$(CURDIR)/build_native/bin/clang-tblgen
34
35 LLVM_CROSS_FLAGS += -DCMAKE_C_COMPILER=$(DEB_HOST_GNU_TYPE)-gcc-5
36 LLVM_CROSS_FLAGS += -DCMAKE_CXX_COMPILER=$(DEB_HOST_GNU_TYPE)-g++-5
37 LLVM_CROSS_FLAGS += -DCMAKE_SYSTEM_PROCESSOR=$(DEB_HOST_GNU_CPU)
38
39 LLVM_CROSS_FLAGS += -DCMAKE_CROSSCOMPILING=True
40 ## We don't need host tablegens, because we use qemu & binfmt to run
41 ## arm64 binaries on x86
42 # LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="<path-to-host-bin>/llvm-tblgen"
43 # LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="<path-to-host-bin>/clang-tblgen"
44 LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="$(LLVM_TBLGEN)"
45 LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="$(CLANG_TBLGEN)"
46 LLVM_CROSS_FLAGS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(DEB_HOST_GNU_TYPE)
47 LLVM_CROSS_FLAGS += -DLLVM_TARGET_ARCH=$(DEB_TARGET_GNU_CPU)
48 #LLVM_CROSS_FLAGS += -DLLVM_TARGETS_TO_BUILD=$(shell echo $(DEB_HOST_ARCH)|tr '[:lower:]' '[:upper:]')
49
50 build/build.ninja: | $(LLVM_TBLGEN) $(CLANG_TBLGEN)
51
52 $(LLVM_TBLGEN) $(CLANG_TBLGEN): | build_native/build.ninja
53         ninja -C build_native bin/llvm-tblgen bin/clang-tblgen
54
55 build_native/build.ninja: | build_native
56         cd $(@D) && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
57                 -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF \
58                 -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON \
59                 -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules/src/passes/\"' \
60                 -G "Ninja" $(CURDIR)/llvm
61
62 libpremnotify: export CC=$(DEB_HOST_GNU_TYPE)-gcc-5
63 endif
64
65
66 build/build.ninja: | build llvm/tools/clang llvm/tools/lld llvm/projects/openmp
67         cd $(@D) && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
68                 -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF \
69                 -DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON $(LLVM_CROSS_FLAGS) \
70                 -DLLVM_ENABLE_LLD=ON -DLLVM_TOOL_LLD_BUILD=ON \
71                 -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules/src/passes/\" -DOPENMP_NVPTX_COMPUTE_CAPABILITY=62 $(if $(USE_GPUGUARD),-DUSE_GPUGUARD)' \
72                 -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITY="62" \
73                 -G"Ninja" $(CURDIR)/llvm
74
75 $(TMP_DESTDIR)/$(PREFIX)/lib/cmake/llvm: | llvm-clang
76         DESTDIR=$(TMP_DESTDIR) ninja -C build install
77
78 build_passes/build.ninja: | build_passes $(TMP_DESTDIR)/$(PREFIX)/lib/cmake/llvm
79         cd $(@D) && cmake -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
80                 -DLLVM_DIR':'STRING=$(TMP_DESTDIR)$(PREFIX)/lib/cmake/llvm \
81                 -DCMAKE_BUILD_TYPE=DEBUG \
82                 $(LLVM_CROSS_FLAGS) -DLLVM_TARGETS_TO_BUILD="X86;ARM" \
83                 -DCPU_CACHE_SIZE_DEFAULT=524288 \
84                 -DGPU_CACHE_SIZE_DEFAULT=524288 \
85                 -DGPU_SCRATCHPAD_SIZE_DEFAULT=48000 \
86                 -DUSE_HW_CACHES=ON \
87                 -DHIERARCHICAL_INTERVALS=ON \
88                 -DPREFETCH_REPS=1 \
89                 -DUSE_HW_CACHES_PREFETCH=ON \
90                 -DUSE_HW_CACHES_INLINEPTX_PREFETCH=OFF \
91                 -DUSE_HW_CACHES_LIBCALL=OFF \
92                 -DUSE_HW_CACHES_VOLALOAD=OFF \
93                 -DUSE_HW_CACHES_SINGLEWRITEBACK=OFF \
94                 -DUSE_HW_CACHES_INDWRITEBACK_LIBCALL=ON \
95                 -DUSE_HW_CACHES_INDWRITEBACK_INLINE=OFF \
96                 -DULES_EXTERNAL_LINKAGE=OFF \
97                 -DALWAYS_INLINE_UNSPECIALIZED=OFF \
98                 -DALWAYS_INLINE_LOAD=OFF \
99                 -DALWAYS_INLINE_EXECUTE=OFF \
100                 -DALWAYS_INLINE_STORE=OFF \
101                 -DAGGRESSIVELY_INLINE_CALL_TREE=OFF \
102                 -G "Ninja" $(CURDIR)/HerculesCompiler/llvm-passes
103
104 passes: build_passes/build.ninja
105         ninja -C build_passes
106
107 libpremnotify:
108         $(MAKE) -C HerculesCompiler/libpremnotify NVCC_FLAGS=$(if $(USE_GPUGUARD),-DUSE_GPUGUARD)
109
110 install: all
111         DESTDIR=$(DESTDIR) ninja -C build install
112         DESTDIR=$(DESTDIR) ninja -C build_passes install
113         $(MAKE) -C HerculesCompiler/libpremnotify install DESTDIR=$(DESTDIR) PREFIX=$(PREFIX)
114
115 clean:
116         rm -rf build build_passes build_native install
117
118 create-orig-tgz: prefix=$(notdir $(CURDIR))
119 create-orig-tgz: upstream_version=$(shell dpkg-parsechangelog --show-field Version|sed -e s/-.*//)
120 create-orig-tgz:
121         git archive --prefix=$(prefix)/ -o ../$(prefix)_$(upstream_version).orig.tar.gz HEAD
122         git submodule foreach 'set -x; git archive --prefix=$$path/ -o $$toplevel/../$(prefix)_$(upstream_version).orig-$$path.tar.gz $$sha1'
123
124 cross-tx2:
125         sbuild --host=arm64 -d xenial --add-depends="libc6-dev, libstdc++-5-dev" --build-failed-commands='%s'