All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [RFC 0/9] Add llvm/clang + openCL
@ 2017-07-03 10:18 Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 1/9] package/llvm: new host package Romain Naour
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Hi,

This work is initially based on the series posted on the mailing list by Paul
Cercueil [1] and completed to add a more complete LLVM+Clang stack. Some
additional tools or libraries are missing (compiler-rt, clang-tools-extra...)

The series has been updated to use the latest llvm/clang release (4.0.1) and
taking into account some comments given to the Adrian Perez de Castro series
[2].

So, the five first patches add llvm and clang for the host and the target.
host-llvm and host-clang provide host-compiler and libraries used as
cross-compilation tools.
Target variant provide llvm/clang libraries needed at runtime on the target.

As also noticed by Adian, 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

As soon as we have host-llvm and llvm package, we can enable llvm as the shader
compiler for Radeon video cards (HD6310) when the R600 Gallium driver is used.

The sixth patch add the support for AMDGPU llvm target in order to allow
enabling llvm support in mesa3d.

The last two patches allow to enable openCL in mesa3d using libclc.

This is the first version published on the mailing list for review.

Best regards,
Romain

[1] http://lists.busybox.net/pipermail/buildroot/2015-February/119564.html
    http://patchwork.ozlabs.org/patch/440715/
    http://patchwork.ozlabs.org/patch/440716/

[2] http://lists.busybox.net/pipermail/buildroot/2017-June/194745.html
    http://patchwork.ozlabs.org/patch/777949/
    http://patchwork.ozlabs.org/patch/777947/

Romain Naour (9):
  package/llvm: new host package
  package/clang: new host package
  package/llvm: enable target variant
  package/llvm: RFC: install llvm-config in staging
  package/clang: enable target variant
  package/llvm: add AMDGPU support
  package/mesa3d: enable llvm support
  package/libclc: new package
  package/mesa3d: enable openCL support

 package/Config.in                                  |   2 +
 package/Config.in.host                             |   2 +
 package/clang/Config.in.host                       |   8 +
 package/clang/clang.hash                           |   2 +
 package/clang/clang.mk                             |  57 +++++
 ...y-allow-to-define-llvm-bindir-for-cross-c.patch |  37 +++
 package/libclc/Config.in                           |  10 +
 package/libclc/libclc.mk                           |  40 +++
 package/llvm/Config.in                             |  38 +++
 package/llvm/Config.in.host                        |   8 +
 package/llvm/llvm.hash                             |   2 +
 package/llvm/llvm.mk                               | 285 +++++++++++++++++++++
 package/mesa3d/Config.in                           |  23 ++
 package/mesa3d/mesa3d.mk                           |  24 +-
 14 files changed, 536 insertions(+), 2 deletions(-)
 create mode 100644 package/clang/Config.in.host
 create mode 100644 package/clang/clang.hash
 create mode 100644 package/clang/clang.mk
 create mode 100644 package/libclc/0001-configure.py-allow-to-define-llvm-bindir-for-cross-c.patch
 create mode 100644 package/libclc/Config.in
 create mode 100644 package/libclc/libclc.mk
 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.9.4

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

* [Buildroot] [RFC 1/9] package/llvm: new host package
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 2/9] package/clang: " Romain Naour
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Adrian Perez de Castro <aperez@igalia.com>
---
 package/Config.in.host      |   1 +
 package/llvm/Config.in.host |  29 +++++++
 package/llvm/llvm.hash      |   2 +
 package/llvm/llvm.mk        | 206 ++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 238 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 0932b9f..cf49950 100644
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -21,6 +21,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 0000000..454cf10
--- /dev/null
+++ b/package/llvm/Config.in.host
@@ -0,0 +1,29 @@
+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_arm || BR2_armeb
+	default y if BR2_aarch64
+	default y if BR2_i386 || BR2_x86_64
+	default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
+	default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
+	default y if BR2_sparc
+
+config BR2_PACKAGE_LLVM_TARGET_ARCH
+	string
+	default "ARM" if BR2_arm || BR2_armeb
+	default "AArch64" if BR2_aarch64
+	default "X86" if BR2_i386 || BR2_x86_64
+	default "Mips" if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
+	default "PowerPC" if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
+	default "Sparc" if BR2_sparc
+
+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 0000000..6ab2571
--- /dev/null
+++ b/package/llvm/llvm.hash
@@ -0,0 +1,2 @@
+# locally calculated
+sha256	da783db1f82d516791179fe103c71706046561f7972b18f0049242dee6712b51	llvm-4.0.1.src.tar.xz
diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
new file mode 100644
index 0000000..44b3a1d
--- /dev/null
+++ b/package/llvm/llvm.mk
@@ -0,0 +1,206 @@
+################################################################################
+#
+# llvm
+#
+################################################################################
+
+LLVM_VERSION = 4.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
+# host-libtool: Shared library manager
+
+# 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.
+#   Keep llvm utility binaries.
+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=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
+
+# * 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_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
+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 ON
+#   Disabled, since we don't install them to the target.
+HOST_LLVM_CONF_OPTS += -DLLVM_INCLUDE_UTILS=OFF
+
+# * LLVM_BUILD_RUNTIME: Build the LLVM runtime libraries ON
+#   Keep llvm runtime livraries
+HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_RUNTIME=ON
+
+# * 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
+
+HOST_LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))
+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=ON
+
+$(eval $(cmake-package))
+$(eval $(host-cmake-package))
-- 
2.9.4

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

