All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2 0/3]  llvm for mesa3d
@ 2018-02-19 17:18 Valentin Korenblit
  2018-02-19 17:18 ` [Buildroot] [PATCH v2 1/3] package/llvm: new host package Valentin Korenblit
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Valentin Korenblit @ 2018-02-19 17:18 UTC (permalink / raw)
  To: buildroot

Hello all,

This series provides LLVM support for Mesa3d, enabling
llvmpipe software rasterizer.

It must be considered that it does not provide a full LLVM
installation for the host, only the necessary components to
cross-compile LLVM for the target. It will install all target
components as libLLVM.so.

Changes in v2:

The series has been simplified:

*Build only backend for target architecture by default.

*Support for AMDGPU(PATCH 3/4 in v1) was removed because I cannot test
it currently. 

*Host: make options modified to build only llvm-config and llvm-tblgen
(reduces drastically build time for host).

*Target: support only x86 currently (tested), I will test on ARM soon.


The idea is to add incrementally more options to configure LLVM as soon
as I can test them.
 
Regards,

Valent?n


Romain Naour (3):
  package/llvm: new host package
  package/llvm: enable target variant
  package/mesa3d: enable llvm support

 package/Config.in           |   1 +
 package/Config.in.host      |   1 +
 package/llvm/Config.in      |  19 +++
 package/llvm/Config.in.host |   8 +
 package/llvm/llvm.hash      |   2 +
 package/llvm/llvm.mk        | 360 ++++++++++++++++++++++++++++++++++++++++++++
 package/mesa3d/Config.in    |   8 +
 package/mesa3d/mesa3d.mk    |  18 ++-
 8 files changed, 414 insertions(+), 3 deletions(-)
 create mode 100644 package/llvm/Config.in
 create mode 100644 package/llvm/Config.in.host
 create mode 100644 package/llvm/llvm.hash
 create mode 100644 package/llvm/llvm.mk

-- 
2.14.3

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/llvm: new host package
  2018-02-19 17:18 [Buildroot] [PATCH v2 0/3] llvm for mesa3d Valentin Korenblit
@ 2018-02-19 17:18 ` Valentin Korenblit
  2018-02-19 20:22   ` Thomas Petazzoni
  2018-02-19 17:18 ` [Buildroot] [PATCH v2 2/3] package/llvm: enable target variant Valentin Korenblit
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Valentin Korenblit @ 2018-02-19 17:18 UTC (permalink / raw)
  To: buildroot

From: Romain Naour <romain.naour@gmail.com>

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 <romain.naour@gmail.com>
Signed-off-by: Valentin Korenblit <valentin.korenblit@smile.fr>
---
 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))
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 2/3] package/llvm: enable target variant
  2018-02-19 17:18 [Buildroot] [PATCH v2 0/3] llvm for mesa3d Valentin Korenblit
  2018-02-19 17:18 ` [Buildroot] [PATCH v2 1/3] package/llvm: new host package Valentin Korenblit
@ 2018-02-19 17:18 ` Valentin Korenblit
  2018-02-19 17:18 ` [Buildroot] [PATCH v2 3/3] package/mesa3d: enable llvm support Valentin Korenblit
  2018-02-21 20:55 ` [Buildroot] [PATCH v2 0/3] llvm for mesa3d Andre Renaud
  3 siblings, 0 replies; 12+ messages in thread
From: Valentin Korenblit @ 2018-02-19 17:18 UTC (permalink / raw)
  To: buildroot

From: Romain Naour <romain.naour@gmail.com>

This patch installs LLVM libraries for the target (libLLVM*).

Option -DLLVM_BUILD_LLVM_DYLIB=ON allows having all LLVM
components in a single shared library. This is used by
mesa3d to enable llvmpipe software rasterizer.

Move BR2_PACKAGE_LLVM_ARCH_SUPPORTS and BR2_PACKAGE_LLVM_TARGET_ARCH
to package/llvm/Config.in for consistency with other packages.

Define target triple with GNU_TARGET_NAME.

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Signed-off-by: Valentin Korenblit <valentin.korenblit@smile.fr>
---
 package/Config.in      |  1 +
 package/llvm/Config.in | 19 ++++++++++++
 package/llvm/llvm.mk   | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 98 insertions(+)
 create mode 100644 package/llvm/Config.in

