On Thu, Feb 15, 2018 at 05:08:56PM +0000, Stuart Henderson wrote: > On 2018/02/15 11:19, Brian Callahan wrote: > > > > On 02/15/18 10:02, Jonathan Gray wrote: > > > Build libLLVM.so and link tools with it. > > > > > > This seems to be the way almost all Linux distributions and BSDs > > > ship LLVM and is what Mesa expects. > > > > > > Use the documented cmake var for RTTI while here. > > > > Any reason not to use the SHARED_LIBS facility of ports for libLLVM, like > > libclang and libLTO already do in the LLVM port? > > agreed, it's a bit non-obvious that it might be needed because unlike > other build systems (which normally use a default value if not passed > via SHARED_LIBS) the way we've got cmake setup it just skips the library > version in that case.. >
Trying to use SHARED_LIBS breaks and isn't so useful as the name of the library includes the major/minor llvm version with the abi unlikely to change on new release based from the same branch. The intent seems to be to allow multiple versions to be installed concurrently as llvm breaks abi/api between most releases. Warning: symlink(s) point to non-existent /usr/ports/pobj/llvm-5.0.1/fake-amd64/usr/local/lib/libLLVM-5.0.so /usr/ports/pobj/llvm-5.0.1/fake-amd64/usr/local/lib/libLLVM-5.0.1.so /usr/ports/pobj/llvm-5.0.1/fake-amd64/usr/local/lib/libLLVM.so $ ls -l /usr/local/lib/libLLVM*.so* lrwxr-xr-x 1 root wheel 14 Feb 17 22:55 /usr/local/lib/libLLVM-5.0.1.so -> libLLVM-5.0.so -rw-r--r-- 1 root bin 61453686 Feb 17 22:47 /usr/local/lib/libLLVM-5.0.so.0.0 lrwxr-xr-x 1 root wheel 14 Feb 17 22:55 /usr/local/lib/libLLVM.so -> libLLVM-5.0.so $ llvm-config --link-shared llvm-config: error: libLLVM-5.0.so is missing $ llvm-config --shared-mode static Index: Makefile =================================================================== RCS file: /cvs/ports/devel/llvm/Makefile,v retrieving revision 1.172 diff -u -p -r1.172 Makefile --- Makefile 2 Feb 2018 13:33:11 -0000 1.172 +++ Makefile 17 Feb 2018 11:59:08 -0000 @@ -14,11 +14,12 @@ COMMENT-main = modular, fast C/C++/ObjC COMMENT-python = Python bindings for Clang LLVM_V = 5.0.1 +LLVM_BRANCH = ${LLVM_V:C/\.[^\.]*$//} DISTNAME = llvm-${LLVM_V}.src PKGNAME = llvm-${LLVM_V} PKGNAME-main = llvm-${LLVM_V} PKGNAME-python = py-llvm-${LLVM_V} -REVISION-main = 1 +REVISION-main = 2 CATEGORIES = devel DISTFILES = llvm-${LLVM_V}.src${EXTRACT_SUFX} \ cfe-${LLVM_V}.src${EXTRACT_SUFX} \ @@ -27,7 +28,8 @@ MASTER_SITES = https://www.llvm.org/rele EXTRACT_SUFX = .tar.xz SHARED_LIBS = clang 6.0 \ - LTO 3.0 + LTO 3.0 \ + LLVM-${LLVM_BRANCH} 0.0 # packager notes in http://llvm.org/docs/Packaging.html HOMEPAGE = http://www.llvm.org/ @@ -55,10 +57,12 @@ RUN_DEPENDS-python = ${MODPY_RUN_DEPENDS LIB_DEPENDS-python = ${BUILD_PKGPATH},-main SEPARATE_BUILD = Yes -CONFIGURE_ARGS = -DLLVM_ENABLE_FFI:Bool=False \ +CONFIGURE_ARGS = -DLLVM_ENABLE_FFI:Bool=True \ -DLLVM_ENABLE_TERMINFO:Bool=False \ - -DLLVM_REQUIRES_RTTI:Bool=True \ + -DLLVM_ENABLE_RTTI:Bool=True \ -DCMAKE_DISABLE_FIND_PACKAGE_LibXml2:Bool=True \ + -DLLVM_LINK_LLVM_DYLIB:Bool=True \ + -DLLVM_BUILD_LLVM_DYLIB:Bool=True \ -DGO_EXECUTABLE=GO_EXECUTABLE-NOTFOUND \ -DBacktrace_LIBRARY='' Index: patches/patch-tools_llvm-shlib_CMakeLists_txt =================================================================== RCS file: patches/patch-tools_llvm-shlib_CMakeLists_txt diff -N patches/patch-tools_llvm-shlib_CMakeLists_txt --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-tools_llvm-shlib_CMakeLists_txt 17 Feb 2018 11:59:08 -0000 @@ -0,0 +1,26 @@ +$OpenBSD$ + +fix symbols not getting added to shared library + +Index: tools/llvm-shlib/CMakeLists.txt +--- tools/llvm-shlib/CMakeLists.txt.orig ++++ tools/llvm-shlib/CMakeLists.txt +@@ -37,15 +37,15 @@ endif() + add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${SOURCES}) + + list(REMOVE_DUPLICATES LIB_NAMES) +-if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU) OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "DragonFly")) # FIXME: It should be "GNU ld for elf" ++if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") ++ set(LIB_NAMES -Wl,-all_load ${LIB_NAMES}) ++else() + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/simple_version_script.map.in + ${LLVM_LIBRARY_DIR}/tools/llvm-shlib/simple_version_script.map) + + # GNU ld doesn't resolve symbols in the version script. + set(LIB_NAMES -Wl,--version-script,${LLVM_LIBRARY_DIR}/tools/llvm-shlib/simple_version_script.map -Wl,--whole-archive ${LIB_NAMES} -Wl,--no-whole-archive) +-elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") +- set(LIB_NAMES -Wl,-all_load ${LIB_NAMES}) + endif() + + target_link_libraries(LLVM PRIVATE ${LIB_NAMES}) Index: pkg/PLIST-main =================================================================== RCS file: /cvs/ports/devel/llvm/pkg/PLIST-main,v retrieving revision 1.5 diff -u -p -r1.5 PLIST-main --- pkg/PLIST-main 8 Sep 2017 05:58:19 -0000 1.5 +++ pkg/PLIST-main 17 Feb 2018 11:59:09 -0000 @@ -1939,6 +1939,9 @@ lib/cmake/llvm/LLVMInstallSymlink.cmake lib/cmake/llvm/LLVMProcessSources.cmake lib/cmake/llvm/TableGen.cmake lib/cmake/llvm/VersionFromVCS.cmake +lib/libLLVM-${LLVM_V}.so +@lib lib/libLLVM-5.0.so.${LIBLLVM-5.0_VERSION} +lib/libLLVM.so lib/libLLVMAArch64AsmParser.a lib/libLLVMAArch64AsmPrinter.a lib/libLLVMAArch64CodeGen.a