* [Buildroot] [RFC 2/9] package/clang: new host package
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 1/9] package/llvm: new host package Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 3/9] package/llvm: enable target variant Romain Naour
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Install clang-tblgen to HOST_DIR.

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/Config.in.host       |  1 +
 package/clang/Config.in.host |  8 ++++++++
 package/clang/clang.hash     |  2 ++
 package/clang/clang.mk       | 36 ++++++++++++++++++++++++++++++++++++
 4 files changed, 47 insertions(+)
 create mode 100644 package/clang/Config.in.host
 create mode 100644 package/clang/clang.hash
 create mode 100644 package/clang/clang.mk

diff --git a/package/Config.in.host b/package/Config.in.host
index cf49950..ecbbea0 100644
--- a/package/Config.in.host
+++ b/package/Config.in.host
@@ -4,6 +4,7 @@ menu "Host utilities"
 	source "package/android-tools/Config.in.host"
 	source "package/cbootimage/Config.in.host"
 	source "package/checkpolicy/Config.in.host"
+	source "package/clang/Config.in.host"
 	source "package/cramfs/Config.in.host"
 	source "package/dfu-util/Config.in.host"
 	source "package/dos2unix/Config.in.host"
diff --git a/package/clang/Config.in.host b/package/clang/Config.in.host
new file mode 100644
index 0000000..8d6c99a
--- /dev/null
+++ b/package/clang/Config.in.host
@@ -0,0 +1,8 @@
+config BR2_PACKAGE_HOST_CLANG
+	bool "host clang"
+	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
+	help
+	  Clang is a C++, Objective C and Objective C++ front-end for
+	  the LLVM compiler.
+
+	  http://llvm.org
diff --git a/package/clang/clang.hash b/package/clang/clang.hash
new file mode 100644
index 0000000..c2a9d23
--- /dev/null
+++ b/package/clang/clang.hash
@@ -0,0 +1,2 @@
+# locally calculated
+sha256	61738a735852c23c3bdbe52d035488cdb2083013f384d67c1ba36fabebd8769b	cfe-4.0.1.src.tar.xz
diff --git a/package/clang/clang.mk b/package/clang/clang.mk
new file mode 100644
index 0000000..e70afa4
--- /dev/null
+++ b/package/clang/clang.mk
@@ -0,0 +1,36 @@
+################################################################################
+#
+# clang
+#
+################################################################################
+
+CLANG_VERSION = 4.0.1
+CLANG_SITE = http://llvm.org/releases/$(CLANG_VERSION)
+CLANG_SOURCE = cfe-$(CLANG_VERSION).src.tar.xz
+CLANG_LICENSE = NCSA
+CLANG_LICENSE_FILES = LICENSE.TXT
+
+HOST_CLANG_DEPENDENCIES = host-llvm host-libxml2
+
+CLANG_SUPPORTS_IN_SOURCE_BUILD = NO
+
+HOST_CLANG_CONF_OPTS += -DLLVM_INCLUDE_TESTS=OFF \
+	-DCLANG_INCLUDE_TESTS=OFF \
+	-DCLANG_BUILD_EXAMPLES=OFF \
+	-DCLANG_BUILD_TOOLS=ON \
+	-DCLANG_VENDOR=$(TARGET_VENDOR) \
+	-DCLANG_VENDOR_UTI="http://bugs.buildroot.net/"
+
+# For some reason clang-tblgen is not installed in HOST_DIR.
+define HOST_CLANG_COPY_CLANG_TBLGEN_TO_HOST_DIR
+	$(INSTALL) -D -m 0755 $(@D)/buildroot-build/bin/clang-tblgen \
+		$(HOST_DIR)/usr/bin/clang-tblgen
+endef
+HOST_CLANG_POST_INSTALL_HOOKS = HOST_CLANG_COPY_CLANG_TBLGEN_TO_HOST_DIR
+
+# We need to set a proper RPATH otherwise the build stop on the RPATH check:
+# *** ERROR: package host-clang installs executables without proper RPATH
+HOST_CLANG_CONF_ENV += \
+	LDFLAGS="$(HOST_LDFLAGS) -L${HOST_DIR}/usr/lib -Wl,-rpath,${HOST_DIR}/usr/lib"
+
+$(eval $(host-cmake-package))
-- 
2.9.4

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