diff --git a/package/Config.in b/package/Config.in
index 9cd5d9c087..e570662985 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1520,6 +1520,7 @@ menu "Other"
 	source "package/libuv/Config.in"
 	source "package/lightning/Config.in"
 	source "package/linux-pam/Config.in"
+	source "package/llvm/Config.in"
 if BR2_PACKAGE_LINUX_PAM
 comment "linux-pam plugins"
 	source "package/libpam-radius-auth/Config.in"
diff --git a/package/llvm/Config.in b/package/llvm/Config.in
new file mode 100644
index 0000000000..d2cc59ce69
--- /dev/null
+++ b/package/llvm/Config.in
@@ -0,0 +1,19 @@
+config BR2_PACKAGE_LLVM_ARCH_SUPPORTS
+	bool
+	# http://llvm.org/docs/GettingStarted.html#host-c-toolchain-both-compiler-and-standard-library
+	# http://llvm.org/docs/GettingStarted.html#local-llvm-configuration
+	depends on BR2_HOST_GCC_AT_LEAST_4_8
+	default y if BR2_i386 || BR2_x86_64
+
+config BR2_PACKAGE_LLVM_TARGET_ARCH
+	string
+	default "X86" if BR2_i386 || BR2_x86_64
+
+config BR2_PACKAGE_LLVM
+	bool "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.mk b/package/llvm/llvm.mk
index 334a934722..53116818d6 100644
--- a/package/llvm/llvm.mk
+++ b/package/llvm/llvm.mk
@@ -10,13 +10,16 @@ LLVM_SOURCE = llvm-$(LLVM_VERSION).src.tar.xz
 LLVM_LICENSE = NCSA
 LLVM_LICENSE_FILES = LICENSE.TXT
 LLVM_SUPPORTS_IN_SOURCE_BUILD = NO
+LLVM_INSTALL_STAGING = YES
 
 # 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
+LLVM_DEPENDENCIES = host-llvm zlib
 
 # Don't build clang libcxx libcxxabi lldb compiler-rt lld polly as llvm subprojects
+#This flag assumes that projects are checked out side-by-side and not nested
 HOST_LLVM_CONF_OPTS += -DLLVM_ENABLE_PROJECTS=""
 
 # Disable CCACHE
@@ -25,177 +28,250 @@ HOST_LLVM_CONF_OPTS += -DLLVM_CCACHE_BUILD=OFF
 # Disable Build GlobalIsel
 HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_GLOBAL_ISEL=OFF
 
+# Use native llvm-tblgen from host-llvm (needed for cross-compilation)
+LLVM_CONF_OPTS += -DLLVM_TABLEGEN=$(HOST_DIR)/usr/bin/llvm-tblgen
+
+# Copy llvm-config (host variant) to STAGING_DIR since llvm-config
+# provided by llvm target variant can't run on the host.
+# Also llvm-config (host variant) return include and lib directories
+# for the host if it's installed in host/usr/bin:
+# output/host/usr/bin/llvm-config --includedir
+# output/host/usr/include
+# When istalled in STAGING_DIR llvm-config return include and lib
+# directories from STAGING_DIR.
+# output/staging/usr/bin/llvm-config --includedir
+# output/staging/usr/include
+define LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR
+	$(INSTALL) -D -m 0755 $(HOST_DIR)/bin/llvm-config \
+		$(STAGING_DIR)/usr/bin/llvm-config
+endef
+LLVM_POST_INSTALL_STAGING_HOOKS = LLVM_COPY_LLVM_CONFIG_TO_STAGING_DIR
+
 # 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_CONF_OPTS += -G "Unix Makefiles"
+
+# Make it explicit that we are cross-compiling
+LLVM_CONF_OPTS += -DCMAKE_CROSSCOMPILING=1
 
 # * LLVM_BUILD_UTILS: Build LLVM utility binaries. If OFF, just generate build targets.
+#   Keep llvm utility binaries for the host.
+#   For the target, we should disable it but setting LLVM_BUILD_UTILS=OFF and
+#   LLVM_INSTALL_UTILS=OFF together break the install step due to undefined cmake
+#   behavior: "Target "llvm-tblgen" has EXCLUDE_FROM_ALL set and will not be built by
+#   default but an install rule has been provided for it.  CMake does not define behavior
+#   for this case."
 HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_UTILS=ON
