PREFIX ?= $(HOME)/opt/hercules-compiler
TMP_DESTDIR = $(CURDIR)/install
-all: libpremnotify-cpu
+# With gcc > 5, we get strange CUDA-related errors in clang.
+export CC = gcc-5
+export CXX = g++-5
+
+USE_GPUGUARD = # OFF if empty
+
+all: libpremnotify
all: passes
llvm-clang: build/bin/opt
llvm/tools/clang:
ln -s ../../clang $@
+llvm/tools/lld:
+ ln -s ../../lld $@
+
llvm/projects/openmp:
ln -s ../../openmp $@
LLVM_TBLGEN=$(CURDIR)/build_native/bin/llvm-tblgen
CLANG_TBLGEN=$(CURDIR)/build_native/bin/clang-tblgen
-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_C_COMPILER=$(DEB_HOST_GNU_TYPE)-gcc-5
+LLVM_CROSS_FLAGS += -DCMAKE_CXX_COMPILER=$(DEB_HOST_GNU_TYPE)-g++-5
LLVM_CROSS_FLAGS += -DCMAKE_SYSTEM_PROCESSOR=$(DEB_HOST_GNU_CPU)
LLVM_CROSS_FLAGS += -DCMAKE_CROSSCOMPILING=True
cd $(@D) && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
-DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_BACKTRACES=ON -DLLVM_ENABLE_WERROR=OFF \
-DBUILD_SHARED_LIBS=OFF -DLLVM_ENABLE_RTTI=ON \
- -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules\"' \
+ -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules/src/passes/\"' \
-G "Ninja" $(CURDIR)/llvm
-libpremnotify-cpu: export CC=$(DEB_HOST_GNU_TYPE)-gcc
+libpremnotify: export CC=$(DEB_HOST_GNU_TYPE)-gcc-5
endif
-build/build.ninja: | build llvm/tools/clang llvm/projects/openmp
+build/build.ninja: | build llvm/tools/clang llvm/tools/lld llvm/projects/openmp
cd $(@D) && cmake -DCMAKE_BUILD_TYPE=Release -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
+ -DLLVM_ENABLE_LLD=ON -DLLVM_TOOL_LLD_BUILD=ON \
+ -DCMAKE_CXX_FLAGS='-DHERCULES_PASS_ROOT=\"$(PREFIX)/lib/hercules/src/passes/\" -DOPENMP_NVPTX_COMPUTE_CAPABILITY=62 $(if $(USE_GPUGUARD),-DUSE_GPUGUARD)' \
+ -DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITY="62" \
+ -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_DIR':'STRING=$(TMP_DESTDIR)$(PREFIX)/lib/cmake/llvm \
+ -DCMAKE_BUILD_TYPE=DEBUG \
$(LLVM_CROSS_FLAGS) -DLLVM_TARGETS_TO_BUILD="X86;ARM" \
+ -DCPU_CACHE_SIZE_DEFAULT=524288 \
+ -DGPU_CACHE_SIZE_DEFAULT=524288 \
+ -DGPU_SCRATCHPAD_SIZE_DEFAULT=48000 \
+ -DUSE_HW_CACHES=OFF \
+ -DHIERARCHICAL_INTERVALS=ON \
+ -DPREFETCH_REPS=1 \
+ -DUSE_HW_CACHES_PREFETCH=ON \
+ -DUSE_HW_CACHES_INLINEPTX_PREFETCH=OFF \
+ -DUSE_HW_CACHES_LIBCALL=OFF \
+ -DUSE_HW_CACHES_VOLALOAD=OFF \
+ -DUSE_HW_CACHES_SINGLEWRITEBACK=OFF \
+ -DUSE_HW_CACHES_INDWRITEBACK_LIBCALL=ON \
+ -DUSE_HW_CACHES_INDWRITEBACK_INLINE=OFF \
+ -DULES_EXTERNAL_LINKAGE=OFF \
+ -DALWAYS_INLINE_UNSPECIALIZED=ON \
+ -DALWAYS_INLINE_LOAD=ON \
+ -DALWAYS_INLINE_EXECUTE=ON \
+ -DALWAYS_INLINE_STORE=ON \
+ -DAGGRESSIVELY_INLINE_CALL_TREE=ON \
-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
+libpremnotify:
+ $(MAKE) -C HerculesCompiler/libpremnotify NVCC_FLAGS=$(if $(USE_GPUGUARD),-DUSE_GPUGUARD)
install: all
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 build_passes install
+ rm -rf build build_passes build_native install
create-orig-tgz: prefix=$(notdir $(CURDIR))
create-orig-tgz: upstream_version=$(shell dpkg-parsechangelog --show-field Version|sed -e s/-.*//)