* [Buildroot] [RFC 3/9] package/llvm: enable target variant
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 1/9] package/llvm: new host package Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 2/9] package/clang: " Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 4/9] package/llvm: RFC: install llvm-config in staging Romain Naour
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

We need llvm libraries libLLVM* for the target installed in staging
and target directories.

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.

Add tools to deploy *.a in STAGING_DIR.

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Adrian Perez de Castro <aperez@igalia.com>
---
 package/Config.in                          |  1 +
 package/llvm/{Config.in.host => Config.in} |  4 +-
 package/llvm/Config.in.host                | 21 ----------
 package/llvm/llvm.mk                       | 62 +++++++++++++++++++++++++++++-
 4 files changed, 63 insertions(+), 25 deletions(-)
 copy package/llvm/{Config.in.host => Config.in} (95%)

diff --git a/package/Config.in b/package/Config.in
index 355aa52..c34325f 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -1435,6 +1435,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.host b/package/llvm/Config.in
similarity index 95%
copy from package/llvm/Config.in.host
copy to package/llvm/Config.in
index 454cf10..84dde8d 100644
--- a/package/llvm/Config.in.host
+++ b/package/llvm/Config.in
@@ -19,8 +19,8 @@ config BR2_PACKAGE_LLVM_TARGET_ARCH
 	default "PowerPC" if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
 	default "Sparc" if BR2_sparc
 
-config BR2_PACKAGE_HOST_LLVM
-	bool "host llvm"
+config BR2_PACKAGE_LLVM
+	bool "llvm"
 	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
 	help
 	  The LLVM Project is a collection of modular and reusable
diff --git a/package/llvm/Config.in.host b/package/llvm/Config.in.host
index 454cf10..fc46535 100644
--- a/package/llvm/Config.in.host
+++ b/package/llvm/Config.in.host
@@ -1,24 +1,3 @@
-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_arm || BR2_armeb
-	default y if BR2_aarch64
-	default y if BR2_i386 || BR2_x86_64
-	default y if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
-	default y if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
-	default y if BR2_sparc
-
-config BR2_PACKAGE_LLVM_TARGET_ARCH
-	string
-	default "ARM" if BR2_arm || BR2_armeb
-	default "AArch64" if BR2_aarch64
-	default "X86" if BR2_i386 || BR2_x86_64
-	default "Mips" if BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el
-	default "PowerPC" if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
-	default "Sparc" if BR2_sparc
-
 config BR2_PACKAGE_HOST_LLVM
 	bool "host llvm"
 	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
index 44b3a1d..3d0a052 100644
--- a/package/llvm/llvm.mk
+++ b/package/llvm/llvm.mk
@@ -11,6 +11,7 @@ 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.
@@ -18,52 +19,76 @@ LLVM_SUPPORTS_IN_SOURCE_BUILD = NO
 HOST_LLVM_DEPENDENCIES = host-python host-zlib
 # host-libtool: Shared library manager
 
+LLVM_DEPENDENCIES = host-llvm zlib
+
+# Use native llvm-tblgen from host-llvm.
+LLVM_CONF_OPTS += -DLLVM_TABLEGEN=$(HOST_DIR)/usr/bin/llvm-tblgen
+
 # 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.
+#   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=OFF
+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)
@@ -73,120 +98,152 @@ 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
 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=OFF
 
 # * 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 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
 
 # * LLVM_BUILD_RUNTIME: Build the LLVM runtime libraries ON
-#   Keep llvm runtime livraries
+#   Build llvm runtime livraries for the host, not for the target.
 HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_RUNTIME=ON
+LLVM_CONF_OPTS += -DLLVM_BUILD_RUNTIME=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
 
 HOST_LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))
 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.
@@ -201,6 +258,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=ON
+LLVM_CONF_OPTS += -DLLVM_BUILD_LLVM_DYLIB=ON
 
 $(eval $(cmake-package))
 $(eval $(host-cmake-package))
-- 
2.9.4

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