+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_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_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_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_CONF_OPTS += -DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF
 
 # * 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
+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_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
+LLVM_CONF_OPTS += -DLLVM_ENABLE_BACKTRACES=OFF
 
 # * 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_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_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_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_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_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_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_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_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
+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_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
+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_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_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_CONF_OPTS += -DLLVM_BUILD_TOOLS=OFF
 
 # * 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
+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_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_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_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_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_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_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_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_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_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_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
+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_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_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_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_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_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_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)
+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.
@@ -210,6 +286,7 @@ HOST_LLVM_CONF_OPTS += -DLLVM_OPTIMIZED_TABLEGEN=ON
 # 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
+LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON
 
 define HOST_LLVM_INSTALL_CMDS
 	$(INSTALL) -D -m 0755 $(HOST_LLVM_BUILDDIR)/bin/llvm-tblgen $(HOST_DIR)/bin/llvm-tblgen
@@ -279,4 +356,5 @@ HOST_LLVM_CONF_OPTS += \
 # Make only llvm-config and llvm-tblgen for host to reduce build time
 HOST_LLVM_MAKE_OPTS = llvm-tblgen llvm-config
 
+$(eval $(cmake-package))
 $(eval $(host-cmake-package))
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 3/3] package/mesa3d: enable llvm support
  2018-02-19 17:18 [Buildroot] [PATCH v2 0/3] llvm for mesa3d Valentin Korenblit
  2018-02-19 17:18 ` [Buildroot] [PATCH v2 1/3] package/llvm: new host package Valentin Korenblit
  2018-02-19 17:18 ` [Buildroot] [PATCH v2 2/3] package/llvm: enable target variant Valentin Korenblit
@ 2018-02-19 17:18 ` Valentin Korenblit
  2018-02-21 20:55 ` [Buildroot] [PATCH v2 0/3] llvm for mesa3d Andre Renaud
  3 siblings, 0 replies; 12+ messages in thread
From: Valentin Korenblit @ 2018-02-19 17:18 UTC (permalink / raw)
  To: buildroot

From: Romain Naour <romain.naour@gmail.com>

mesa: disable shared libs

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Signed-off-by: Valentin Korenblit <valentin.korenblit@smile.fr>
---
 package/mesa3d/Config.in |  8 ++++++++
 package/mesa3d/mesa3d.mk | 18 +++++++++++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/package/mesa3d/Config.in b/package/mesa3d/Config.in
index f141587c4d..cc8960b1b1 100644
--- a/package/mesa3d/Config.in
+++ b/package/mesa3d/Config.in
@@ -25,6 +25,14 @@ menuconfig BR2_PACKAGE_MESA3D
 
 if BR2_PACKAGE_MESA3D
 
+config BR2_PACKAGE_MESA3D_LLVM
+	bool "mesa3d w/ llvm"
+	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
+	select BR2_PACKAGE_LLVM
+
+comment "mesa3d w/ llvm needs a llvm compiler"
+	depends on !BR2_PACKAGE_LLVM_ARCH_SUPPORTS
+
 # inform the .mk file of gallium, dri or vulkan driver selection
 config BR2_PACKAGE_MESA3D_GALLIUM_DRIVER
 	bool
diff --git a/package/mesa3d/mesa3d.mk b/package/mesa3d/mesa3d.mk
index c275579fb8..2822f82bc6 100644
--- a/package/mesa3d/mesa3d.mk
+++ b/package/mesa3d/mesa3d.mk
@@ -32,6 +32,21 @@ ifeq ($(BR2_SHARED_STATIC_LIBS),y)
 MESA3D_CONF_OPTS += --disable-static
 endif
 
+ifeq ($(BR2_PACKAGE_MESA3D_LLVM),y)
+# Mesa want to build libgallium.a unconditionally, so it can't be linked dynamically with llvm shared libraries.
+MESA3D_DEPENDENCIES += host-llvm llvm
+MESA3D_CONF_OPTS += \
+	--with-llvm-prefix=$(STAGING_DIR)/usr \
+	--disable-llvm-shared-libs \
+	--enable-llvm
+else
+# Avoid automatic search of llvm-config
+MESA3D_CONF_OPTS += \
+	--with-llvm-prefix=$(STAGING_DIR)/usr \
+	--disable-llvm-shared-libs \
+	--disable-llvm
+endif
+
 # The Sourcery MIPS toolchain has a special (non-upstream) feature to
 # have "compact exception handling", which unfortunately breaks with
 # mesa3d, so we disable it here by passing -mno-compact-eh.
