]> rtime.felk.cvut.cz Git - hercules2020/hercules-compiler.git/blobdiff - Makefile
Update changelog for 2018.12.14-1 release
[hercules2020/hercules-compiler.git] / Makefile
index 5878c5226e92b50169f502b341c7f67bff065e7f..96794c3c89fe242355aa39cff22c930fa01f1b9d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,16 @@
-PREFIX = $(HOME)/opt/hercules-compiler
-all: build/bin/opt
+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
@@ -7,16 +18,22 @@ build/bin/opt: build/build.ninja
 llvm/tools/clang:
        ln -s ../../clang $@
 
+llvm/tools/lld:
+       ln -s ../../lld $@
+
 llvm/projects/openmp:
        ln -s ../../openmp $@
 
-build:
+build build_passes build_native:
        mkdir $@
 
 ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE))
 
-LLVM_CROSS_FLAGS += -DCMAKE_C_COMPILER=$(DEB_HOST_GNU_TYPE)-gcc
-LLVM_CROSS_FLAGS += -DCMAKE_CXX_COMPILER=$(DEB_HOST_GNU_TYPE)-g++
+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
@@ -24,27 +41,85 @@ LLVM_CROSS_FLAGS += -DCMAKE_CROSSCOMPILING=True
 ## arm64 binaries on x86
 # LLVM_CROSS_FLAGS += -DLLVM_TABLEGEN="<path-to-host-bin>/llvm-tblgen"
 # LLVM_CROSS_FLAGS += -DCLANG_TABLEGEN="<path-to-host-bin>/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/projects/openmp
-#      printenv | sort
-       cd $(@D) && cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="$(PREFIX)" \
+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) \
-               -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 \
+               $(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
-       cd build && ninja install
+       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
+       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 ls-files --recurse-submodules | sed "s#^#$(prefix)/#" | \
-       tar -c -C.. -z -f "../$(prefix)_$(shell dpkg-parsechangelog --show-field Version|sed -e s/-.*//).orig.tar.gz" --verbatim-files-from --files-from=-
+       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'