Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Jan 2019 16:02:22 +0100
From:      Jan Beich <jbeich@FreeBSD.org>
To:        Niclas Zeising <zeising@freebsd.org>
Cc:        Mahmoud Al-Qudsi <mqudsi@neosmart.net>, freebsd-ports@freebsd.org
Subject:   Re: Separate build/runtime llvm60 dependencies
Message-ID:  <k1j3-z5s1-wny@FreeBSD.org>
In-Reply-To: <909db0dd-afb1-8b7a-9b3d-0fe3295f911b@freebsd.org> (Niclas Zeising's message of "Thu, 17 Jan 2019 15:12:46 %2B0100")
References:  <CACcTrKcSMxYEiLdzsbeQ2DYOYWZ7KsPwry_hx0-CATD-tc5p5w@mail.gmail.com> <909db0dd-afb1-8b7a-9b3d-0fe3295f911b@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Niclas Zeising <zeising@freebsd.org> writes:

> On 1/17/19 12:17 AM, Mahmoud Al-Qudsi wrote:
>
>> Hello list,
>>
>> Another complaint about `llvm60` here - I was hoping that the situation would be
>> ameliorated before the release of FreeBSD 12, but alas that is not the case.
>>
>>  From what I understand, `mesa-dri` doesn't build out-of-the-box with `llvm70`.
>> Cool. But that makes `llvm60` a build dependency for `mesa-dri` - the binary
>> package should not require installing 813 MiB's worth of compilers,
>> documentation, etc. just to run something built with that toolchain.
>>
>> Surely the runtime components of `llvm60` sufficient to use libraries built with
>> that toolchain can be split off into their own package? Even better, perhaps
>> `mesa-dri` can be statically compiled? (I know it has C++ components, but I'm
>> not sure if they ever cross the API barrier -- I haven't looked into it though,
>> so it's just wild speculation on my part.)
>>
>> (I do see that there exists a patch for getting `mesa-dri` to build with
>> `llvm70` hopefully making this conversation somewhat moot, but I still strongly
>> object to the principle of adding such massive dependencies for common
>> packages.)
>>
>
>
> This has been discussed several times in the past.  Mesa uses
> libraries and components of llvm that are not in base, hence the
> dependency on the ports version of llvm.  This also untangles some of
> the issues with llvm library usage, since we only have to support one
> version of llvm usage in mesa, regardless of FreeBSD version.
>
> Since mesa uses llvm libraries (not just toolchain to build) this can
> not be made in to a build time only dependency.

Did anyone actually try to switch mesa-* ports to --disable-llvm-shared-libs?
In the past libLLVM.so caused crashes when another application/library/plugin
loaded a different version of it due to GLOBAL bindings.

$ readelf -a /usr/local/llvm*/lib/libLLVM.so | fgrep LLVMContextCreate
  6561: 0000000000771660    37 FUNC    GLOBAL DEFAULT   11 LLVMContextCreate
 36811: 0000000000771660    37 FUNC    GLOBAL DEFAULT   11 LLVMContextCreate
  5310: 00000000007556b0    37 FUNC    GLOBAL DEFAULT   11 LLVMContextCreate
 38133: 00000000007556b0    37 FUNC    GLOBAL DEFAULT   11 LLVMContextCreate
  6964: 00000000016be100    37 FUNC    GLOBAL DEFAULT   15 LLVMContextCreate@@LLVM_5.0
 47409: 00000000016be100    37 FUNC    GLOBAL DEFAULT   15 LLVMContextCreate
 23143: 0000000001a0ab00    37 FUNC    GLOBAL DEFAULT   15 LLVMContextCreate@@LLVM_6.0
 46948: 0000000001a0ab00    37 FUNC    GLOBAL DEFAULT   15 LLVMContextCreate
  7565: 0000000001b72810    37 FUNC    GLOBAL DEFAULT   15 LLVMContextCreate@@LLVM_7
 52448: 0000000001b72810    37 FUNC    GLOBAL DEFAULT   15 LLVMContextCreate

Let's imitate what may happen at runtime.

$ cat >a.c
#include <llvm-c/Core.h>

int main()
{
  LLVMContextCreate();
  return 0;
}

$ cc a.c $(llvm-config70 --libs --ldflags --cppflags)
$ ldd a.out | fgrep llvm
        libLLVM-7.so => /usr/local/llvm70/lib/libLLVM-7.so (0x800400000)
$ ./a.out
$ LD_PRELOAD=/usr/local/llvm39/lib/libLLVM.so ./a.out
Assertion failed: (count_if(RegisteredOptionCategories, [cat](const OptionCategory *Category) { return cat->getName() == Category->getName(); }) == 0 && "Duplicate option categories"), function registerCategory, file /usr/ports/devel/llvm39/work/llvm-3.9.1.src/lib/Support/CommandLine.cpp, line 278.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?k1j3-z5s1-wny>