@@ -219,7 +234,4 @@ else
 MESA3D_CONF_OPTS += --disable-lmsensors
 endif
 
-# Avoid automatic search of llvm-config
-MESA3D_CONF_OPTS += --with-llvm-prefix=$(STAGING_DIR)/usr/bin
-
 $(eval $(autotools-package))
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/llvm: new host package
  2018-02-19 17:18 ` [Buildroot] [PATCH v2 1/3] package/llvm: new host package Valentin Korenblit
@ 2018-02-19 20:22   ` Thomas Petazzoni
  2018-02-20 10:15     ` Valentin Korenblit
  0 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2018-02-19 20:22 UTC (permalink / raw)
  To: buildroot

Hello,

I have by far not reviewed everything, but noticed one problem.

On Mon, 19 Feb 2018 18:18:03 +0100, Valentin Korenblit wrote:

> +# Get target architecture
> +HOST_LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))

BR2_PACKAGE_LLVM_TARGET_ARCH does not exist, it is created by PATCH
2/3. This is not good, as it breaks bisectability.

Basically, your series should work even if we apply only PATCH 1/3. Or
if we apply only PATCH 1/3 and 2/3, etc.

So using in PATCH 1/3 something that is introduced in PATCH 2/3 is not
good.

Best regards,

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
http://bootlin.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/llvm: new host package
  2018-02-19 20:22   ` Thomas Petazzoni
@ 2018-02-20 10:15     ` Valentin Korenblit
  2018-02-20 12:13       ` Nimai Mahajan
  0 siblings, 1 reply; 12+ messages in thread
From: Valentin Korenblit @ 2018-02-20 10:15 UTC (permalink / raw)
  To: buildroot

Hello,

Thanks Thomas for the review. The problem is fixed for next version but
I will wait for some more tests before sending it.

I would appreciate if anyone interested in this package can test/review
it(applying the 3 patches at once) and give me some feedback following
the guidelines in:

https://buildroot.org/downloads/manual/manual.html#_reviewing_and_testing_patches

Thanks in advance,

Valent?n


On 19/02/2018 21:22, Thomas Petazzoni wrote:
> Hello,
>
> I have by far not reviewed everything, but noticed one problem.
>
> On Mon, 19 Feb 2018 18:18:03 +0100, Valentin Korenblit wrote:
>
>> +# Get target architecture
>> +HOST_LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))
> BR2_PACKAGE_LLVM_TARGET_ARCH does not exist, it is created by PATCH
> 2/3. This is not good, as it breaks bisectability.
>
> Basically, your series should work even if we apply only PATCH 1/3. Or
> if we apply only PATCH 1/3 and 2/3, etc.
>
> So using in PATCH 1/3 something that is introduced in PATCH 2/3 is not
> good.
>
> Best regards,
>
> Thomas

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/llvm: new host package
  2018-02-20 10:15     ` Valentin Korenblit
@ 2018-02-20 12:13       ` Nimai Mahajan
  2018-02-20 12:41         ` Thomas Petazzoni
  0 siblings, 1 reply; 12+ messages in thread
From: Nimai Mahajan @ 2018-02-20 12:13 UTC (permalink / raw)
  To: buildroot

On Tue, Feb 20, 2018, 5:15 AM Valentin Korenblit <
valentin.korenblit@smile.fr> wrote:

> Hello,
>
> Thanks Thomas for the review. The problem is fixed for next version but
> I will wait for some more tests before sending it.
>

I can test this today at work, but I am using the same target architecture
as you, x86. We use this sw rasturizer with a Qt5 app on an old atom
platform (that has no modern kernel support for hw accelerated graphics).

I'd love to see it in 2018.02 if possible as that is BRs next LTS release
but Thomas and the team may not be adding anymore packages there as they
are already cutting RCs. For older platforms though, llvmpipe is pretty big
and should be in there. The difference between that and older sw renderers
like softpipe is tremendous.

>
> I would appreciate if anyone interested in this package can test/review
> it(applying the 3 patches at once) and give me some feedback following
> the guidelines in:
>
>
> https://buildroot.org/downloads/manual/manual.html#_reviewing_and_testing_patches
>
> Thanks in advance,
>
> Valent?n
>
>
> On 19/02/2018 21:22, Thomas Petazzoni wrote:
> > Hello,
> >
> > I have by far not reviewed everything, but noticed one problem.
> >
> > On Mon, 19 Feb 2018 18:18:03 +0100, Valentin Korenblit wrote:
> >
> >> +# Get target architecture
> >> +HOST_LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))
> > BR2_PACKAGE_LLVM_TARGET_ARCH does not exist, it is created by PATCH
> > 2/3. This is not good, as it breaks bisectability.
> >
> > Basically, your series should work even if we apply only PATCH 1/3. Or
> > if we apply only PATCH 1/3 and 2/3, etc.
> >
> > So using in PATCH 1/3 something that is introduced in PATCH 2/3 is not
> > good.
> >
> > Best regards,
> >
> > Thomas
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20180220/b4974656/attachment.html>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/llvm: new host package
  2018-02-20 12:13       ` Nimai Mahajan