* [Buildroot] [RFC 4/9] package/llvm: RFC: install llvm-config in staging
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
                   ` (2 preceding siblings ...)
  2017-07-03 10:18 ` [Buildroot] [RFC 3/9] package/llvm: enable target variant Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 5/9] package/clang: enable target variant Romain Naour
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/llvm/llvm.mk | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
index 3d0a052..45ce4b4 100644
--- a/package/llvm/llvm.mk
+++ b/package/llvm/llvm.mk
@@ -24,6 +24,22 @@ LLVM_DEPENDENCIES = host-llvm zlib
 # Use native llvm-tblgen from host-llvm.
 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)/usr/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"
-- 
2.9.4

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

* [Buildroot] [RFC 5/9] package/clang: enable target variant
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
                   ` (3 preceding siblings ...)
  2017-07-03 10:18 ` [Buildroot] [RFC 4/9] package/llvm: RFC: install llvm-config in staging Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 6/9] package/llvm: add AMDGPU support Romain Naour
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/clang/clang.mk | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/package/clang/clang.mk b/package/clang/clang.mk
index e70afa4..2a82165 100644
--- a/package/clang/clang.mk
+++ b/package/clang/clang.mk
@@ -12,7 +12,10 @@ CLANG_LICENSE_FILES = LICENSE.TXT
 
 HOST_CLANG_DEPENDENCIES = host-llvm host-libxml2
 
+CLANG_DEPENDENCIES = host-clang host-llvm host-libxml2 llvm
+
 CLANG_SUPPORTS_IN_SOURCE_BUILD = NO
+CLANG_INSTALL_STAGING = YES
 
 HOST_CLANG_CONF_OPTS += -DLLVM_INCLUDE_TESTS=OFF \
 	-DCLANG_INCLUDE_TESTS=OFF \
@@ -21,6 +24,20 @@ HOST_CLANG_CONF_OPTS += -DLLVM_INCLUDE_TESTS=OFF \
 	-DCLANG_VENDOR=$(TARGET_VENDOR) \
 	-DCLANG_VENDOR_UTI="http://bugs.buildroot.net/"
 
+CLANG_CONF_ENV += LLVM_CONFIG=$(STAGING_DIR)/usr/bin/llvm-config
+
+# Needs build_tools to provide clangSema etc...
+CLANG_CONF_OPTS += -DLLVM_INCLUDE_TESTS=OFF \
+	-DCLANG_INCLUDE_TESTS=OFF \
+	-DCLANG_BUILD_EXAMPLES=OFF \
+	-DCLANG_BUILD_TOOLS=ON \
+	-DCLANG_INCLUDE_TESTS=OFF \
+	-DCLANG_TABLEGEN=$(HOST_DIR)/usr/bin/clang-tblgen \
+	-DCLANG_VENDOR=$(TARGET_VENDOR) \
+	-DCLANG_VENDOR_UTI="http://bugs.buildroot.net/" \
+	-DLLVM_CONFIG=$(STAGING_DIR)/usr/bin/llvm-config \
+	-DLLVM_TABLEGEN_EXE=$(HOST_DIR)/usr/bin/llvm-tblgen
+
 # For some reason clang-tblgen is not installed in HOST_DIR.
 define HOST_CLANG_COPY_CLANG_TBLGEN_TO_HOST_DIR
 	$(INSTALL) -D -m 0755 $(@D)/buildroot-build/bin/clang-tblgen \
@@ -33,4 +50,8 @@ HOST_CLANG_POST_INSTALL_HOOKS = HOST_CLANG_COPY_CLANG_TBLGEN_TO_HOST_DIR
 HOST_CLANG_CONF_ENV += \
 	LDFLAGS="$(HOST_LDFLAGS) -L${HOST_DIR}/usr/lib -Wl,-rpath,${HOST_DIR}/usr/lib"
 
+CLANG_CONF_ENV += \
+	LDFLAGS="$(LDFLAGS) -L${STAGING_DIR}/usr/lib -Wl,-rpath,${STAGING_DIR}/usr/lib"
+
+$(eval $(cmake-package))
 $(eval $(host-cmake-package))
-- 
2.9.4

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

* [Buildroot] [RFC 6/9] package/llvm: add AMDGPU support
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
                   ` (4 preceding siblings ...)
  2017-07-03 10:18 ` [Buildroot] [RFC 5/9] package/clang: enable target variant Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 7/9] package/mesa3d: enable llvm support Romain Naour
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Limit the number of supported target for mesa3d when openCL support is enabled.
With -DLLVM_TARGETS_TO_BUILD="all" mesa3d fail to build on x86_64 target with AMDGPU target:

 CXXLD    libOpenCL.la
