From 058413b9acca951583ea5b4db226eb6eba5437e9 Mon Sep 17 00:00:00 2001 From: Tanner Gooding Date: Tue, 1 Sep 2026 11:58:04 -0700 Subject: [PATCH] Update native packages to LLVM 23.1.0 Update native package metadata and libLLVMSharp for LLVM 23.1.0. Use the exact Homebrew bottle on macOS 15 and provide the static compression libraries required by LLVM's official Windows archives. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .github/workflows/regenerate-native.yml | 15 +++-- CMakeLists.txt | 2 +- README.md | 2 +- .../libLLVM.runtime.linux-arm64.nuspec | 4 +- .../libLLVM.runtime.linux-x64.nuspec | 4 +- .../libLLVM.runtime.osx-arm64.nuspec | 4 +- .../libLLVM.runtime.win-arm64.nuspec | 4 +- .../libLLVM.runtime.win-x64.nuspec | 4 +- packages/libLLVM/libLLVM/libLLVM.nuspec | 4 +- packages/libLLVM/libLLVM/runtime.json | 10 +-- .../libLLVMSharp.runtime.linux-arm64.nuspec | 2 +- .../libLLVMSharp.runtime.linux-x64.nuspec | 2 +- .../libLLVMSharp.runtime.osx-arm64.nuspec | 2 +- .../libLLVMSharp.runtime.win-arm64.nuspec | 2 +- .../libLLVMSharp.runtime.win-x64.nuspec | 2 +- .../libLLVMSharp/libLLVMSharp.nuspec | 2 +- .../libLLVMSharp/libLLVMSharp/runtime.json | 10 +-- scripts/build.ps1 | 22 ++++++- scripts/build.sh | 40 +++++++++--- sources/libLLVMSharp/CMakeLists.txt | 63 +++++++++---------- sources/libLLVMSharp/LLVMSharp.cpp | 7 ++- 21 files changed, 127 insertions(+), 80 deletions(-) diff --git a/.github/workflows/regenerate-native.yml b/.github/workflows/regenerate-native.yml index 70749550..144b77ac 100644 --- a/.github/workflows/regenerate-native.yml +++ b/.github/workflows/regenerate-native.yml @@ -84,7 +84,7 @@ jobs: - { rid: win-arm64, os: windows-11-arm } - { rid: linux-x64, os: ubuntu-latest } - { rid: linux-arm64, os: ubuntu-24.04-arm } - - { rid: osx-arm64, os: macos-latest } + - { rid: osx-arm64, os: macos-15 } steps: - uses: actions/checkout@v4 - name: Lift libLLVM (Windows) @@ -138,13 +138,20 @@ jobs: fail-fast: false matrix: include: - - { rid: win-x64, os: windows-latest } - - { rid: win-arm64, os: windows-11-arm } + - { rid: win-x64, os: windows-latest, vcpkg: x64-windows-static } + - { rid: win-arm64, os: windows-11-arm, vcpkg: arm64-windows-static } - { rid: linux-x64, os: ubuntu-latest } - { rid: linux-arm64, os: ubuntu-24.04-arm } - - { rid: osx-arm64, os: macos-latest } + - { rid: osx-arm64, os: macos-15 } steps: - uses: actions/checkout@v4 + - name: Install LLVM dependencies (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: | + & "$env:VCPKG_INSTALLATION_ROOT\vcpkg.exe" install ` + "zlib:${{ matrix.vcpkg }}" ` + "zstd:${{ matrix.vcpkg }}" - name: Build libLLVMSharp (Windows) if: runner.os == 'Windows' shell: pwsh diff --git a/CMakeLists.txt b/CMakeLists.txt index 4b8a5d26..afbdb30f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.15) -project(LLVMSharp VERSION 22.1.8) +project(LLVMSharp VERSION 23.1.0) if(MSVC) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") diff --git a/README.md b/README.md index b9774206..88933957 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ The tracked LLVM version is the `project(LLVMSharp VERSION X.Y.Z)` value in the ./scripts/build.sh --regeneratenative --target libLLVMSharp --rid linux-x64 ``` -The staged binary is written to `artifacts/native//`. Unlike ClangSharp — which lifts the shared `libclang` that ships for every platform — the official LLVM releases only ship a shared `libLLVM` on Windows (as `LLVM-C.dll`, shipped under that official name). The managed resolver in `sources/LLVMSharp.Interop/LLVM.cs` maps the logical `libLLVM` P/Invoke name to the per-platform file (`LLVM-C.dll` on Windows; `libLLVM.so`/`libLLVM.dylib` elsewhere), which is also why `libLLVMSharp.dll`'s static `LLVM-C.dll` import resolves without an extra copy. Linux and macOS are lifted from the most-official prebuilt source per platform: [apt.llvm.org](https://apt.llvm.org/) (the LLVM project's own Debian/Ubuntu repository, `libllvm`) on Linux and [Homebrew](https://formulae.brew.sh/formula/llvm) (`llvm`) on macOS, both of which link the standard system C++ runtime. `libLLVMSharp` is compiled per-runtime against the LLVM release distribution, which bundles the `lib/cmake/{llvm,clang}` config, headers, and import libraries used as `PATH_TO_LLVM`, so no from-source LLVM build is required. +The staged binary is written to `artifacts/native//`. Unlike ClangSharp — which lifts the shared `libclang` that ships for every platform — the official LLVM releases only ship a shared `libLLVM` on Windows (as `LLVM-C.dll`, shipped under that official name). The managed resolver in `sources/LLVMSharp.Interop/LLVM.cs` maps the logical `libLLVM` P/Invoke name to the per-platform file (`LLVM-C.dll` on Windows; `libLLVM.so`/`libLLVM.dylib` elsewhere), which is also why `libLLVMSharp.dll`'s static `LLVM-C.dll` import resolves without an extra copy. Linux and macOS are lifted from the most-official prebuilt source per platform: [apt.llvm.org](https://apt.llvm.org/) (the LLVM project's own Debian/Ubuntu repository, `libllvm`) on Linux and [Homebrew](https://formulae.brew.sh/formula/llvm) (`llvm`) on macOS, both of which link the standard system C++ runtime. Windows and Linux compile `libLLVMSharp` against the official release SDK; macOS uses the exact Homebrew formula on a macOS 15 runner and requires users to install that formula for its external dependencies. The jobs run when: diff --git a/packages/libLLVM/libLLVM.runtime.linux-arm64/libLLVM.runtime.linux-arm64.nuspec b/packages/libLLVM/libLLVM.runtime.linux-arm64/libLLVM.runtime.linux-arm64.nuspec index 41a921c6..3013fded 100644 --- a/packages/libLLVM/libLLVM.runtime.linux-arm64/libLLVM.runtime.linux-arm64.nuspec +++ b/packages/libLLVM/libLLVM.runtime.linux-arm64/libLLVM.runtime.linux-arm64.nuspec @@ -2,7 +2,7 @@ libLLVM.runtime.linux-arm64 - 22.1.8 + 23.1.0 .NET Foundation and Contributors .NET Foundation and Contributors true @@ -10,7 +10,7 @@ https://github.com/dotnet/llvmsharp linux arm64 native library for libLLVM. Copyright © LLVM Project - + diff --git a/packages/libLLVM/libLLVM.runtime.linux-x64/libLLVM.runtime.linux-x64.nuspec b/packages/libLLVM/libLLVM.runtime.linux-x64/libLLVM.runtime.linux-x64.nuspec index 7b7cc901..005f05c5 100644 --- a/packages/libLLVM/libLLVM.runtime.linux-x64/libLLVM.runtime.linux-x64.nuspec +++ b/packages/libLLVM/libLLVM.runtime.linux-x64/libLLVM.runtime.linux-x64.nuspec @@ -2,7 +2,7 @@ libLLVM.runtime.linux-x64 - 22.1.8 + 23.1.0 .NET Foundation and Contributors .NET Foundation and Contributors true @@ -10,7 +10,7 @@ https://github.com/dotnet/llvmsharp linux x64 native library for libLLVM. Copyright © LLVM Project - + diff --git a/packages/libLLVM/libLLVM.runtime.osx-arm64/libLLVM.runtime.osx-arm64.nuspec b/packages/libLLVM/libLLVM.runtime.osx-arm64/libLLVM.runtime.osx-arm64.nuspec index 41780aa1..21cbb172 100644 --- a/packages/libLLVM/libLLVM.runtime.osx-arm64/libLLVM.runtime.osx-arm64.nuspec +++ b/packages/libLLVM/libLLVM.runtime.osx-arm64/libLLVM.runtime.osx-arm64.nuspec @@ -2,7 +2,7 @@ libLLVM.runtime.osx-arm64 - 22.1.8 + 23.1.0 .NET Foundation and Contributors .NET Foundation and Contributors true @@ -10,7 +10,7 @@ https://github.com/dotnet/llvmsharp osx arm64 native library for libLLVM. Copyright © LLVM Project - + diff --git a/packages/libLLVM/libLLVM.runtime.win-arm64/libLLVM.runtime.win-arm64.nuspec b/packages/libLLVM/libLLVM.runtime.win-arm64/libLLVM.runtime.win-arm64.nuspec index 3eeef560..74610bb3 100644 --- a/packages/libLLVM/libLLVM.runtime.win-arm64/libLLVM.runtime.win-arm64.nuspec +++ b/packages/libLLVM/libLLVM.runtime.win-arm64/libLLVM.runtime.win-arm64.nuspec @@ -2,7 +2,7 @@ libLLVM.runtime.win-arm64 - 22.1.8 + 23.1.0 .NET Foundation and Contributors .NET Foundation and Contributors true @@ -10,7 +10,7 @@ https://github.com/dotnet/llvmsharp win arm64 native library for libLLVM. Copyright © LLVM Project - + diff --git a/packages/libLLVM/libLLVM.runtime.win-x64/libLLVM.runtime.win-x64.nuspec b/packages/libLLVM/libLLVM.runtime.win-x64/libLLVM.runtime.win-x64.nuspec index f6ce3111..339fe4ef 100644 --- a/packages/libLLVM/libLLVM.runtime.win-x64/libLLVM.runtime.win-x64.nuspec +++ b/packages/libLLVM/libLLVM.runtime.win-x64/libLLVM.runtime.win-x64.nuspec @@ -2,7 +2,7 @@ libLLVM.runtime.win-x64 - 22.1.8 + 23.1.0 .NET Foundation and Contributors .NET Foundation and Contributors true @@ -10,7 +10,7 @@ https://github.com/dotnet/llvmsharp win x64 native library for libLLVM. Copyright © LLVM Project - + diff --git a/packages/libLLVM/libLLVM/libLLVM.nuspec b/packages/libLLVM/libLLVM/libLLVM.nuspec index ba65455b..ff2e2a35 100644 --- a/packages/libLLVM/libLLVM/libLLVM.nuspec +++ b/packages/libLLVM/libLLVM/libLLVM.nuspec @@ -2,7 +2,7 @@ libLLVM - 22.1.8 + 23.1.0 .NET Foundation and Contributors .NET Foundation and Contributors true @@ -10,7 +10,7 @@ https://github.com/dotnet/llvmsharp Multi-platform native library for libLLVM. Copyright © LLVM Project - + diff --git a/packages/libLLVM/libLLVM/runtime.json b/packages/libLLVM/libLLVM/runtime.json index 59c3a34c..7ae76c4f 100644 --- a/packages/libLLVM/libLLVM/runtime.json +++ b/packages/libLLVM/libLLVM/runtime.json @@ -2,27 +2,27 @@ "runtimes": { "linux-arm64": { "libLLVM": { - "libLLVM.runtime.linux-arm64": "22.1.8" + "libLLVM.runtime.linux-arm64": "23.1.0" } }, "linux-x64": { "libLLVM": { - "libLLVM.runtime.linux-x64": "22.1.8" + "libLLVM.runtime.linux-x64": "23.1.0" } }, "osx-arm64": { "libLLVM": { - "libLLVM.runtime.osx-arm64": "22.1.8" + "libLLVM.runtime.osx-arm64": "23.1.0" } }, "win-arm64": { "libLLVM": { - "libLLVM.runtime.win-arm64": "22.1.8" + "libLLVM.runtime.win-arm64": "23.1.0" } }, "win-x64": { "libLLVM": { - "libLLVM.runtime.win-x64": "22.1.8" + "libLLVM.runtime.win-x64": "23.1.0" } } } diff --git a/packages/libLLVMSharp/libLLVMSharp.runtime.linux-arm64/libLLVMSharp.runtime.linux-arm64.nuspec b/packages/libLLVMSharp/libLLVMSharp.runtime.linux-arm64/libLLVMSharp.runtime.linux-arm64.nuspec index 8acecbb1..c6787835 100644 --- a/packages/libLLVMSharp/libLLVMSharp.runtime.linux-arm64/libLLVMSharp.runtime.linux-arm64.nuspec +++ b/packages/libLLVMSharp/libLLVMSharp.runtime.linux-arm64/libLLVMSharp.runtime.linux-arm64.nuspec @@ -2,7 +2,7 @@ libLLVMSharp.runtime.linux-arm64 - 22.1.8.1 + 23.1.0.1 .NET Foundation and Contributors .NET Foundation and Contributors true diff --git a/packages/libLLVMSharp/libLLVMSharp.runtime.linux-x64/libLLVMSharp.runtime.linux-x64.nuspec b/packages/libLLVMSharp/libLLVMSharp.runtime.linux-x64/libLLVMSharp.runtime.linux-x64.nuspec index 3bffb1f7..73b03b23 100644 --- a/packages/libLLVMSharp/libLLVMSharp.runtime.linux-x64/libLLVMSharp.runtime.linux-x64.nuspec +++ b/packages/libLLVMSharp/libLLVMSharp.runtime.linux-x64/libLLVMSharp.runtime.linux-x64.nuspec @@ -2,7 +2,7 @@ libLLVMSharp.runtime.linux-x64 - 22.1.8.1 + 23.1.0.1 .NET Foundation and Contributors .NET Foundation and Contributors true diff --git a/packages/libLLVMSharp/libLLVMSharp.runtime.osx-arm64/libLLVMSharp.runtime.osx-arm64.nuspec b/packages/libLLVMSharp/libLLVMSharp.runtime.osx-arm64/libLLVMSharp.runtime.osx-arm64.nuspec index f4890c62..fc699710 100644 --- a/packages/libLLVMSharp/libLLVMSharp.runtime.osx-arm64/libLLVMSharp.runtime.osx-arm64.nuspec +++ b/packages/libLLVMSharp/libLLVMSharp.runtime.osx-arm64/libLLVMSharp.runtime.osx-arm64.nuspec @@ -2,7 +2,7 @@ libLLVMSharp.runtime.osx-arm64 - 22.1.8.1 + 23.1.0.1 .NET Foundation and Contributors .NET Foundation and Contributors true diff --git a/packages/libLLVMSharp/libLLVMSharp.runtime.win-arm64/libLLVMSharp.runtime.win-arm64.nuspec b/packages/libLLVMSharp/libLLVMSharp.runtime.win-arm64/libLLVMSharp.runtime.win-arm64.nuspec index f5d10b94..569ad25e 100644 --- a/packages/libLLVMSharp/libLLVMSharp.runtime.win-arm64/libLLVMSharp.runtime.win-arm64.nuspec +++ b/packages/libLLVMSharp/libLLVMSharp.runtime.win-arm64/libLLVMSharp.runtime.win-arm64.nuspec @@ -2,7 +2,7 @@ libLLVMSharp.runtime.win-arm64 - 22.1.8.1 + 23.1.0.1 .NET Foundation and Contributors .NET Foundation and Contributors true diff --git a/packages/libLLVMSharp/libLLVMSharp.runtime.win-x64/libLLVMSharp.runtime.win-x64.nuspec b/packages/libLLVMSharp/libLLVMSharp.runtime.win-x64/libLLVMSharp.runtime.win-x64.nuspec index 0819d893..de78b654 100644 --- a/packages/libLLVMSharp/libLLVMSharp.runtime.win-x64/libLLVMSharp.runtime.win-x64.nuspec +++ b/packages/libLLVMSharp/libLLVMSharp.runtime.win-x64/libLLVMSharp.runtime.win-x64.nuspec @@ -2,7 +2,7 @@ libLLVMSharp.runtime.win-x64 - 22.1.8.1 + 23.1.0.1 .NET Foundation and Contributors .NET Foundation and Contributors true diff --git a/packages/libLLVMSharp/libLLVMSharp/libLLVMSharp.nuspec b/packages/libLLVMSharp/libLLVMSharp/libLLVMSharp.nuspec index c84a407e..92bf663c 100644 --- a/packages/libLLVMSharp/libLLVMSharp/libLLVMSharp.nuspec +++ b/packages/libLLVMSharp/libLLVMSharp/libLLVMSharp.nuspec @@ -2,7 +2,7 @@ libLLVMSharp - 22.1.8.1 + 23.1.0.1 .NET Foundation and Contributors .NET Foundation and Contributors true diff --git a/packages/libLLVMSharp/libLLVMSharp/runtime.json b/packages/libLLVMSharp/libLLVMSharp/runtime.json index 27977f11..0fa1d0a0 100644 --- a/packages/libLLVMSharp/libLLVMSharp/runtime.json +++ b/packages/libLLVMSharp/libLLVMSharp/runtime.json @@ -2,27 +2,27 @@ "runtimes": { "linux-arm64": { "libLLVMSharp": { - "libLLVMSharp.runtime.linux-arm64": "22.1.8.1" + "libLLVMSharp.runtime.linux-arm64": "23.1.0.1" } }, "linux-x64": { "libLLVMSharp": { - "libLLVMSharp.runtime.linux-x64": "22.1.8.1" + "libLLVMSharp.runtime.linux-x64": "23.1.0.1" } }, "osx-arm64": { "libLLVMSharp": { - "libLLVMSharp.runtime.osx-arm64": "22.1.8.1" + "libLLVMSharp.runtime.osx-arm64": "23.1.0.1" } }, "win-arm64": { "libLLVMSharp": { - "libLLVMSharp.runtime.win-arm64": "22.1.8.1" + "libLLVMSharp.runtime.win-arm64": "23.1.0.1" } }, "win-x64": { "libLLVMSharp": { - "libLLVMSharp.runtime.win-x64": "22.1.8.1" + "libLLVMSharp.runtime.win-x64": "23.1.0.1" } } } diff --git a/scripts/build.ps1 b/scripts/build.ps1 index a0b2ccf0..5c4c4050 100644 --- a/scripts/build.ps1 +++ b/scripts/build.ps1 @@ -158,9 +158,27 @@ function Build-LibLLVMSharp([string] $runtime, [string] $source, [string] $desti } $nativeBuildDir = Join-Path -Path $ArtifactsDir -ChildPath "bin\native\$runtime" - $pathToLlvm = (Resolve-Path -Path $source).Path + $pathToLlvm = (Resolve-Path -Path $source).Path.Replace("\", "/") + $cmakeArguments = @( + "-B", "$nativeBuildDir", + "-S", "$RepoRoot", + "-A", "$arch", + "-Thost=$arch", + "-DPATH_TO_LLVM=$pathToLlvm" + ) + + if ($env:VCPKG_INSTALLATION_ROOT) { + $vcpkgToolchain = (Join-Path -Path $env:VCPKG_INSTALLATION_ROOT -ChildPath "scripts\buildsystems\vcpkg.cmake").Replace("\", "/") + $vcpkgTriplet = switch ($runtime) { + "win-x64" { "x64-windows-static" } + "win-arm64" { "arm64-windows-static" } + } + + $cmakeArguments += "-DCMAKE_TOOLCHAIN_FILE=$vcpkgToolchain" + $cmakeArguments += "-DVCPKG_TARGET_TRIPLET=$vcpkgTriplet" + } - & cmake -B "$nativeBuildDir" -S "$RepoRoot" -A "$arch" "-Thost=$arch" "-DPATH_TO_LLVM=$pathToLlvm" + & cmake @cmakeArguments if ($LastExitCode -ne 0) { throw "'cmake' configure failed for '$runtime'" diff --git a/scripts/build.sh b/scripts/build.sh index 18c443f4..664abf58 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -376,6 +376,26 @@ function DownloadLlvm { fi } +function InstallMacOSLlvm { + brew install llvm + LASTEXITCODE=$? + + if [ "$LASTEXITCODE" != 0 ]; then + return "$LASTEXITCODE" + fi + + llvmDir="$(brew --prefix llvm)" + installedVersion="$("$llvmDir/bin/llvm-config" --version 2> /dev/null)" + + if [[ "$installedVersion" != "$llvm" ]]; then + echo "Homebrew provided LLVM '$installedVersion' but '$llvm' is required" + LASTEXITCODE=1 + return "$LASTEXITCODE" + fi + + LASTEXITCODE=0 +} + function LiftLibLLVM { runtime="$1" destination="$2" @@ -414,17 +434,13 @@ function LiftLibLLVM { src="$(find "$downloadDir/extract" -name 'libLLVM*.so*' -type f | head -n1)" ;; osx-*) - brew install "llvm@${major}" || brew install llvm - prefix="$(brew --prefix "llvm@${major}" 2> /dev/null || brew --prefix llvm)" - # The 'brew install llvm' fallback (used when 'llvm@${major}' is unavailable) can - # pull a different major; verify it matches the tracked version before packaging. - installedMajor="$("$prefix/bin/llvm-config" --version 2> /dev/null | cut -d. -f1)" - if [[ "$installedMajor" != "$major" ]]; then - echo "Homebrew provided LLVM major '$installedMajor' but '$major' is required for '$runtime'" - LASTEXITCODE=1 + InstallMacOSLlvm + + if [ "$LASTEXITCODE" != 0 ]; then return "$LASTEXITCODE" fi - src="$prefix/lib/libLLVM.dylib" + + src="$llvmDir/lib/libLLVM.dylib" ;; *) echo "'$runtime' cannot lift libLLVM here; use build.ps1 on the matching runner" @@ -538,7 +554,11 @@ function RegenerateNative { if [[ "$target" == "libLLVM" ]]; then LiftLibLLVM "$rid" "$stagingDir" elif [[ "$target" == "libLLVMSharp" ]]; then - DownloadLlvm "$rid" "$llvmDir" + if [[ "$rid" == osx-* ]]; then + InstallMacOSLlvm + else + DownloadLlvm "$rid" "$llvmDir" + fi if [ "$LASTEXITCODE" != 0 ]; then return "$LASTEXITCODE" diff --git a/sources/libLLVMSharp/CMakeLists.txt b/sources/libLLVMSharp/CMakeLists.txt index 57a9b997..ed3a47df 100644 --- a/sources/libLLVMSharp/CMakeLists.txt +++ b/sources/libLLVMSharp/CMakeLists.txt @@ -19,25 +19,21 @@ set(LLVM_SEARCH_PATHS ${PATH_TO_LLVM}/share/llvm/cmake/ ) +if(MSVC) + find_package(zstd CONFIG REQUIRED) + + if(TARGET zstd::libzstd AND NOT TARGET zstd::libzstd_static) + add_library(zstd::libzstd_static ALIAS zstd::libzstd) + endif() +endif() + find_package(Clang REQUIRED CONFIG PATHS ${LLVM_SEARCH_PATHS} NO_DEFAULT_PATH) -# LLVM's Windows packages record the DIA SDK path from their build machine. -if(MSVC AND CMAKE_GENERATOR_INSTANCE AND TARGET LLVMDebugInfoPDB) - if(CMAKE_GENERATOR_PLATFORM MATCHES "[Aa][Rr][Mm]64") - set(_llvmsharp_diaguids "${CMAKE_GENERATOR_INSTANCE}/DIA SDK/lib/arm64/diaguids.lib") - elseif(CMAKE_GENERATOR_PLATFORM MATCHES "[Ww]in32") - set(_llvmsharp_diaguids "${CMAKE_GENERATOR_INSTANCE}/DIA SDK/lib/diaguids.lib") - else() - set(_llvmsharp_diaguids "${CMAKE_GENERATOR_INSTANCE}/DIA SDK/lib/amd64/diaguids.lib") - endif() - - get_target_property(_llvmsharp_pdb_libs LLVMDebugInfoPDB INTERFACE_LINK_LIBRARIES) - if(EXISTS "${_llvmsharp_diaguids}") - string(REGEX REPLACE "[^;]*[Dd][Ii][Aa] SDK[^;]*diaguids\\.lib" "${_llvmsharp_diaguids}" _llvmsharp_pdb_libs "${_llvmsharp_pdb_libs}") - set_target_properties(LLVMDebugInfoPDB PROPERTIES INTERFACE_LINK_LIBRARIES "${_llvmsharp_pdb_libs}") - endif() +# libLLVMSharp does not select any DIA-backed objects from LLVM's static libraries. +if(MSVC AND NOT TARGET DIASDK::Diaguids) + add_library(DIASDK::Diaguids INTERFACE IMPORTED) endif() # Distro static zstd libraries are not position-independent. @@ -58,24 +54,27 @@ if(NOT LLVM_ENABLE_RTTI) endif() endif() -if(WIN32) - target_link_libraries(LLVMSharp PRIVATE LLVM-C) -endif() +if(APPLE) + target_link_libraries(LLVMSharp PRIVATE LLVM) +else() + if(WIN32) + target_link_libraries(LLVMSharp PRIVATE LLVM-C) + endif() -target_link_libraries(LLVMSharp PRIVATE LLVMDemangle) - -target_link_libraries(LLVMSharp PRIVATE LLVMAggressiveInstCombine) -target_link_libraries(LLVMSharp PRIVATE LLVMAnalysis) -target_link_libraries(LLVMSharp PRIVATE LLVMCFGuard) -target_link_libraries(LLVMSharp PRIVATE LLVMInstCombine) -target_link_libraries(LLVMSharp PRIVATE LLVMInstrumentation) -target_link_libraries(LLVMSharp PRIVATE LLVMipo) -target_link_libraries(LLVMSharp PRIVATE LLVMJITLink) -target_link_libraries(LLVMSharp PRIVATE LLVMObjCARCOpts) -target_link_libraries(LLVMSharp PRIVATE LLVMOrcJIT) -target_link_libraries(LLVMSharp PRIVATE LLVMScalarOpts) -target_link_libraries(LLVMSharp PRIVATE LLVMTransformUtils) -target_link_libraries(LLVMSharp PRIVATE LLVMVectorize) + target_link_libraries(LLVMSharp PRIVATE LLVMDemangle) + target_link_libraries(LLVMSharp PRIVATE LLVMAggressiveInstCombine) + target_link_libraries(LLVMSharp PRIVATE LLVMAnalysis) + target_link_libraries(LLVMSharp PRIVATE LLVMCFGuard) + target_link_libraries(LLVMSharp PRIVATE LLVMInstCombine) + target_link_libraries(LLVMSharp PRIVATE LLVMInstrumentation) + target_link_libraries(LLVMSharp PRIVATE LLVMipo) + target_link_libraries(LLVMSharp PRIVATE LLVMJITLink) + target_link_libraries(LLVMSharp PRIVATE LLVMObjCARCOpts) + target_link_libraries(LLVMSharp PRIVATE LLVMOrcJIT) + target_link_libraries(LLVMSharp PRIVATE LLVMScalarOpts) + target_link_libraries(LLVMSharp PRIVATE LLVMTransformUtils) + target_link_libraries(LLVMSharp PRIVATE LLVMVectorize) +endif() if(APPLE AND EXISTS "${PATH_TO_LLVM}/lib/libLTO.dylib") target_link_options(LLVMSharp PRIVATE "LINKER:-lto_library,${PATH_TO_LLVM}/lib/libLTO.dylib") diff --git a/sources/libLLVMSharp/LLVMSharp.cpp b/sources/libLLVMSharp/LLVMSharp.cpp index f1120908..4a7d4dff 100644 --- a/sources/libLLVMSharp/LLVMSharp.cpp +++ b/sources/libLLVMSharp/LLVMSharp.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -36,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -390,7 +392,7 @@ LLVMValueRef llvmsharp_DISubrange_getCount(LLVMMetadataRef subrange) void llvmsharp_DISubroutineType_getTypeArray(LLVMMetadataRef subroutine_type, LLVMMetadataRef** out_buffer, int32_t* out_size) { DISubroutineType* unwrapped = unwrap(subroutine_type); - DITypeRefArray array = unwrapped->getTypeArray(); + DITypeArray array = unwrapped->getTypeArray(); int32_t size = array.size(); LLVMMetadataRef* buffer = (LLVMMetadataRef*)malloc(size * sizeof(LLVMMetadataRef)); @@ -783,7 +785,8 @@ void llvmsharp_Module_GetIdentifiedStructTypes(LLVMModuleRef module, LLVMTypeRef LLVMOrcObjectLayerRef llvmsharp_OrcCreateObjectLinkingLayer(LLVMOrcExecutionSessionRef execution_session) { orc::ExecutionSession* unwrapped = unwrap(execution_session); - orc::ObjectLinkingLayer* layer = new orc::ObjectLinkingLayer(*unwrapped); + std::unique_ptr memory_manager = cantFail(jitlink::InProcessMemoryManager::Create()); + orc::ObjectLinkingLayer* layer = new orc::ObjectLinkingLayer(*unwrapped, std::move(memory_manager)); return wrap(static_cast(layer)); }