@ 2018-02-20 12:41         ` Thomas Petazzoni
  2018-02-20 17:41           ` Nimai Mahajan
  0 siblings, 1 reply; 12+ messages in thread
From: Thomas Petazzoni @ 2018-02-20 12:41 UTC (permalink / raw)
  To: buildroot

Hello,

On Tue, 20 Feb 2018 12:13:54 +0000, Nimai Mahajan wrote:

> I can test this today at work, but I am using the same target architecture
> as you, x86. We use this sw rasturizer with a Qt5 app on an old atom
> platform (that has no modern kernel support for hw accelerated graphics).
> 
> I'd love to see it in 2018.02 if possible as that is BRs next LTS release
> but Thomas and the team may not be adding anymore packages there as they
> are already cutting RCs. For older platforms though, llvmpipe is pretty big
> and should be in there. The difference between that and older sw renderers
> like softpipe is tremendous.

I do realize the value of llvmpipe, and what it brings compared to
softpipe. However, we're already past 2018.02-rc2, and 2018.02 being a
LTS release, we really want to avoid introducing major changes that
close to the release.

Therefore I don't think llvm and llvmpipe support will make it to
2018.02. However, it should hopefully be in 2018.05, and you can always
backport the relevant patches if you want to stick to 2018.02 to
benefit from security updates.

Best regards,

Thomas Petazzoni
-- 
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
http://bootlin.com

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/llvm: new host package
  2018-02-20 12:41         ` Thomas Petazzoni
@ 2018-02-20 17:41           ` Nimai Mahajan
  2018-02-20 17:51             ` Adrian Perez de Castro
  0 siblings, 1 reply; 12+ messages in thread
From: Nimai Mahajan @ 2018-02-20 17:41 UTC (permalink / raw)
  To: buildroot

On Tue, Feb 20, 2018 at 7:41 AM, Thomas Petazzoni <
thomas.petazzoni@bootlin.com> wrote:

> Hello,
>
> On Tue, 20 Feb 2018 12:13:54 +0000, Nimai Mahajan wrote:
>
> > I can test this today at work, but I am using the same target
> architecture
> > as you, x86. We use this sw rasturizer with a Qt5 app on an old atom
> > platform (that has no modern kernel support for hw accelerated graphics).
>

Tested! Works just fine on x86. Pulled in BR master, applied the 3 patches
successfully, LLVM builds, mesa3d builds and links against it properly.


> >
> > I'd love to see it in 2018.02 if possible as that is BRs next LTS release
> > but Thomas and the team may not be adding anymore packages there as they
> > are already cutting RCs. For older platforms though, llvmpipe is pretty
> big
> > and should be in there. The difference between that and older sw
> renderers
> > like softpipe is tremendous.
>
> I do realize the value of llvmpipe, and what it brings compared to
> softpipe. However, we're already past 2018.02-rc2, and 2018.02 being a
> LTS release, we really want to avoid introducing major changes that
> close to the release.
>

Understood, no problem. Thanks for the consideration.

>
> Therefore I don't think llvm and llvmpipe support will make it to
> 2018.02. However, it should hopefully be in 2018.05, and you can always
> backport the relevant patches if you want to stick to 2018.02 to
> benefit from security updates.
>

Yes, will do that. It's just a pain in the build process to pre-patch a
tagged release rather than just having it committed upstream. But I
definitely understand.

>
> Best regards,
>
> Thomas Petazzoni
> --
> Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
> Embedded Linux and Kernel engineering
> http://bootlin.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20180220/a25f6a04/attachment.html>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 1/3] package/llvm: new host package
  2018-02-20 17:41           ` Nimai Mahajan