../../../../src/gallium/state_trackers/clover/.libs/libclover.a(libclllvm_la-invocation.o): In function `(anonymous namespace)::create_context(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
invocation.cpp:(.text+0x1a8): undefined reference to `LLVMInitializeAArch64Target'
invocation.cpp:(.text+0x1b2): undefined reference to `LLVMInitializeARMTarget'
invocation.cpp:(.text+0x1b7): undefined reference to `LLVMInitializeBPFTarget'
invocation.cpp:(.text+0x1bc): undefined reference to `LLVMInitializeHexagonTarget'
invocation.cpp:(.text+0x1c1): undefined reference to `LLVMInitializeLanaiTarget'
invocation.cpp:(.text+0x1c6): undefined reference to `LLVMInitializeMipsTarget'
invocation.cpp:(.text+0x1cb): undefined reference to `LLVMInitializeMSP430Target'
invocation.cpp:(.text+0x1d0): undefined reference to `LLVMInitializeNVPTXTarget'
invocation.cpp:(.text+0x1d5): undefined reference to `LLVMInitializePowerPCTarget'
invocation.cpp:(.text+0x1da): undefined reference to `LLVMInitializeRISCVTarget'
invocation.cpp:(.text+0x1df): undefined reference to `LLVMInitializeSparcTarget'
invocation.cpp:(.text+0x1e4): undefined reference to `LLVMInitializeSystemZTarget'
invocation.cpp:(.text+0x1ee): undefined reference to `LLVMInitializeXCoreTarget'
invocation.cpp:(.text+0x1f3): undefined reference to `LLVMInitializeAArch64TargetInfo'
invocation.cpp:(.text+0x1fd): undefined reference to `LLVMInitializeARMTargetInfo'
invocation.cpp:(.text+0x202): undefined reference to `LLVMInitializeBPFTargetInfo'
invocation.cpp:(.text+0x207): undefined reference to `LLVMInitializeHexagonTargetInfo'
invocation.cpp:(.text+0x20c): undefined reference to `LLVMInitializeLanaiTargetInfo'
invocation.cpp:(.text+0x211): undefined reference to `LLVMInitializeMipsTargetInfo'
invocation.cpp:(.text+0x216): undefined reference to `LLVMInitializeMSP430TargetInfo'
invocation.cpp:(.text+0x21b): undefined reference to `LLVMInitializeNVPTXTargetInfo'
invocation.cpp:(.text+0x220): undefined reference to `LLVMInitializePowerPCTargetInfo'
invocation.cpp:(.text+0x225): undefined reference to `LLVMInitializeRISCVTargetInfo'
invocation.cpp:(.text+0x22a): undefined reference to `LLVMInitializeSparcTargetInfo'
invocation.cpp:(.text+0x22f): undefined reference to `LLVMInitializeSystemZTargetInfo'
invocation.cpp:(.text+0x239): undefined reference to `LLVMInitializeXCoreTargetInfo'
invocation.cpp:(.text+0x23e): undefined reference to `LLVMInitializeAArch64TargetMC'
invocation.cpp:(.text+0x248): undefined reference to `LLVMInitializeARMTargetMC'
invocation.cpp:(.text+0x24d): undefined reference to `LLVMInitializeBPFTargetMC'
invocation.cpp:(.text+0x252): undefined reference to `LLVMInitializeHexagonTargetMC'
invocation.cpp:(.text+0x257): undefined reference to `LLVMInitializeLanaiTargetMC'
invocation.cpp:(.text+0x25c): undefined reference to `LLVMInitializeMipsTargetMC'
invocation.cpp:(.text+0x261): undefined reference to `LLVMInitializeMSP430TargetMC'
invocation.cpp:(.text+0x266): undefined reference to `LLVMInitializeNVPTXTargetMC'
invocation.cpp:(.text+0x26b): undefined reference to `LLVMInitializePowerPCTargetMC'
invocation.cpp:(.text+0x270): undefined reference to `LLVMInitializeRISCVTargetMC'
invocation.cpp:(.text+0x275): undefined reference to `LLVMInitializeSparcTargetMC'
invocation.cpp:(.text+0x27a): undefined reference to `LLVMInitializeSystemZTargetMC'
invocation.cpp:(.text+0x284): undefined reference to `LLVMInitializeXCoreTargetMC'
invocation.cpp:(.text+0x289): undefined reference to `LLVMInitializeAArch64AsmPrinter'
invocation.cpp:(.text+0x293): undefined reference to `LLVMInitializeARMAsmPrinter'
invocation.cpp:(.text+0x298): undefined reference to `LLVMInitializeBPFAsmPrinter'
invocation.cpp:(.text+0x29d): undefined reference to `LLVMInitializeHexagonAsmPrinter'
invocation.cpp:(.text+0x2a2): undefined reference to `LLVMInitializeLanaiAsmPrinter'
invocation.cpp:(.text+0x2a7): undefined reference to `LLVMInitializeMipsAsmPrinter'
invocation.cpp:(.text+0x2ac): undefined reference to `LLVMInitializeMSP430AsmPrinter'
invocation.cpp:(.text+0x2b1): undefined reference to `LLVMInitializeNVPTXAsmPrinter'
invocation.cpp:(.text+0x2b6): undefined reference to `LLVMInitializePowerPCAsmPrinter'
invocation.cpp:(.text+0x2bb): undefined reference to `LLVMInitializeSparcAsmPrinter'
invocation.cpp:(.text+0x2c0): undefined reference to `LLVMInitializeSystemZAsmPrinter'
invocation.cpp:(.text+0x2ca): undefined reference to `LLVMInitializeXCoreAsmPrinter'
collect2: error: ld returned 1 exit status

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/llvm/Config.in | 9 +++++++++
 package/llvm/llvm.mk   | 9 +++++++--
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/package/llvm/Config.in b/package/llvm/Config.in
index 84dde8d..417af6e 100644
--- a/package/llvm/Config.in
+++ b/package/llvm/Config.in
@@ -27,3 +27,12 @@ config BR2_PACKAGE_LLVM
 	  compiler and toolchain technologies.
 
 	  http://llvm.org
