Re: performance regressions in 15.0
- In reply to: Konstantin Belousov : "Re: performance regressions in 15.0"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 08 Dec 2025 02:38:05 UTC
On Mon, 8 Dec 2025 03:59:17 +0200
Konstantin Belousov <kib@freebsd.org> wrote:
> > libLLVM.so.19.1 => /usr/local/llvm19/bin/../lib/libLLVM.so.19.1
> > (0x805c00000)
> Did you noted this line?
>
> > libc++.so.1 => /lib/libc++.so.1 (0x801092000)
> > libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x80119b000)
> > libm.so.5 => /lib/libm.so.5 (0x8011bd000)
> > libc.so.7 => /lib/libc.so.7 (0x80d663000)
> > librt.so.1 => /lib/librt.so.1 (0x805bcb000)
> > libexecinfo.so.1 => /usr/lib/libexecinfo.so.1 (0x805bd4000)
> > libz.so.6 => /lib/libz.so.6 (0x805bda000)
> > libzstd.so.1 => /usr/local/lib/libzstd.so.1 (0x80d963000)
> > libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x80da38000)
> > libelf.so.2 => /lib/libelf.so.2 (0x80da59000)
> > [vdso] (0x7ffffffff000)
> >
> > But
> > # ls /usr/bin/cc
> > -r-xr-xr-x 6 root wheel 82M Oct 19 18:10:39 2025 /usr/bin/cc*
> > # ls /usr/local/llvm19/bin/clang-19
> > -rwxr-xr-x 2 root wheel 125K Aug 18 06:43:31 2025
> > /usr/local/llvm19/bin/clang-19* So it dynamic linked....
> > ....
> > And we found in port:
> > CMAKE_ARGS= -DLLVM_BUILD_LLVM_DYLIB=ON
> > CMAKE_ARGS+= -DLLVM_LINK_LLVM_DYLIB=ON
> > (exist from first llvm6 372b8a151352984140f74c342a62eae2236b2c2c
> > and copy-pasted to all next llvm~s by brooks@FreeBSD.org)
Did you noted this lines?
Without
CMAKE_ARGS= -DLLVM_BUILD_LLVM_DYLIB=ON
CMAKE_ARGS+= -DLLVM_LINK_LLVM_DYLIB=ON
# ls /tmp/ports/usr/ports/devel/llvm19/work-default/stage/usr/local/llvm19/bin/clang-19
-rwxr-xr-x 2 root wheel 164M Dec 8 04:23:13 2025 /tmp/ports/usr/ports/devel/llvm19/work-default/stage/usr/local/llvm19/bin/clang-19*
# ldd /tmp/ports/usr/ports/devel/llvm19/work-default/stage/usr/local/llvm19/bin/clang-19
/tmp/ports/usr/ports/devel/llvm19/work-default/stage/usr/local/llvm19/bin/clang-19:
ld-elf.so.1: /tmp/ports/usr/ports/devel/llvm19/work-default/stage/usr/local/llvm19/bin/clang-19: mmap of entire address space failed: Cannot allocate memory
/tmp/ports/usr/ports/devel/llvm19/work-default/stage/usr/local/llvm19/bin/clang-19: exit status 1
> > According to: https://llvm.org/docs/CMake.html
> > =============================================================================================
> > 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.
> > =============================================================================================
> >
> > So upstream DOES NOT RECOMMEND to build shared libs to users!!!
> I am curious about the motivation.
>
> JFYI, shared llvm libs are required for lot of things. The incomplete
> list of examples that I am aware of are dri drivers and ispc Intel
> compiler.
# grep -rsp "libLLVM.so" /usr/ports/ | grep '/Makefile'
/usr/ports/devel/ispc/Makefile:LIB_DEPENDS= libLLVM.so:devel/llvm${LLVM_VERSION} \
/usr/ports/graphics/seexpr/Makefile:LLVM_LIB_DEPENDS= libLLVM.so:devel/llvm${LLVM_DEFAULT}
# grep -rsp "LLVM_VERSION" /usr/ports/ | grep '/Makefile' | grep 'libLLVM'
/usr/ports/audio/faust/Makefile:LIB_DEPENDS= libLLVM-${LLVM_VERSION}.so:devel/llvm${LLVM_VERSION} \
/usr/ports/lang/crystal/Makefile: libLLVM-${_LLVM_VERSION}.so:devel/llvm${_LLVM_VERSION} \
# grep -rsp 'llvm\${LLVM_VERSION}' /usr/ports/ | grep '/Makefile'
/usr/ports/cad/nvc/Makefile:BUILD_DEPENDS= llvm-config${LLVM_VERSION}:devel/llvm${LLVM_VERSION}
/usr/ports/devel/edi/Makefile:LIBCLANG_LIB_DEPENDS= libclang.so:devel/llvm${LLVM_VERSION}
/usr/ports/devel/fccf/Makefile:CMAKE_ARGS= -DLLVM_DIR:STRING=${PREFIX}/llvm${LLVM_VERSION}/lib/cmake/llvm
/usr/ports/devel/cppinsights/Makefile:CMAKE_ARGS= -DLLVM_CONFIG_PATH="${LOCALBASE}/llvm${LLVM_VERSION}/bin/llvm-config"
/usr/ports/graphics/mesa-dri/Makefile.common:LDFLAGS+= -Wl,-rpath=${LOCALBASE}/llvm${LLVM_VERSION}/lib
/usr/ports/lang/halide/Makefile:RUN_DEPENDS= llvm${LLVM_VERSION}>0:devel/llvm${LLVM_VERSION}
/usr/ports/lang/lfortran/Makefile:CMAKE_ARGS= -DLLVM_INSTALL_DIR:PATH="${LOCALBASE}/llvm${LLVM_VERSION}" \
/usr/ports/lang/pocl/Makefile: spirv-llvm-translator-llvm${LLVM_VERSION}>=${LLVM_VERSION}:devel/spirv-llvm-translator@llvm${LLVM_VERSION} \
/usr/ports/lang/pocl/Makefile: -DWITH_LLVM_CONFIG="${LOCALBASE}/llvm${LLVM_VERSION}/bin/llvm-config"
/usr/ports/math/symengine/Makefile:LLVM_BUILD_DEPENDS= llvm${LLVM_VERSION}>0:devel/llvm${LLVM_VERSION}
Ok, shared lib required for some ports.
Nice to have static linked executables + shared lib for ports that use it.
But shared lib for llvm in base is not used, no reason to build llvm in base with shared lib, since it only used to compile world+kernel.