diff --git a/debian/changelog b/debian/changelog index 5b086226..43a7ec47 100644 --- a/debian/changelog +++ b/debian/changelog @@ -10,6 +10,7 @@ llvm-toolchain-snapshot (1:3.8~svn256489-1~exp1) experimental; urgency=medium - Remove autotools-specific artifacts from packages. - Remove "dummy" documentation artifacts from llvm-X.Y-docs package. Not built/installed by CMake, not useful. + - Update control/rules to support CMake -- Sylvestre Ledru Mon, 28 Dec 2015 09:31:25 +0100 diff --git a/debian/control b/debian/control index 56508ded..1c881d48 100644 --- a/debian/control +++ b/debian/control @@ -4,8 +4,7 @@ Priority: optional Maintainer: LLVM Packaging Team Uploaders: Sylvestre Ledru Build-Depends: debhelper (>= 9.0), flex, bison, dejagnu, tcl, expect, - autoconf, automake, perl, libtool, chrpath, texinfo, - sharutils, autotools-dev (>= 20060702.1), libffi-dev (>= 3.0.9), + cmake, perl, libtool, chrpath, texinfo, sharutils, libffi-dev (>= 3.0.9), lsb-release, patchutils, diffstat, xz-utils, python-dev, libedit-dev, swig, python-sphinx, ocaml-nox, binutils-dev, libjsoncpp-dev, diff --git a/debian/rules b/debian/rules index cc512e8b..125c87e1 100755 --- a/debian/rules +++ b/debian/rules @@ -17,8 +17,10 @@ endif VENDOR=$(shell lsb_release -is) -AUTOCONF_BUILD=yes +AUTOCONF_BUILD=no +ifeq (${AUTOCONF_BUILD},yes) BUILD_DIR=Release +endif DEB_HOST_MULTIARCH = $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) DEB_HOST_GNU_TYPE = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) @@ -30,6 +32,7 @@ OCAML_STDLIB_DIR ?= $(shell ocamlc -where) LDFLAGS_EXTRA = CXXFLAGS_EXTRA = -std=c++0x CONFIGURE_EXTRA = +CMAKE_EXTRA = ifneq (,$(filter $(DEB_HOST_ARCH),powerpc powerpcspe)) LDFLAGS_EXTRA += -latomic @@ -97,6 +100,7 @@ ifneq (,$(filter scan-build,$(DEB_BUILD_OPTIONS))) # no need to run tests in this case DEB_BUILD_OPTIONS+=" nocheck" CONFIGURE_EXTRA += --enable-assertions + CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON endif ifneq (,$(filter coverity,$(DEB_BUILD_OPTIONS))) @@ -109,6 +113,7 @@ ifneq (,$(filter coverity,$(DEB_BUILD_OPTIONS))) PRE_PROCESS_CONF= COVERITY_ENABLE=1 CONFIGURE_EXTRA += --enable-assertions + CMAKE_EXTRA += -DLLVM_ENABLE_ASSERTIONS=ON # no need to run tests in this case DEB_BUILD_OPTIONS+=" nocheck" else @@ -196,8 +201,12 @@ override_dh_auto_configure: preconfigure fi) # Due to bug upstream, no symlink here + rm -fr tools/clang/tools/extra cp -R -H clang-tools-extra tools/clang/tools/extra + # TODO(axw) specify build type for CMake + # TODO(axw) pass compiler flags, etc. + if test $(AUTOCONF_BUILD) = yes; then \ cd $(TARGET_BUILD); \ $(PRE_PROCESS_CONF) \ @@ -223,22 +232,30 @@ override_dh_auto_configure: preconfigure cd $(TARGET_BUILD) && \ cmake ../ \ -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION) \ - -DCMAKE_VERBOSE_MAKEFILE=ON -DBUILD_SHARED_LIBS=on; \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_CXX_FLAGS=$(CXXFLAGS_EXTRA) \ + -DLLVM_LINK_LLVM_DYLIB=ON \ + -DLLVM_VERSION_SUFFIX= \ + -DLLVM_ENABLE_SPHINX=ON \ + -DLLVM_ENABLE_RTTI=ON \ + -DLLVM_ENABLE_FFI=ON \ + $(CMAKE_EXTRA) \ + -DLIBCLANG_LIBRARY_VERSION=$(SONAME_EXT); \ fi -# cd $(TARGET_BUILD) && cmake ../ -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON -# mkdir build-compiler-rt && cd build-compiler-rt && cmake ../compiler-rt -# --with-ocaml-libdir=/usr/lib/ocaml/llvm-$(LLVM_VERSION) \ override_dh_auto_build: $(PRE_PROCESS) $(MAKE) $(NJOBS) -C $(TARGET_BUILD) VERBOSE=1 CLANG_VENDOR=$(VENDOR) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1 +ifeq (${AUTOCONF_BUILD},yes) # We run the build with the Asserts, new directory, make a symlink to make # sure the rest still work cd $(TARGET_BUILD) \ if test -d Release+Asserts -a ! -e Release; then \ ln -s Release+Asserts Release; \ fi +endif override_dh_prep: build_doc @@ -265,7 +282,7 @@ build_doc: help2man --version-string=$(LLVM_VERSION) clang/tools/scan-view/bin/scan-view > debian/man/scan-view-$(LLVM_VERSION).1 help2man --version-string=$(LLVM_VERSION) clang/tools/clang-format/clang-format-diff.py > debian/man/clang-format-diff-$(LLVM_VERSION).1 - CMDS="llvm-dwarfdump llvm-mc llvm-mcmarkup llvm-objdump llvm-rtdyld llvm-size llvm-tblgen llvm-ranlib lldb clang-format clang clang-tblgen clang-check clang-tidy clang-apply-replacements pp-trace sancov"; \ + CMDS="llvm-dwarfdump llvm-mc llvm-mcmarkup llvm-objdump llvm-rtdyld llvm-size llvm-ranlib lldb clang-format clang clang-tblgen clang-check clang-tidy clang-apply-replacements pp-trace sancov"; \ for f in $$CMDS; do \ echo "Generating manpage of $$f"; \ LD_LIBRARY_PATH=$(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/:/usr/lib/*/libfakeroot help2man --no-discard-stderr --version-string=$(LLVM_VERSION) $(TARGET_BUILD)/$(BUILD_DIR)/bin/$$f > debian/man/$$f-$(LLVM_VERSION).1; \ @@ -274,14 +291,20 @@ build_doc: override_dh_auto_install: $(MAKE) -C $(TARGET_BUILD) VERBOSE=1 install DESTDIR=$(DEB_INST)/ - chrpath -d $(TARGET_BUILD)/$(BUILD_DIR)/bin/clang + # Not used on Linux. + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/argdumper + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/clang/clang-format-bbedit.applescript + +ifneq (${AUTOCONF_BUILD},yes) + cp $(TARGET_BUILD)/bin/clang-query $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin +endif + # Only run on executable, not script chrpath -d `find $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/ -type f -executable -exec file -i '{}' \; | grep 'x-executable; charset=binary'|cut -d: -f1` # Add the trailing soname - mv $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libLLVM-$(LLVM_VERSION).so $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libLLVM-$(LLVM_VERSION).so.$(SONAME_EXT) - +ifeq (${AUTOCONF_BUILD},yes) cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ && \ mv libclang.so libclang-$(LLVM_VERSION).so.$(SONAME_EXT) && \ ln -s libclang-$(LLVM_VERSION).so.$(SONAME_EXT) libclang.so.$(SONAME_EXT); \ @@ -291,6 +314,7 @@ override_dh_auto_install: ln -s liblldb-$(LLVM_VERSION).so.$(SONAME_EXT) liblldb.so.$(SONAME_EXT); \ fi; \ rm -f libLLVM-$(LLVM_VERSION_FULL).so +endif # Remove artefact (where compiler-rt is built) if test -d $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux; then \ @@ -311,6 +335,61 @@ override_dh_auto_install: # idem for the lldb python binding mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/python2.7/site-packages/lldb/ +# Copy things that are installed by CMake but not autoconf, +# and remove things that are installed by autoconf but are +# not intended for distribution. +ifeq (${AUTOCONF_BUILD},yes) + cp clang/tools/clang-format/git-clang-format $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin + cp clang/tools/clang-format/clang-format-diff.py $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/clang + cp clang/tools/clang-format/clang-format.py $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/clang + cp clang/tools/clang-format/clang-format.el $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/clang + cp clang/tools/clang-format/clang-format-sublime.py $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/clang + mv $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libLLVM-$(LLVM_VERSION).so $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libLLVM-$(LLVM_VERSION).so.1 +endif + +# Remove things that CMake or autoconf install but which aren't packaged yet, +# or are packaged from the source or build tree. +ifneq (${AUTOCONF_BUILD},yes) + mv $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/clang-$(LLVM_VERSION) \ + $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/clang +endif + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/clang-cl + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/scan-build + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/scan-view + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/c-index-test + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/clang-tblgen + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/pp-trace + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/count + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/not + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/FileCheck + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/Reporter.py + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/ScanView.py + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/startfile.py + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/lli-child-target + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/lldb-argdumper + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/lldb-$(LLVM_VERSION_FULL) + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/lldb-mi-$(LLVM_VERSION_FULL) + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/lldb-server-$(LLVM_VERSION_FULL) + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/bin/modularize + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/libexec/c++-analyzer + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/libexec/ccc-analyzer + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libclang*.so + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libLLVM*.so + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/liblldb*.so + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libclang.so.1 + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/liblldb.so.1 + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libPolly.a + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/libPollyISL.a + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION_FULL)/*.txt + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/python2.7/site-packages/six.py + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/man/man1/scan-build.1 + rm -fr $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/clang/cmake/ + rm -fr $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/scan-view/ + rm -fr $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/docs/llvm/html/ + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/docs/llvm/html.tar.gz + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/scan-build/scanview.css + rm -f $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/share/scan-build/sorttable.js + # Rename binaries mkdir -p $(DEB_INST)/usr/bin/ cd $(DEB_INST)/usr/bin/; rm -f *; \ @@ -402,8 +481,33 @@ override_dh_installdeb: ifeq (,$(filter nocheck, $(DEB_BUILD_OPTIONS))) # List of the archs we know we have 100 % tests working ARCH_LLVM_TEST_OK := amd64 i386 + override_dh_auto_test: +ifneq (${AUTOCONF_BUILD},yes) + +# LLVM tests (CMake) +ifneq (,$(findstring $(DEB_HOST_ARCH),$(ARCH_LLVM_TEST_OK))) + $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-llvm +else + $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-llvm || true +endif + +# Clang tests (CMake) + $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-clang || true + +# LLDB tests (CMake) +ifeq (,$(filter $(DEB_HOST_ARCH), $(LLDB_DISABLE_ARCHS) armhf armel)) + $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-lldb || true +endif + +# Polly tests (CMake) +ifeq (${POLLY_ENABLE},yes) + $(MAKE) $(NJOBS) -C $(TARGET_BUILD) check-polly || true +endif + +else # Autoconf build + # LLVM tests ifneq (,$(findstring $(DEB_HOST_ARCH),$(ARCH_LLVM_TEST_OK))) # Fail the build if the test fails @@ -458,7 +562,7 @@ endif lcov --remove $$REPORT "/usr*" -o $$REPORT; \ genhtml -o reports/coverage --show-details --highlight --legend $$REPORT; \ fi -else +endif override_dh_auto_test: endif