PREFIX ?= $(HOME)/opt/hercules-compiler TMP_DESTDIR = $(CURDIR)/install # 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 build/bin/opt: build/build.ninja ninja -C build llvm/tools/clang: ln -s ../../clang $@ llvm/tools/lld: ln -s ../../lld $@ llvm/projects/openmp: ln -s ../../openmp $@ build build_passes build_native: mkdir $@ ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) 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-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 ## We don't need host tablegens, because we use qemu & binfmt to run ## arm64 binaries on x86 # LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="/llvm-tblgen" # LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="/clang-tblgen" LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="$(LLVM_TBLGEN)" LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="$(CLANG_TBLGEN)" LLVM_CROSS_FLAGS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(DEB_HOST_GNU_TYPE) LLVM_CROSS_FLAGS += -DLLVM_TARGET_ARCH=$(DEB_TARGET_GNU_CPU) #LLVM_CROSS_FLAGS += -DLLVM_TARGETS_TO_BUILD=$(shell echo $(DEB_HOST_ARCH)|tr '[:lower:]' '[:upper:]') build/build.ninja: | $(LLVM_TBLGEN) $(CLANG_TBLGEN) $(LLVM_TBLGEN) $(CLANG_TBLGEN): | build_native/build.ninja ninja -C build_native bin/llvm-tblgen bin/clang-tblgen build_native/build.ninja: | build_native 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/src/passes/\"' \ -G "Ninja" $(CURDIR)/llvm libpremnotify: export CC=$(DEB_HOST_GNU_TYPE)-gcc-5 endif 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) \ -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 \ $(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=ON \ -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=OFF \ -DALWAYS_INLINE_LOAD=OFF \ -DALWAYS_INLINE_EXECUTE=OFF \ -DALWAYS_INLINE_STORE=OFF \ -DAGGRESSIVELY_INLINE_CALL_TREE=OFF \ -G "Ninja" $(CURDIR)/HerculesCompiler/llvm-passes passes: build_passes/build.ninja ninja -C build_passes 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) -C HerculesCompiler/libpremnotify install DESTDIR=$(DESTDIR) PREFIX=$(PREFIX) clean: 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/-.*//) create-orig-tgz: git archive --prefix=$(prefix)/ -o ../$(prefix)_$(upstream_version).orig.tar.gz HEAD git submodule foreach 'set -x; git archive --prefix=$$path/ -o $$toplevel/../$(prefix)_$(upstream_version).orig-$$path.tar.gz $$sha1' cross-tx2: sbuild --host=arm64 -d xenial --add-depends="libc6-dev, libstdc++-5-dev" --build-failed-commands='%s'