+
+if BR2_PACKAGE_LLVM
+
+config BR2_PACKAGE_LLVM_TARGET_ARCH_AMDGPU
+	bool "AMDGPU"
+	help
+	  TODO
+
+endif # BR2_PACKAGE_LLVM
diff --git a/package/llvm/llvm.mk b/package/llvm/llvm.mk
index 45ce4b4..0e381ff 100644
--- a/package/llvm/llvm.mk
+++ b/package/llvm/llvm.mk
@@ -228,8 +228,13 @@ HOST_LLVM_CONF_OPTS += -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF
 LLVM_CONF_OPTS += -DLLVM_BUILD_EXTERNAL_COMPILER_RT=OFF
 
 HOST_LLVM_TARGET_ARCH = $(call qstrip,$(BR2_PACKAGE_LLVM_TARGET_ARCH))
-HOST_LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD=$(HOST_LLVM_TARGET_ARCH)
-LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD=$(HOST_LLVM_TARGET_ARCH)
+
+ifeq ($(BR2_PACKAGE_LLVM_TARGET_ARCH_AMDGPU),y)
+HOST_LLVM_TARGET_TO_BUILD = "$(HOST_LLVM_TARGET_ARCH);AMDGPU"
+endif
+
+HOST_LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD=$(HOST_LLVM_TARGET_TO_BUILD)
+LLVM_CONF_OPTS += -DLLVM_TARGETS_TO_BUILD=$(HOST_LLVM_TARGET_TO_BUILD)
 # 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)
-- 
2.9.4

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

* [Buildroot] [RFC 7/9] package/mesa3d: enable llvm support
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
                   ` (5 preceding siblings ...)
  2017-07-03 10:18 ` [Buildroot] [RFC 6/9] package/llvm: add AMDGPU support Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 8/9] package/libclc: new package Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 9/9] package/mesa3d: enable openCL support Romain Naour
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Romain Naour <romain.naour@gmail.com>
Cc: Adrian Perez de Castro <aperez@igalia.com>
---
 package/mesa3d/Config.in |  8 ++++++++
 package/mesa3d/mesa3d.mk | 17 ++++++++++++++---
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/package/mesa3d/Config.in b/package/mesa3d/Config.in
index ad41b1c..94ef767 100644
--- a/package/mesa3d/Config.in
+++ b/package/mesa3d/Config.in
@@ -23,6 +23,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 7b312e3..4633bff 100644
--- a/package/mesa3d/mesa3d.mk
+++ b/package/mesa3d/mesa3d.mk
@@ -26,6 +26,20 @@ MESA3D_DEPENDENCIES = \
 # Disable assembly usage.
 MESA3D_CONF_OPTS = --disable-asm
 
+ifeq ($(BR2_PACKAGE_MESA3D_LLVM),y)
+MESA3D_DEPENDENCIES += host-llvm llvm
+MESA3D_CONF_OPTS += \
+	--with-llvm-prefix=$(STAGING_DIR)/usr \
+	--enable-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.
@@ -213,7 +227,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.9.4

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