@ 2018-02-20 17:51             ` Adrian Perez de Castro
  0 siblings, 0 replies; 12+ messages in thread
From: Adrian Perez de Castro @ 2018-02-20 17:51 UTC (permalink / raw)
  To: buildroot

On Tue, 20 Feb 2018 12:41:04 -0500, Nimai Mahajan <nimaim@gmail.com> wrote:
> On Tue, Feb 20, 2018 at 7:41 AM, Thomas Petazzoni <
> thomas.petazzoni at bootlin.com> wrote:
> 
> > Hello,
> >
> > On Tue, 20 Feb 2018 12:13:54 +0000, Nimai Mahajan wrote:
> >
> > > I can test this today at work, but I am using the same target
> > architecture
> > > as you, x86. We use this sw rasturizer with a Qt5 app on an old atom
> > > platform (that has no modern kernel support for hw accelerated graphics).
> >
> 
> Tested! Works just fine on x86. Pulled in BR master, applied the 3 patches
> successfully, LLVM builds, mesa3d builds and links against it properly.

FWIW, in cases like this could you please add a ?Tested-by? tag to your reply,
so the tags get picked by the review system (thanks!).

For more info on this, there's a section in the manual about tags used by
the Buildroot project:

  https://buildroot.org/downloads/manual/manual.html#_reviewing_and_testing_patches
 
Cheers,

--
 Adri?n ?
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20180220/134439e5/attachment.asc>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 0/3] llvm for mesa3d
  2018-02-19 17:18 [Buildroot] [PATCH v2 0/3] llvm for mesa3d Valentin Korenblit
                   ` (2 preceding siblings ...)
  2018-02-19 17:18 ` [Buildroot] [PATCH v2 3/3] package/mesa3d: enable llvm support Valentin Korenblit
@ 2018-02-21 20:55 ` Andre Renaud
  2018-02-22  9:04   ` Valentin Korenblit
  3 siblings, 1 reply; 12+ messages in thread
From: Andre Renaud @ 2018-02-21 20:55 UTC (permalink / raw)
  To: buildroot

Hi Valentin,
Thanks for these patches - I've been looking at getting the llvmpipe mesa3d
driver going on the Dragonboard 410C, which uses the freedreno driver. The
work you've done here gets me very close, but I'm having one last issue I
thought you might know something about.

I'm having to patch in a change to enable this for AARCH64 on top of the
changes that you've made, but it looks like I'm ending up with the LLVM
tools generating output for the host architecture,
x86_64-unknown-linux-gnu, rather than the target architecture. As such I'm
getting the "No available targets are compatible with this triple" error
when llvmpipe gets initialised.

The changes I made to enable compilation were:
--- a/package/llvm/Config.in 2018-02-22 09:49:46.635210136 +1300
+++ b/package/llvm/Config.in 2018-02-21 11:49:39.638970682 +1300
@@ -3,11 +3,12 @@
  #
http://llvm.org/docs/GettingStarted.html#host-c-toolchain-both-compiler-and-standard-library
  # http://llvm.org/docs/GettingStarted.html#local-llvm-configuration
  depends on BR2_HOST_GCC_AT_LEAST_4_8
- default y if BR2_i386 || BR2_x86_64
+ default y if BR2_i386 || BR2_x86_64 || BR2_aarch64

 config BR2_PACKAGE_LLVM_TARGET_ARCH
  string
  default "X86" if BR2_i386 || BR2_x86_64
+ default "AArch64" if BR2_aarch64

 config BR2_PACKAGE_LLVM
  bool "llvm"

In addition I've tried tinkering with LLVM_NATIVE_ARCH, and
LLVM_TARGET_TRIPLE_ENV, but haven't had much luck.

I don't suppose you have any thoughts on what I might have missed? I'm
assuming that there is some confusion over the host llvm vs. the target. I
appreciate that your initial patch targeted x86 only, so if you're still
working on the ARM support then it may be easiest if I wait on that.

Regards,
Andre

On Tue, 20 Feb 2018 at 06:18 Valentin Korenblit <valentin.korenblit@smile.fr>
wrote:

> Hello all,
>
> This series provides LLVM support for Mesa3d, enabling
> llvmpipe software rasterizer.
>
> It must be considered that it does not provide a full LLVM
> installation for the host, only the necessary components to
> cross-compile LLVM for the target. It will install all target
> components as libLLVM.so.
>
> Changes in v2:
>
> The series has been simplified:
>
> *Build only backend for target architecture by default.
>
> *Support for AMDGPU(PATCH 3/4 in v1) was removed because I cannot test
> it currently.
>
> *Host: make options modified to build only llvm-config and llvm-tblgen
> (reduces drastically build time for host).
>
> *Target: support only x86 currently (tested), I will test on ARM soon.
>
>
> The idea is to add incrementally more options to configure LLVM as soon
> as I can test them.
>
> Regards,
>
> Valent?n
>
>
> Romain Naour (3):
>   package/llvm: new host package
>   package/llvm: enable target variant
>   package/mesa3d: enable llvm support
>
>  package/Config.in           |   1 +
>  package/Config.in.host      |   1 +
>  package/llvm/Config.in      |  19 +++
>  package/llvm/Config.in.host |   8 +
>  package/llvm/llvm.hash      |   2 +
>  package/llvm/llvm.mk        | 360
> ++++++++++++++++++++++++++++++++++++++++++++
>  package/mesa3d/Config.in    |   8 +
>  package/mesa3d/mesa3d.mk    |  18 ++-
>  8 files changed, 414 insertions(+), 3 deletions(-)
>  create mode 100644 package/llvm/Config.in
>  create mode 100644 package/llvm/Config.in.host
>  create mode 100644 package/llvm/llvm.hash
>  create mode 100644 package/llvm/llvm.mk
>
> --
> 2.14.3
>
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20180221/7c910628/attachment.html>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Buildroot] [PATCH v2 0/3] llvm for mesa3d
  2018-02-21 20:55 ` [Buildroot] [PATCH v2 0/3] llvm for mesa3d Andre Renaud
