From patchwork Mon Feb 19 17:18:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Valentin Korenblit X-Patchwork-Id: 875252 Return-Path: X-Original-To: incoming-buildroot@patchwork.ozlabs.org Delivered-To: patchwork-incoming-buildroot@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=busybox.net (client-ip=140.211.166.137; helo=fraxinus.osuosl.org; envelope-from=buildroot-bounces@busybox.net; receiver=) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zlVnx1WzDz9ryn for ; Tue, 20 Feb 2018 04:18:28 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 3A4D887094; Mon, 19 Feb 2018 17:18:27 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id zglODnDKF8b0; Mon, 19 Feb 2018 17:18:24 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id BA717870B9; Mon, 19 Feb 2018 17:18:24 +0000 (UTC) X-Original-To: buildroot@lists.busybox.net Delivered-To: buildroot@osuosl.org Received: from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by ash.osuosl.org (Postfix) with ESMTP id 1CA651CF072 for ; Mon, 19 Feb 2018 17:18:18 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by whitealder.osuosl.org (Postfix) with ESMTP id 17EA0875E0 for ; Mon, 19 Feb 2018 17:18:18 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from whitealder.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 0Jyl17icuKBF for ; Mon, 19 Feb 2018 17:18:16 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from idris.smile.fr (idris.smile.fr [91.216.209.19]) by whitealder.osuosl.org (Postfix) with ESMTPS id 1C3CD875DC for ; Mon, 19 Feb 2018 17:18:15 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by idris.smile.fr (Postfix) with ESMTP id 1379D1EE2B02; Mon, 19 Feb 2018 18:18:14 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at smile.fr Received: from idris.smile.fr ([127.0.0.1]) by localhost (bluemind-mta.prod.vitry.intranet [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id reRAerVxM-y3; Mon, 19 Feb 2018 18:18:13 +0100 (CET) Received: from sisellBox.daviel.idf.intranet (static-css-ccs-204145.business.bouyguestelecom.com [176.157.204.145]) by idris.smile.fr (Postfix) with ESMTPSA id B7A8B1EE2AE2; Mon, 19 Feb 2018 18:18:13 +0100 (CET) From: Valentin Korenblit To: buildroot@buildroot.org Date: Mon, 19 Feb 2018 18:18:03 +0100 Message-Id: <20180219171805.13769-2-valentin.korenblit@smile.fr> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180219171805.13769-1-valentin.korenblit@smile.fr> References: <20180219171805.13769-1-valentin.korenblit@smile.fr> Subject: [Buildroot] [PATCH v2 1/3] package/llvm: new host package X-BeenThere: buildroot@busybox.net X-Mailman-Version: 2.1.24 Precedence: list List-Id: Discussion and development of buildroot List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: nimaim@gmail.com, Valentin Korenblit , romain.naour@gmail.com MIME-Version: 1.0 Errors-To: buildroot-bounces@busybox.net Sender: "buildroot" From: Romain Naour This patch installs only the necessary components of LLVM for the host that are needed to cross-compile LLVM for the target. The path to host's llvm-tblgen must be specified when cross-compiling using option -DLLVM_TABLEGEN. Most build options are set to OFF in order to reduce the build time. Signed-off-by: Romain Naour Signed-off-by: Valentin Korenblit --- package/Config.in.host | 1 + package/llvm/Config.in.host | 8 ++ package/llvm/llvm.hash | 2 + package/llvm/llvm.mk | 282 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 293 insertions(+) create mode 100644 package/llvm/Config.in.host create mode 100644 package/llvm/llvm.hash create mode 100644 package/llvm/llvm.mk diff --git a/package/Config.in.host b/package/Config.in.host index 199a8e9856..9a6227174b 100644 --- a/package/Config.in.host +++ b/package/Config.in.host @@ -27,6 +27,7 @@ menu "Host utilities" source "package/imx-usb-loader/Config.in.host" source "package/jq/Config.in.host" source "package/jsmin/Config.in.host" + source "package/llvm/Config.in.host" source "package/lpc3250loader/Config.in.host" source "package/lttng-babeltrace/Config.in.host" source "package/mfgtools/Config.in.host" diff --git a/package/llvm/Config.in.host b/package/llvm/Config.in.host new file mode 100644 index 0000000000..fc46535fad --- /dev/null +++ b/package/llvm/Config.in.host @@ -0,0 +1,8 @@ +config BR2_PACKAGE_HOST_LLVM + bool "host llvm" + depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS + help + The LLVM Project is a collection of modular and reusable + compiler and toolchain technologies. + + http://llvm.org diff --git a/package/llvm/llvm.hash b/package/llvm/llvm.hash new file mode 100644 index 0000000000..2d38445673 --- /dev/null +++ b/package/llvm/llvm.hash @@ -0,0 +1,2 @@ +# locally calculated +sha256 5fa7489fc0225b11821cab0362f5813a05f2bcf2533e8a4ea9c9c860168807b0 llvm-5.0.1.src.tar.xz diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk new file mode 100644 index 0000000000..334a934722 --- /dev/null +++ b/package/llvm/llvm.mk @@ -0,0 +1,282 @@ +################################################################################ +# +# llvm +# +################################################################################ + +LLVM_VERSION = 5.0.1 +LLVM_SITE = http://llvm.org/releases/$(LLVM_VERSION) +LLVM_SOURCE = llvm-$(LLVM_VERSION).src.tar.xz +LLVM_LICENSE = NCSA +LLVM_LICENSE_FILES = LICENSE.TXT +LLVM_SUPPORTS_IN_SOURCE_BUILD = NO + +# http://llvm.org/docs/GettingStarted.html#software +# host-python: Python interpreter 2.7 or newer is required for builds and testing. +# host-zlib: Optional, adds compression / uncompression capabilities to selected LLVM tools. +HOST_LLVM_DEPENDENCIES = host-python host-zlib + +# Don't build clang libcxx libcxxabi lldb compiler-rt lld polly as llvm subprojects +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS="" + +# Disable CCACHE +HOST_LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=OFF + +# Disable Build GlobalIsel +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_GLOBAL_ISEL=OFF + +# Use "Unix Makefiles" generator for generating make-compatible parallel makefiles. +# Ninja is not supported yet by Buildroot +HOST_LLVM_CONF_OPTS += -G "Unix Makefiles" + +# * LLVM_BUILD_UTILS: Build LLVM utility binaries. If OFF, just generate build targets. +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_UTILS=ON + +# * LLVM_INSTALL_UTILS: Include utility binaries in the 'install' target. OFF +# Utils : FileCheck, KillTheDoctor, llvm-PerfectShuffle, count, not, yaml-bench +HOST_LLVM_CONF_OPTS += -DLLVM_INSTALL_UTILS=OFF + +# * LLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING: +# Disable abi-breaking checks mismatch detection at link-tim +# Keep it enabled +HOST_LLVM_CONF_OPTS += -DLLVM_DISABLE_ABI_BREAKING_CHECKS_ENFORCING=OFF + +# * LLVM_ENABLE_LIBEDIT: Use libedit if available +# Disabled since no host-libedit +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBEDIT=OFF + +# * LLVM_INSTALL_TOOLCHAIN_ONLY "Only include toolchain files in the 'install' target. OFF +# We also want llvm libraries and modules. +HOST_LLVM_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=ON + +# * LLVM_APPEND_VC_REV "Append the version control system revision id to LLVM version OFF +# We build from a release archive without vcs +HOST_LLVM_CONF_OPTS += -DLLVM_APPEND_VC_REV=OFF + +# * BUILD_SHARED_LIBS Build all libraries as shared libraries instead of static ON +# BUILD_SHARED_LIBS is only recommended for use by LLVM developers. +# If you want to build LLVM as a shared library, you should use the +# LLVM_BUILD_LLVM_DYLIB option. +HOST_LLVM_CONF_OPTS += -DBUILD_SHARED_LIBS=OFF + +# * LLVM_ENABLE_BACKTRACES: Enable embedding backtraces on crash ON +# Use backtraces on crash to report toolchain issue. +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=ON + +# * ENABLE_CRASH_OVERRIDES: Enable crash overrides ON +# Keep the possibility to install or overrides signal handlers +HOST_LLVM_CONF_OPTS += -DENABLE_CRASH_OVERRIDES=ON + +# * LLVM_ENABLE_FFI: Use libffi to call external functions from the interpreter OFF +# Keep ffi disabled for now +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_FFI=OFF + +# * LLVM_ENABLE_TERMINFO: Use terminfo database if available. ON +# Disable terminfo database (needs ncurses libtinfo.so) +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_TERMINFO=OFF + +# * LLVM_ENABLE_THREADS: Use threads if available ON +# Keep threads enabled +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_THREADS=ON + +# * LLVM_ENABLE_ZLIB: Use zlib for compression/decompression if available ON +# Keep zlib support enabled +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_ZLIB=ON + +# * LLVM_ENABLE_PIC: Build Position-Independent Code ON +# We don't use llvm for static only build, so enable PIC +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PIC=ON + +# * LLVM_ENABLE_WARNINGS: Enable compiler warnings ON +# Keep compiler warning enabled +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_WARNINGS=ON + +# * LLVM_ENABLE_PEDANTIC: Compile with pedantic enabled ON +# Keep pedantic enabled +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PEDANTIC=ON + +# * LLVM_ENABLE_WERROR: Fail and stop if a warning is triggered OFF +# Keep Werror disabled +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_WERROR=OFF + +# * CMAKE_BUILD_TYPE: Set build type Debug, Release, RelWithDebInfo, and MinSizeRel. +# Default is Debug. Use the Release build which requires considerably less space. +HOST_LLVM_CONF_OPTS += -DCMAKE_BUILD_TYPE=Release + +# * LLVM_POLLY_BUILD: Build LLVM with Polly ON +# Keep it enabled, if POLLY is not in-tree it will not be built +HOST_LLVM_CONF_OPTS += -DLLVM_POLLY_BUILD=ON + +# * LINK_POLLY_INTO_TOOLS: Static link Polly into tools ON +HOST_LLVM_CONF_OPTS += -DLLVM_POLLY_LINK_INTO_TOOLS=ON + +# * LLVM_INCLUDE_TOOLS: Generate build targets for the LLVM tools ON +# Build llvm tools for the target +HOST_LLVM_CONF_OPTS += -DLLVM_INCLUDE_TOOLS=ON + +# * LLVM_BUILD_TOOLS: Build the LLVM tools for the host ON +# Build llvm tools for the host +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_TOOLS=ON + +# * LLVM_INCLUDE_UTILS: Generate build targets for the LLVM utils default ON +# Disabled, since we don't install them to the target. +HOST_LLVM_CONF_OPTS += -DLLVM_INCLUDE_UTILS=OFF + +# Do not build llvm runtime libraries +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_RUNTIME=OFF \ + -DLLVM_INCLUDE_RUNTIMES=OFF + +# * LLVM_BUILD_EXAMPLES: Build the LLVM example programs OFF +# Don't build examples +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_EXAMPLES=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF + +# * LLVM_BUILD_TESTS: Build LLVM unit tests OFF +# Don't build tests +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_TESTS=OFF + +# * LLVM_INCLUDE_TESTS: Generate build targets for the LLVM unit tests ON +# Don't build llvm unit tests +HOST_LLVM_CONF_OPTS += -DLLVM_INCLUDE_TESTS=OFF + +# * LLVM_INCLUDE_GO_TESTS: Include the Go bindings tests in test build targets ON +# Don't build Go tests +HOST_LLVM_CONF_OPTS += -DLLVM_INCLUDE_GO_TESTS=OFF + +# * LLVM_BUILD_DOCS: Build the llvm documentation OFF +# Disable llvm documentation +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_DOCS=OFF + +# * LLVM_INCLUDE_DOCS: Generate build targets for llvm documentation ON +# Don't build llvm documentation +HOST_LLVM_CONF_OPTS += -DLLVM_INCLUDE_DOCS=OFF + +# * LLVM_ENABLE_DOXYGEN: Use doxygen to generate llvm API documentation OFF +# Don't build llvm API documentation +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_DOXYGEN=OFF + +# * LLVM_ENABLE_SPHINX: Use Sphinx to generate llvm documentation OFF +# Don't build llvm documentation +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_SPHINX=OFF + +# * LLVM_ENABLE_OCAMLDOC: Use OCaml bindings documentation OFF +# Don't build llvm documentation +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_OCAMLDOC=OFF + +# * LLVM_BUILD_EXTERNAL_COMPILER_RT: Build compiler-rt as an external project OFF +# Keep rt compiler disabled +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF + +# Get target architecture +HOST_LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH)) + +# Build backend for target architecture +HOST_LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD="$(HOST_LLVM_TARGET_ARCH)" + +# LLVM target to use for native code generation. +HOST_LLVM_CONF_OPTS += -DLLVM_TARGET_ARCH=$(HOST_LLVM_TARGET_ARCH) + +# * LLVM_ENABLE_CXX1Y: Compile with C++1y enabled OFF +# Enable C++ and C++11 support if BR2_INSTALL_LIBSTDCPP=y +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_CXX1Y=$(if $(BR2_INSTALL_LIBSTDCPP),ON,OFF) + +# * LLVM_ENABLE_MODULES: Compile with C++ modules enabled OFF +# Disabled, requires sys/ndir.h header +# Disable debug in module +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_MODULES=OFF \ + -DLLVM_ENABLE_MODULE_DEBUGGING=OFF + +# * LLVM_ENABLE_LIBCXX: Use libc++ if available OFF +# Use -stdlib=libc++ compiler flag, use libc++ as C++ standard library +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LIBCXX=OFF + +# * LLVM_ENABLE_LLD: Use lld as C and C++ linker. OFF +HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_LLD=OFF + +# * LLVM_DEFAULT_TARGET_TRIPLE: By default, we target the host, but this can be overridden at CMake +# invocation time. +HOST_LLVM_CONF_OPTS += -DLLVM_DEFAULT_TARGET_TRIPLE=$(GNU_TARGET_NAME) + +# The Go bindings have no CMake rules at the moment, but better remove the +# check preventively. Building the Go and OCaml bindings is yet unsupported. +HOST_LLVM_CONF_OPTS += \ + -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND \ + -DOCAMLFIND=OCAMLFIND-NOTFOUND + +# Builds a release tablegen that gets used during the LLVM build. +HOST_LLVM_CONF_OPTS += -DLLVM_OPTIMIZED_TABLEGEN=ON + +# * Generate libLLVM.so. This library contains a default set of LLVM components +# that can be overridden with "LLVM_DYLIB_COMPONENTS". The default contains +# most of LLVM and is defined in "tools/llvm-shlib/CMakelists.txt". +HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=OFF + +define HOST_LLVM_INSTALL_CMDS + $(INSTALL) -D -m 0755 $(HOST_LLVM_BUILDDIR)/bin/llvm-tblgen $(HOST_DIR)/bin/llvm-tblgen + $(INSTALL) -D -m 0755 $(HOST_LLVM_BUILDDIR)/bin/llvm-config $(HOST_DIR)/bin/llvm-config +endef + +# Avoid building host tools, except llvm-config +HOST_LLVM_CONF_OPTS += \ + -DLLVM_TOOL_BUGPOINT_BUILD=OFF \ + -DLLVM_TOOL_BUGPOINT_PASSES_BUILD=OFF \ + -DLLVM_TOOL_DSYMUTIL_BUILD=OFF \ + -DLLVM_TOOL_GOLD_BUILD=OFF \ + -DLLVM_TOOL_LLC_BUILD=OFF \ + -DLLVM_TOOL_LLI_BUILD=OFF \ + -DLLVM_TOOL_LLVM_AR_BUILD=OFF \ + -DLLVM_TOOL_LLVM_AS_BUILD=OFF \ + -DLLVM_TOOL_LLVM_AS_FUZZER_BUILD=OFF \ + -DLLVM_TOOL_LLVM_BCANALYZER_BUILD=OFF \ + -DLLVM_TOOL_LLVM_CAT_BUILD=OFF \ + -DLLVM_TOOL_LLVM_CONFIG_BUILD=ON \ + -DLLVM_TOOL_LLVM_COV_BUILD=OFF \ + -DLLVM_TOOL_LLVM_C_TEST_BUILD=OFF \ + -DLLVM_TOOL_LLVM_CVTRES_BUILD=OFF \ + -DLLVM_TOOL_LLVM_CXXDUMP_BUILD=OFF \ + -DLLVM_TOOL_LLVM_CXXFILT_BUILD=OFF \ + -DLLVM_TOOL_LLVM_DIFF_BUILD=OFF \ + -DLLVM_TOOL_LLVM_DIS_BUILD=OFF \ + -DLLVM_TOOL_LLVM_DWARFDUMP_BUILD=OFF \ + -DLLVM_TOOL_LLVM_DWP_BUILD=OFF \ + -DLLVM_TOOL_LLVM_EXTRACT_BUILD=OFF \ + -DLLVM_TOOL_LLVM_GO_BUILD=OFF \ + -DLLVM_TOOL_LLVM_JITLISTENER_BUILD=OFF \ + -DLLVM_TOOL_LLVM_LINK_BUILD=OFF \ + -DLLVM_TOOL_LLVM_LTO2_BUILD=OFF \ + -DLLVM_TOOL_LLVM_LTO_BUILD=OFF \ + -DLLVM_TOOL_LLVM_MC_BUILD=OFF \ + -DLLVM_TOOL_LLVM_MC_FUZZER_BUILD=OFF \ + -DLLVM_TOOL_LLVM_MCMARKUP_BUILD=OFF \ + -DLLVM_TOOL_LLVM_MODEXTRACT_BUILD=OFF \ + -DLLVM_TOOL_LLVM_MT_BUILD=OFF \ + -DLLVM_TOOL_LLVM_NM_BUILD=OFF \ + -DLLVM_TOOL_LLVM_OBJDUMP_BUILD=OFF \ + -DLLVM_TOOL_LLVM_OPT_REPORT_BUILD=OFF \ + -DLLVM_TOOL_LLVM_PDBDUMP_BUILD=OFF \ + -DLLVM_TOOL_LLVM_PDBUTIL_BUILD=OFF \ + -DLLVM_TOOL_LLVM_PROFDATA_BUILD=OFF \ + -DLLVM_TOOL_LLVM_READOBJ_BUILD=OFF \ + -DLLVM_TOOL_LLVM_RTDYLD_BUILD=OFF \ + -DLLVM_TOOL_LLVM_SHLIB_BUILD=OFF \ + -DLLVM_TOOL_LLVM_SIZE_BUILD=OFF \ + -DLLVM_TOOL_LLVM_SPLIT_BUILD=OFF \ + -DLLVM_TOOL_LLVM_STRESS_BUILD=OFF \ + -DLLVM_TOOL_LLVM_STRINGS_BUILD=OFF \ + -DLLVM_TOOL_LLVM_SYMBOLIZER_BUILD=OFF \ + -DLLVM_TOOL_LLVM_XRAY_BUILD=OFF \ + -DLLVM_TOOL_LTO_BUILD=OFF \ + -DLLVM_TOOL_LTO_BUILD=OFF \ + -DLLVM_TOOL_MSBUILD_BUILD=OFF \ + -DLLVM_TOOL_OBJ2YAML_BUILD=OFF \ + -DLLVM_TOOL_OPT_BUILD=OFF \ + -DLLVM_TOOL_SANCOV_BUILD=OFF \ + -DLLVM_TOOL_SANSTATS_BUILD=OFF \ + -DLLVM_TOOL_VERIFY_USELISTORDER_BUILD=OFF \ + -DLLVM_TOOL_XCODE_TOOLCHAIN_BUILD=OFF \ + -DLLVM_TOOL_YAML2OBJ_BUILD=OFF \ + +# Make only llvm-config and llvm-tblgen for host to reduce build time +HOST_LLVM_MAKE_OPTS = llvm-tblgen llvm-config + +$(eval $(host-cmake-package))