* [Buildroot] [RFC 8/9] package/libclc: new package
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
                   ` (6 preceding siblings ...)
  2017-07-03 10:18 ` [Buildroot] [RFC 7/9] package/mesa3d: enable llvm support Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  2017-07-03 10:18 ` [Buildroot] [RFC 9/9] package/mesa3d: enable openCL support Romain Naour
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Use the latest commit in master branch.

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/Config.in                                  |  1 +
 ...y-allow-to-define-llvm-bindir-for-cross-c.patch | 37 ++++++++++++++++++++
 package/libclc/Config.in                           | 10 ++++++
 package/libclc/libclc.mk                           | 40 ++++++++++++++++++++++
 4 files changed, 88 insertions(+)
 create mode 100644 package/libclc/0001-configure.py-allow-to-define-llvm-bindir-for-cross-c.patch
 create mode 100644 package/libclc/Config.in
 create mode 100644 package/libclc/libclc.mk

diff --git a/package/Config.in b/package/Config.in
index c34325f..711c6f3 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -266,6 +266,7 @@ comment "Graphic libraries"
 	source "package/fbv/Config.in"
 	source "package/freerdp/Config.in"
 	source "package/imagemagick/Config.in"
+	source "package/libclc/Config.in"
 	source "package/linux-fusion/Config.in"
 	source "package/lite/Config.in"
 	source "package/mesa3d/Config.in"
diff --git a/package/libclc/0001-configure.py-allow-to-define-llvm-bindir-for-cross-c.patch b/package/libclc/0001-configure.py-allow-to-define-llvm-bindir-for-cross-c.patch
new file mode 100644
index 0000000..27f46cf
--- /dev/null
+++ b/package/libclc/0001-configure.py-allow-to-define-llvm-bindir-for-cross-c.patch
@@ -0,0 +1,37 @@
+From d46e38da621a64637970a071b9aa08dc17f0638b Mon Sep 17 00:00:00 2001
+From: Romain Naour <romain.naour@gmail.com>
+Date: Mon, 3 Jul 2017 10:37:11 +0200
+Subject: [PATCH] configure.py: allow to define llvm-bindir for cross-compiling
+
+TODO
+
+Signed-off-by: Romain Naour <romain.naour@gmail.com>
+---
+ configure.py | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/configure.py b/configure.py
+index f26f535..fe4cbc0 100755
+--- a/configure.py
++++ b/configure.py
+@@ -22,6 +22,8 @@ import metabuild
+ p = OptionParser()
+ p.add_option('--with-llvm-config', metavar='PATH',
+              help='use given llvm-config script')
++p.add_option('--llvm-bindir', metavar='PATH',
++             help='use given llvm-bindir')
+ p.add_option('--with-cxx-compiler', metavar='PATH',
+              help='use given C++ compiler')
+ p.add_option('--prefix', metavar='PATH',
+@@ -74,7 +76,7 @@ if llvm_int_version < 400:
+     sys.exit(1)
+ 
+ llvm_system_libs = llvm_config(['--system-libs'])
+-llvm_bindir = llvm_config(['--bindir'])
++llvm_bindir = options.llvm_bindir or llvm_config(['--bindir'])
+ llvm_core_libs = llvm_config(['--libs', 'core', 'bitreader', 'bitwriter']) + ' ' + \
+                  llvm_system_libs + ' ' + \
+                  llvm_config(['--ldflags'])
+-- 
+2.9.4
+
diff --git a/package/libclc/Config.in b/package/libclc/Config.in
new file mode 100644
index 0000000..44d4d96
--- /dev/null
+++ b/package/libclc/Config.in
@@ -0,0 +1,10 @@
+config BR2_PACKAGE_LIBCLC
+	bool "libclc"
+	depends on BR2_PACKAGE_LLVM_ARCH_SUPPORTS
+	help
+	  libclc is an open source, BSD/MIT dual licensed
+	  implementation of the library requirements of the OpenCL C
+	  programming language, as specified by the OpenCL 1.1
+	  Specification.
+
+	  http://libclc.llvm.org/
diff --git a/package/libclc/libclc.mk b/package/libclc/libclc.mk
new file mode 100644
index 0000000..a176a59
--- /dev/null
+++ b/package/libclc/libclc.mk
@@ -0,0 +1,40 @@
+################################################################################
+#
+# libclc
+#
+################################################################################
+
+LIBCLC_VERSION = 1cb3fbf504e25d86d972e8b2af3e24571767046b
+LIBCLC_SITE = http://llvm.org/git/libclc.git
+LIBCLC_SITE_METHOD = git
+
+LIBCLC_DEPENDENCIES = host-clang host-llvm
+
+LIBCLC_INSTALL_STAGING = YES
+
+# C++ compiler is used to build a small tool (prepare-builtins) for the host.
+# It must be build with the C++ compiler from the host, simply use
+# HOSTCXX_NOCCACHE.
+LIBCLC_CONF_OPTS = --with-llvm-config=$(HOST_DIR)/usr/bin/llvm-config \
+	--prefix="/usr" \
+	--pkgconfigdir="/usr/lib/pkgconfig" \
+	--llvm-bindir=$(HOST_DIR)/usr/bin \
+	--with-cxx-compiler='$(HOSTCXX_NOCCACHE)'
+
+define LIBCLC_CONFIGURE_CMDS
+	(cd $(@D); $(TARGET_CONFIGURE_OPTS) ./configure.py $(LIBCLC_CONF_OPTS))
+endef
+
+define LIBCLC_BUILD_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
+endef
+
+define LIBCLC_INSTALL_TARGET_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(TARGET_DIR) install
+endef
+
+define LIBCLC_INSTALL_STAGING_CMDS
+	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) DESTDIR=$(STAGING_DIR) install
+endef
+
+$(eval $(generic-package))
-- 
2.9.4

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

* [Buildroot] [RFC 9/9] package/mesa3d: enable openCL support
  2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
                   ` (7 preceding siblings ...)
  2017-07-03 10:18 ` [Buildroot] [RFC 8/9] package/libclc: new package Romain Naour
@ 2017-07-03 10:18 ` Romain Naour
  8 siblings, 0 replies; 10+ messages in thread