@ 2018-02-22  9:04   ` Valentin Korenblit
  0 siblings, 0 replies; 12+ messages in thread
From: Valentin Korenblit @ 2018-02-22  9:04 UTC (permalink / raw)
  To: buildroot



On 21/02/2018 21:55, Andre Renaud wrote:
> Hi Valentin,
> Thanks for these patches - I've been looking at getting the llvmpipe 
> mesa3d driver going on the Dragonboard 410C, which uses the freedreno 
> driver. The work you've done here gets me very close, but I'm having 
> one last issue I thought you might know something about.
>
> I'm having to patch in a change to enable this for AARCH64 on top of 
> the changes that you've made, but it looks like I'm ending up with the 
> LLVM tools generating output for the host architecture, 
> x86_64-unknown-linux-gnu, rather than the target architecture. As such 
> I'm getting the "No available targets are compatible with this triple" 
> error when llvmpipe gets initialised.
>
Hi Andre,

Today I will start working on aarch64, so I'll check that. I guess that 
error should be related to TARGETS_TO_BUILD.
> The changes I made to enable compilation were:
> --- a/package/llvm/Config.in2018-02-22 09:49:46.635210136 +1300
> +++ b/package/llvm/Config.in2018-02-21 11:49:39.638970682 +1300
> @@ -3,11 +3,12 @@
> # 
> http://llvm.org/docs/GettingStarted.html#host-c-toolchain-both-compiler-and-standard-library
> # http://llvm.org/docs/GettingStarted.html#local-llvm-configuration
> depends on BR2_HOST_GCC_AT_LEAST_4_8
> -default y if BR2_i386 || BR2_x86_64
> +default y if BR2_i386 || BR2_x86_64 || BR2_aarch64
> ?config BR2_PACKAGE_LLVM_TARGET_ARCH
> string
> default "X86" if BR2_i386 || BR2_x86_64
> +default "AArch64" if BR2_aarch64
> ?config BR2_PACKAGE_LLVM
> bool "llvm"
>
Your changes are ok, it shouldn't be necessary to do other 
modifications, but I haven't tested it yet.
> In addition I've tried tinkering with LLVM_NATIVE_ARCH, and 
> LLVM_TARGET_TRIPLE_ENV, but haven't had much luck.
>
> I don't suppose you have any thoughts on what I might have missed? I'm 
> assuming that there is some confusion over the host llvm vs. the 
> target. I appreciate that your initial patch targeted x86 only, so if 
> you're still working on the ARM support then it may be easiest if I 
> wait on that.
 ?I will keep you up to date.
>
> Regards,
> Andre
>
> On Tue, 20 Feb 2018 at 06:18 Valentin Korenblit 
> <valentin.korenblit at smile.fr <mailto:valentin.korenblit@smile.fr>> wrote:
>
>     Hello all,
>
>     This series provides LLVM support for Mesa3d, enabling
>     llvmpipe software rasterizer.
>
>     It must be considered that it does not provide a full LLVM
>     installation for the host, only the necessary components to
>     cross-compile LLVM for the target. It will install all target
>     components as libLLVM.so.
>
>     Changes in v2:
>
>     The series has been simplified:
>
>     *Build only backend for target architecture by default.
>
>     *Support for AMDGPU(PATCH 3/4 in v1) was removed because I cannot test
>     it currently.
>
>     *Host: make options modified to build only llvm-config and llvm-tblgen
>     (reduces drastically build time for host).
>
>     *Target: support only x86 currently (tested), I will test on ARM soon.
>
>
>     The idea is to add incrementally more options to configure LLVM as
>     soon
>     as I can test them.
>
>     Regards,
>
>     Valent?n
>
>
>     Romain Naour (3):
>     ? package/llvm: new host package
>     ? package/llvm: enable target variant
>     ? package/mesa3d: enable llvm support
>
>     ?package/Config.in? ? ? ? ? ?|? ?1 +
>     ?package/Config.in.host? ? ? |? ?1 +
>     ?package/llvm/Config.in? ? ? |? 19 +++
>     ?package/llvm/Config.in.host |? ?8 +
>     ?package/llvm/llvm.hash? ? ? |? ?2 +
>     ?package/llvm/llvm.mk <http://llvm.mk> ? | 360
>     ++++++++++++++++++++++++++++++++++++++++++++
>     ?package/mesa3d/Config.in? ? |? ?8 +
>     ?package/mesa3d/mesa3d.mk <http://mesa3d.mk> ? |? 18 ++-
>     ?8 files changed, 414 insertions(+), 3 deletions(-)
>     ?create mode 100644 package/llvm/Config.in
>     ?create mode 100644 package/llvm/Config.in.host
>     ?create mode 100644 package/llvm/llvm.hash
>     ?create mode 100644 package/llvm/llvm.mk <http://llvm.mk>
>
>     --
>     2.14.3
>
>     _______________________________________________
>     buildroot mailing list
>     buildroot at busybox.net <mailto:buildroot@busybox.net>
>     http://lists.busybox.net/mailman/listinfo/buildroot
>

Best regards,

Valent?n

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20180222/011265c0/attachment.html>

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2018-02-22  9:04 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-19 17:18 [Buildroot] [PATCH v2 0/3] llvm for mesa3d Valentin Korenblit
2018-02-19 17:18 ` [Buildroot] [PATCH v2 1/3] package/llvm: new host package Valentin Korenblit
2018-02-19 20:22   ` Thomas Petazzoni
2018-02-20 10:15     ` Valentin Korenblit
2018-02-20 12:13       ` Nimai Mahajan
2018-02-20 12:41         ` Thomas Petazzoni
2018-02-20 17:41           ` Nimai Mahajan
2018-02-20 17:51             ` Adrian Perez de Castro
2018-02-19 17:18 ` [Buildroot] [PATCH v2 2/3] package/llvm: enable target variant Valentin Korenblit
2018-02-19 17:18 ` [Buildroot] [PATCH v2 3/3] package/mesa3d: enable llvm support Valentin Korenblit
2018-02-21 20:55 ` [Buildroot] [PATCH v2 0/3] llvm for mesa3d Andre Renaud
2018-02-22  9:04   ` Valentin Korenblit

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.