[Mesa-stable] [PATCH] clover: Properly initialize LLVM targets when linking with component libs
Francisco Jerez
currojerez at riseup.net
Sat Aug 8 04:11:31 PDT 2015
Tom Stellard <thomas.stellard at amd.com> writes:
> Calls to LLVMIntialize* fail when we are linking against individual
> component libraries rather than one large shared object, because
> we only include component libraries that are required by the drivers.
>
> We need to make sure to only initialize the targets that we need.
>
> CC: 10.6 <mesa-stable at lists.freedesktop.org>
> ---
> configure.ac | 4 ++++
> src/gallium/state_trackers/clover/Makefile.am | 3 ++-
> src/gallium/state_trackers/clover/llvm/invocation.cpp | 17 +++++++++++++----
> 3 files changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 36197d3..e1a7d7a 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -2040,8 +2040,10 @@ require_egl_drm() {
> radeon_llvm_check() {
> if test ${LLVM_VERSION_INT} -lt 307; then
> amdgpu_llvm_target_name='r600'
> + CLOVER_CPP_FLAGS="${CLOVER_CPP_FLAGS} -DCLOVER_INIT_R600_TARGET"
> else
> amdgpu_llvm_target_name='amdgpu'
> + CLOVER_CPP_FLAGS="${CLOVER_CPP_FLAGS} -DCLOVER_INIT_AMDGPU_TARGET"
> fi
> if test "x$enable_gallium_llvm" != "xyes"; then
> AC_MSG_ERROR([--enable-gallium-llvm is required when building $1])
> @@ -2285,6 +2287,8 @@ AC_SUBST([XA_MINOR], $XA_MINOR)
> AC_SUBST([XA_TINY], $XA_TINY)
> AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
>
> +AC_SUBST([CLOVER_CPP_FLAGS], $CLOVER_CPP_FLAGS)
> +
> dnl Restore LDFLAGS and CPPFLAGS
> LDFLAGS="$_SAVE_LDFLAGS"
> CPPFLAGS="$_SAVE_CPPFLAGS"
> diff --git a/src/gallium/state_trackers/clover/Makefile.am b/src/gallium/state_trackers/clover/Makefile.am
> index fd0ccf8..975b36f 100644
> --- a/src/gallium/state_trackers/clover/Makefile.am
> +++ b/src/gallium/state_trackers/clover/Makefile.am
> @@ -45,7 +45,8 @@ libclllvm_la_CXXFLAGS = \
> $(DEFINES) \
> -DLIBCLC_INCLUDEDIR=\"$(LIBCLC_INCLUDEDIR)/\" \
> -DLIBCLC_LIBEXECDIR=\"$(LIBCLC_LIBEXECDIR)/\" \
> - -DCLANG_RESOURCE_DIR=\"$(CLANG_RESOURCE_DIR)\"
> + -DCLANG_RESOURCE_DIR=\"$(CLANG_RESOURCE_DIR)\" \
> + $(CLOVER_CPP_FLAGS)
>
> libclllvm_la_SOURCES = $(LLVM_SOURCES)
>
> diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
> index 86859af..361a149 100644
> --- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
> +++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
> @@ -786,10 +786,19 @@ namespace {
> init_targets() {
> static bool targets_initialized = false;
> if (!targets_initialized) {
> - LLVMInitializeAllTargets();
> - LLVMInitializeAllTargetInfos();
> - LLVMInitializeAllTargetMCs();
> - LLVMInitializeAllAsmPrinters();
> +#ifdef CLOVER_INIT_AMDGPU_TARGET
> + LLVMInitializeAMDGPUTarget();
> + LLVMInitializeAMDGPUTargetInfo();
> + LLVMInitializeAMDGPUTargetMC();
> + LLVMInitializeAMDGPUAsmPrinter();
> +#endif
> +
> +#ifdef CLOVER_INIT_R600_TARGET
> + LLVMInitializeR600Target();
> + LLVMInitializeR600TargetInfo();
> + LLVMInitializeR600TargetMC();
> + LLVMInitializeR600AsmPrinter();
> +#endif
Doesn't this feel like a layering violation? Why should clover
initialize specific LLVM back-ends? And isn't it a build-system bug if,
say, LLVMInitializeAllTargets() is being pulled in but some symbol it
depends on isn't?
> targets_initialized = true;
> }
> }
> --
> 2.0.4
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-stable/attachments/20150808/5169ea34/attachment.sig>
More information about the mesa-stable
mailing list