From: Romain Naour @ 2017-07-03 10:18 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Romain Naour <romain.naour@gmail.com>
---
 package/mesa3d/Config.in | 15 +++++++++++++++
 package/mesa3d/mesa3d.mk |  9 +++++++++
 2 files changed, 24 insertions(+)

diff --git a/package/mesa3d/Config.in b/package/mesa3d/Config.in
index 94ef767..4e7f56a 100644
--- a/package/mesa3d/Config.in
+++ b/package/mesa3d/Config.in
@@ -31,6 +31,21 @@ config BR2_PACKAGE_MESA3D_LLVM
 comment "mesa3d w/ llvm needs a llvm compiler"
 	depends on !BR2_PACKAGE_LLVM_ARCH_SUPPORTS
 
+config BR2_PACKAGE_MESA3D_OPENCL
+	bool "mesa3d openCL"
+	depends on BR2_PACKAGE_MESA3D_LLVM
+	depends on BR2_USE_WCHAR # elfutils
+	depends on BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC # elfutils
+	depends on !BR2_bfin # elfutils
+	select BR2_PACKAGE_ELFUTILS
+	select BR2_PACKAGE_LIBCLC
+
+comment "mesa3d openCL needs a uClibc or glibc toolchain w/ wchar"
+	depends on BR2_PACKAGE_MESA3D_LLVM
+	depends on !BR2_bfin
+	depends on !BR2_USE_WCHAR \
+		|| !(BR2_TOOLCHAIN_USES_UCLIBC || BR2_TOOLCHAIN_USES_GLIBC)
+
 # 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 4633bff..530a63c 100644
--- a/package/mesa3d/mesa3d.mk
+++ b/package/mesa3d/mesa3d.mk
@@ -227,4 +227,13 @@ else
 MESA3D_CONF_OPTS += --disable-lmsensors
 endif
 
+# libclc (Clover) requires libelf
+ifeq ($(BR2_PACKAGE_MESA3D_OPENCL),y)
+MESA3D_DEPENDENCIES += clang elfutils libclc
+MESA3D_CONF_OPTS += --enable-opencl \
+	--with-clang-libdir=$(HOST_DIR)/usr/lib
+else
+MESA3D_CONF_OPTS += --disable-opencl
+endif
+
 $(eval $(autotools-package))
-- 
2.9.4

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

end of thread, other threads:[~2017-07-03 10:18 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-03 10:18 [Buildroot] [RFC 0/9] Add llvm/clang + openCL Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 1/9] package/llvm: new host package Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 2/9] package/clang: " Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 3/9] package/llvm: enable target variant Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 4/9] package/llvm: RFC: install llvm-config in staging Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 5/9] package/clang: enable target variant Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 6/9] package/llvm: add AMDGPU support Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 7/9] package/mesa3d: enable llvm support Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 8/9] package/libclc: new package Romain Naour
2017-07-03 10:18 ` [Buildroot] [RFC 9/9] package/mesa3d: enable openCL support Romain Naour

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.