#!/usr/bin/make -f TARGET_BUILD := build-llvm GCC_VERSION := 4.7 LLVM_VERSION := 3.4 SONAME_EXT := 1 DEBIAN_REVISION := $(shell dpkg-parsechangelog | sed -rne 's,^Version: .*-(.*),\1,p') ifneq (,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) NJOBS := -j $(subst parallel=,,$(filter parallel=%,$(subst $(COMMA), ,$(DEB_BUILD_OPTIONS)))) endif VENDOR=$(shell lsb_release -is) DEB_HOST_MULTIARCH = $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) DEB_HOST_GNU_TYPE = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) DEB_HOST_ARCH_BITS = $(shell dpkg-architecture -qDEB_HOST_ARCH_BITS) DEB_HOST_ARCH = $(shell dpkg-architecture -qDEB_HOST_ARCH) OCAML_STDLIB_DIR ?= $(shell ocamlc -where) distribution := $(shell lsb_release --id --short) distrel := $(shell lsb_release --codename --short) ifeq ($(distrel),n/a) distrel := sid endif confargs := \ --with-c-include-dirs=/usr/include/$(DEB_HOST_MULTIARCH):/usr/include/$(DEB_HOST_GNU_TYPE):/usr/include \ --with-cxx-include-root=/usr/include/c++/$(GCC_VERSION) \ --with-cxx-include-arch=$(DEB_HOST_GNU_TYPE) \ --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) ifeq ($(shell dpkg-architecture -qDEB_HOST_ARCH_BITS),64) confargs += --with-cxx-include-32bit-dir=32 else confargs += --with-cxx-include-64bit-dir=64 endif opt_flags = -g -O2 ifneq (,$(findstring $(DEB_HOST_ARCH),armel)) opt_flags += -marm endif ifeq ($(distribution),Ubuntu) ifeq ($(distrel),precise) control_vars = '-Vdep:devlibs=libstdc++6-4.6-dev' endif ifeq ($(distrel),quantal) control_vars = '-Vdep:devlibs=libstdc++6-4.7-dev' endif ifeq ($(distrel),raring) control_vars = '-Vdep:devlibs=libstdc++6-4.7-dev, libgcc-4.7-dev, libobjc-4.7-dev' endif else ifeq ($(distrel),wheezy) control_vars = '-Vdep:devlibs=libstdc++6-4.7-dev' else # Debian experimental control_vars = '-Vdep:devlibs=libstdc++6-4.7-dev, libgcc-4.7-dev, libobjc-4.7-dev' endif endif ifneq (,$(filter codecoverage,$(DEB_BUILD_OPTIONS))) # enable the code coverage CODECOVERAGE=yes CXXFLAGS_EXTRA=-fprofile-arcs -ftest-coverage LDFLAGS_EXTRA=-coverage -lgcov endif ifneq (,$(filter scan-build,$(DEB_BUILD_OPTIONS))) # enable the build using scan-build PRE_CONFIGURE=scan-build endif %: dh $@ # --buildsystem=cmake --builddirectory=$(TARGET_BUILD) debian/%: debian/%.in sed -e 's|@DEB_HOST_MULTIARCH@|$(DEB_HOST_MULTIARCH)|g' -e "s|@OCAML_STDLIB_DIR@|$(OCAML_STDLIB_DIR)|g" -e "s|@LLVM_VERSION@|$(LLVM_VERSION)|g" $< > $@ override_dh_auto_configure: debian/lldb-$(LLVM_VERSION).install debian/lldb-$(LLVM_VERSION).links debian/libllvm$(LLVM_VERSION).install debian/llvm-$(LLVM_VERSION)-dev.links debian/libllvm-$(LLVM_VERSION)-ocaml-dev.install debian/libllvm-$(LLVM_VERSION)-ocaml-dev.dirs debian/llvm-$(LLVM_VERSION)-runtime.binfmt debian/llvm-$(LLVM_VERSION)-runtime.prerm mkdir -p $(TARGET_BUILD) mkdir -p clang/include/clang/Debian sed -e "s|@DEB_HOST_MULTIARCH@|$(DEB_HOST_MULTIARCH)|" \ -e "s|@DEB_HOST_GNU_TYPE@|$(DEB_HOST_GNU_TYPE)|" \ -e "s|@DEB_PATCHSETVERSION@|$(DEBIAN_REVISION)|" \ debian/debian_path.h > clang/include/clang/Debian/debian_path.h # Remove some old symlinks cd tools/ && \ if test -h clang; then \ rm clang; \ fi; \ ln -s ../clang .; \ readlink clang; \ if test -h lldb; then \ rm lldb; \ fi; \ ln -s ../lldb .; \ if test -h polly; then \ rm polly; \ fi; \ ln -s ../polly .; \ cd projects/ && \ if test -h compiler-rt; then \ rm compiler-rt; \ fi; \ ln -s ../compiler-rt .; \ readlink compiler-rt cp -R clang-tools-extra tools/clang/tools/extra # Start the actual configure cd $(TARGET_BUILD) && $(PRE_CONFIGURE) \ ../configure $(confargs) \ --prefix=/usr/lib/llvm-$(LLVM_VERSION) \ --bindir=\$${prefix}/bin/ \ --disable-assertions \ --enable-shared \ --enable-optimized \ --with-optimize-option=' $(opt_flags)' \ --enable-pic \ --enable-libffi \ --with-ocaml-libdir=/usr/lib/ocaml/llvm-$(LLVM_VERSION) \ --libdir=\$${prefix}/lib/$(DEB_HOST_MULTIARCH) \ --with-binutils-include=/usr/include \ --with-cloog --with-isl \ --with-bug-report-url=http://bugs.debian.org/ \ --enable-shared --enable-experimental-targets=R600 \ CLANG_VENDOR=$(VENDOR) || { cat config.log tools/polly/config.log; exit 1; } # cd $(TARGET_BUILD) && cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON # mkdir build-compiler-rt && cd build-compiler-rt && cmake ../compiler-rt override_dh_auto_build: $(MAKE) $(NJOBS) -C $(TARGET_BUILD) VERBOSE=1 CLANG_VENDOR=$(VENDOR) CXXFLAGS="$(CXXFLAGS_EXTRA) -std=c++0x" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 cd $(CURDIR)/docs && make -f Makefile.sphinx && make -f Makefile.sphinx man # $(MAKE) $(NJOBS) -C build-compiler-rt VERBOSE=1 # Only available from clang 3.3 cd $(CURDIR)/tools/clang/docs && make -f Makefile.sphinx override_dh_auto_install: $(MAKE) -C $(TARGET_BUILD) VERBOSE=1 install DESTDIR=$(CURDIR)/debian/tmp/ chrpath -d $(TARGET_BUILD)/Release/bin/clang chrpath -d `find $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/bin/ -type f -executable` mv $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/libLLVM-$(LLVM_VERSION)*.so $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/libLLVM-$(LLVM_VERSION).so.$(SONAME_EXT) mv $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/liblldb.so $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/liblldb.so.$(SONAME_EXT) cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ && mv libclang.so libclang.so.$(SONAME_EXT) && ln -s libclang.so.$(SONAME_EXT) libclang.so # cd $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/ && rm -rf $$(find . -iname "SubDir.lib*" -o -iname .dir) && rm -rf $$(find -empty) mkdir -p $(CURDIR)/debian/clang-$(LLVM_VERSION)/usr/bin/ cp compiler-rt/lib/asan/scripts/asan_symbolize.py $(CURDIR)/debian/clang-$(LLVM_VERSION)/usr/bin/asan_symbolize # Create this fake directory to make the install libclang-common-dev happy # under the unsupported archs of compiler-rt mkdir -p $(CURDIR)/debian/tmp/usr/lib/clang/$(LLVM_VERSION)/lib mkdir -p $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/lib/ # Rename binaries mkdir -p $(CURDIR)/debian/tmp/usr/bin/ cd $(CURDIR)/debian/tmp/usr/bin/; rm -f *; \ for f in ../lib/llvm-$(LLVM_VERSION)/bin/*; do \ ln -s $$f `basename $$f`-$(LLVM_VERSION); \ echo "Link $$f to `basename $$f`-$(LLVM_VERSION)"; \ done # Rename manpages d=$(CURDIR)/docs/_build/man/; \ cd $$d; \ for f in *.1; do \ echo "$$f"|grep "3\.3" || mv $$f `echo $$f|sed "s|\.1|-$(LLVM_VERSION).1|"`; \ done # Rename some stuff with the version name mv $(CURDIR)/$(TARGET_BUILD)/tools/clang/docs/tools/clang.1 $(CURDIR)/$(TARGET_BUILD)/tools/clang/docs/tools/clang-$(LLVM_VERSION).1 if test -f $(CURDIR)/utils/vim/llvm.vim; then \ mv $(CURDIR)/utils/vim/llvm.vim $(CURDIR)/utils/vim/llvm-$(LLVM_VERSION).vim; \ fi if test -f $(CURDIR)/utils/vim/tablegen.vim; then \ mv $(CURDIR)/utils/vim/tablegen.vim $(CURDIR)/utils/vim/tablegen-$(LLVM_VERSION).vim; \ fi mv $(CURDIR)/clang/tools/clang-format/clang-format-diff.py $(CURDIR)/clang/tools/clang-format/clang-format-diff-$(LLVM_VERSION) mv $(CURDIR)/clang/tools/clang-format/clang-format.py clang/tools/clang-format/clang-format-$(LLVM_VERSION).py # Remove some license files rm $(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/include/llvm/Support/LICENSE.TXT # Managed in lldb-X.Y.links.in rm -f $(CURDIR)/$(TARGET_BUILD)/Release/lib/python*/site-packages/lldb/_lldb.so # Remove the copy of jquery. See bug #701087 cd $(CURDIR)/docs/_build/html/_static/ && rm -f jquery.js && ln -s /usr/share/javascript/jquery/jquery.js override_dh_installman: dh_installman # Make sure that lli manpage is only in llvm-3.2-runtime (See #697117) rm -f $(CURDIR)/debian/llvm-$(LLVM_VERSION)/usr/share/man/man1/lli* .PHONY: override_dh_strip override_dh_strip: dh_strip -p libclang$(SONAME_EXT)-$(LLVM_VERSION) --dbg-package=libclang$(SONAME_EXT)-$(LLVM_VERSION)-dbg dh_strip -p libllvm$(LLVM_VERSION) --dbg-package=libllvm$(LLVM_VERSION)-dbg dh_strip -a override_dh_shlibdeps: LD_LIBRARY_PATH=$$LD_LIBRARY_PATH:$(CURDIR)/debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ dh_shlibdeps override_dh_installdeb: # Managed by the package dh_installdeb -a rm -f $(CURDIR)/debian/lldb-$(LLVM_VERSION)/usr/lib/python*/dist-packages/lldb/__init__.pyc override_dh_auto_test: # LLVM tests $(MAKE) -C $(TARGET_BUILD) check || true # clang tests cd $(TARGET_BUILD)/ && $(MAKE) -C tools/clang/ test || true # lldb tests cd $(TARGET_BUILD)/Release/lib/python2.7/site-packages/lldb && if test ! -h _lldb.so -o ! -f _lldb.so; then ln -s ../../../liblldb.so _lldb.so; fi cd $(TARGET_BUILD)/Release/lib/python2.7/site-packages/lldb && if test ! -h libLLVM-$(LLVM_VERSION).so.$(SONAME_EXT) -o ! -f _lldb.so; then ln -s ../../../libLLVM-$(LLVM_VERSION).so libLLVM-$(LLVM_VERSION).so.$(SONAME_EXT); fi cd $(TARGET_BUILD)/ && $(MAKE) -C tools/lldb/test || true if test -d $(TARGET_BUILD)/tools/lldb/test/lldb-test-traces/; then \ cat $(TARGET_BUILD)/tools/lldb/test/lldb-test-traces/*; \ fi # Managed by debian build system rm -f $(CURDIR)/$(TARGET_BUILD)/Release/lib/python*/site-packages/lldb/_lldb.so # polly tests cd $(TARGET_BUILD)/ && $(MAKE) -C tools/polly/test/ check-polly || true if test "$(CODECOVERAGE)" = "yes"; then \ REPORT=reports/llvm-toolchain.info; \ mkdir -p reports/; \ lcov --directory $(TARGET_BUILD)/ --capture --ignore-errors source --output-file $$REPORT; \ lcov --remove $$REPORT "/usr*" -o $$REPORT; \ lcov --remove $$REPORT "$(TARGET_BUILD)/*" -o $$REPORT; \ genhtml -o reports/coverage --show-details --highlight --legend $$REPORT; \ fi override_dh_gencontrol: dh_gencontrol -- $(control_vars) override_dh_auto_clean: dh_auto_clean rm -rf $(TARGET_BUILD) tools/clang/include/clang/Debian/debian_path.h docs/_build/ tools/clang/docs/_html/ rm -f `ls debian/*.in|sed -e "s|.in$$||g"` find utils -name '*.pyc' | xargs -r rm -f find test -name '*.pyc' -o -name '*.o' -o -name '*.cm[ix]' | xargs -r rm -f rm -f tools/clang tools/polly tools/lldb projects/compiler-rt rm -rf tools/clang/tools/extra