diff --git a/.github/workflows/regenerate-native.yml b/.github/workflows/regenerate-native.yml index 7074955..144b77a 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 4b8a5d2..afbdb30 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 b977420..8893395 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 41a921c..3013fde 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 7b7cc90..005f05c 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 41780aa..21cbb17 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 3eeef56..74610bb 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 f6ce311..339fe4e 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 ba65455..ff2e2a3 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 59c3a34..7ae76c4 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 8acecbb..c678783 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 3bffb1f..73b03b2 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 f4890c6..fc69971 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 f5d10b9..569ad25 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 0819d89..de78b65 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 c84a407..92bf663 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 27977f1..0fa1d0a 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 a0b2ccf..5c4c405 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 18c443f..664abf5 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 57a9b99..ed3a47d 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 f112090..4a7d4df 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)); }