Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,50 @@
"BUILD_SHARED_LIBS": "NO",
"WITH_DOCS": "NO"
}
},
{
"name": "package-nuget",
"inherits": "package",
"hidden": true,
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"BUILD_SHARED_LIBS": "YES",
"WITH_DOCS": "NO",
"DCMAKE_INSTALL_DATADIR": "share/Halide",
"Halide_INSTALL_CMAKEDIR": "share/Halide"
}
},
{
"name": "package-nuget-win-x86",
"inherits": "package-nuget",
"binaryDir": "win-x86",
"displayName": "Package Halide for Nuget (win-x86)",
"description": "Package Halide for Nuget (win-x86)",
"generator": "Visual Studio 16 2019",
"architecture": "Win32",
"toolset": "host=x64",
"cacheVariables": {
"CPACK_NUGET_PACKAGE_NAME": "Halide.runtime.win-x86",
"CMAKE_INSTALL_BINDIR": "runtime/win-x86/native",
"CMAKE_INSTALL_LIBDIR": "runtime/win-x86/native",
"CMAKE_INSTALL_INCLUDEDIR": "build/native/include"
}
},
{
"name": "package-nuget-win-x64",
"inherits": "package-nuget",
"binaryDir": "win-x64",
"displayName": "Package Halide for Nuget (win-x64)",
"description": "Package Halide for Nuget (win-x64)",
"generator": "Visual Studio 16 2019",
"architecture": "x64",
"toolset": "host=x64",
"cacheVariables": {
"CPACK_NUGET_PACKAGE_NAME": "Halide.runtime.win-x64",
"CMAKE_INSTALL_BINDIR": "runtime/win-x64/native",
"CMAKE_INSTALL_LIBDIR": "runtime/win-x64/native",
"CMAKE_INSTALL_INCLUDEDIR": "build/native/include"
}
}
]
}
4 changes: 4 additions & 0 deletions packaging/nuget/Halide.runtime.win-x64/config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
include(win-x64/CPackConfig.cmake)
include("${CMAKE_CURRENT_LIST_DIR}/../common/config.cmake")

set(CPACK_NUGET_PACKAGE_NAME Halide.runtime.win-x64)
4 changes: 4 additions & 0 deletions packaging/nuget/Halide.runtime.win-x86/config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
include(win-x86/CPackConfig.cmake)
include("${CMAKE_CURRENT_LIST_DIR}/../common/config.cmake")

set(CPACK_NUGET_PACKAGE_NAME Halide.runtime.win-x86)
18 changes: 18 additions & 0 deletions packaging/nuget/Halide/Halide.nuspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
<metadata minClientVersion="2.12">
<id>Halide</id>
<version>@CPACK_PACKAGE_VERSION@</version>
<authors>@CPACK_NUGET_PACKAGE_AUTHORS@</authors>
<owners>@CPACK_NUGET_PACKAGE_OWNERS@</owners>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<license type="expression">@CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION@</license>
<projectUrl>@CPACK_PACKAGE_HOMEPAGE_URL@</projectUrl>
<description>@CPACK_PACKAGE_DESCRIPTION_SUMMARY@</description>
<copyright>@CPACK_NUGET_PACKAGE_COPYRIGHT@</copyright>
<repository type="git" url="https://github.com/halide/Halide" branch="v@CPACK_PACKAGE_VERSION@" />
</metadata>
<files>
<file src="runtime.json" target="runtime.json" />
</files>
</package>
10 changes: 10 additions & 0 deletions packaging/nuget/Halide/build.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
include(${Halide_USE_PACKAGE}/CPackConfig.cmake)
include("${CMAKE_CURRENT_LIST_DIR}/../common/config.cmake")

configure_file(${CMAKE_CURRENT_LIST_DIR}/Halide.nuspec
${CMAKE_CURRENT_BINARY_DIR}/base/Halide.nuspec)
configure_file(${CMAKE_CURRENT_LIST_DIR}/runtime.json
${CMAKE_CURRENT_BINARY_DIR}/base/runtime.json)

find_program(NUGET_EXE nuget REQUIRED)
execute_process(COMMAND ${NUGET_EXE} pack ${CMAKE_CURRENT_BINARY_DIR}/base)
14 changes: 14 additions & 0 deletions packaging/nuget/Halide/runtime.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"runtimes": {
"win-x64": {
"Halide": {
"Halide.runtime.win-x64": "@CPACK_PACKAGE_VERSION@"
}
},
"win-x86": {
"Halide": {
"Halide.runtime.win-x86": "@CPACK_PACKAGE_VERSION@"
}
}
}
}
15 changes: 15 additions & 0 deletions packaging/nuget/common/config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
set(CPACK_NUGET_COMPONENT_INSTALL OFF)
set(CPACK_NUGET_PACKAGE_AUTHORS "Andrew Adams, Jonathan Ragan-Kelley, Steven Johnson, Tzu-Mao Li, alexreinking, Volodymyr Kysenko, Benoit Steiner, Dillon Sharlet, Shoaib Kamil, Zalman Stern")
set(CPACK_NUGET_PACKAGE_TITLE "Halide Compiler and Libraries")
set(CPACK_NUGET_PACKAGE_OWNERS alexreinking)
set(CPACK_NUGET_PACKAGE_COPYRIGHT "Copyright (c) 2012-2020 MIT CSAIL, Google, Facebook, Adobe, NVIDIA CORPORATION, and other contributors.")
set(CPACK_NUGET_PACKAGE_TAGS "Halide C++ CUDA OpenCL GPU Performance DSL native")
set(CPACK_NUGET_PACKAGE_DEPENDENCIES "")
set(CPACK_NUGET_PACKAGE_DEBUG OFF)
set(CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION MIT)

# CMake 3.20 correctly uses SPDX license variables and drops
# support for the deprecated license URL option in Nuget.
if (CMAKE_VERSION VERSION_LESS 3.20)
set(CPACK_NUGET_PACKAGE_LICENSEURL "https://github.com/halide/Halide/blob/master/LICENSE.txt")
endif ()
68 changes: 68 additions & 0 deletions packaging/nuget/package.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
@echo off
setlocal

set halide_source=%cd%\%~1
set halide_build_root=%cd%\%~2
set halide_arch=%~3
set script_dir=%~dp0

if not exist "%VCPKG_ROOT%\.vcpkg-root" (
echo Must define VCPKG_ROOT to be the root of the VCPKG install
goto error
)

if not exist "%LLVM_DIR%\LLVMConfig.cmake" (
echo Must set specific LLVM_DIR for packaging
goto error
)

if not exist "%Clang_DIR%\ClangConfig.cmake" (
echo Must set specific Clang_DIR for packaging
goto error
)

if "%halide_source%" == "" (
echo Usage: %~0 "<source-dir>" "<build-dir>" [win-x86,win-x64]
goto error
)

if "%halide_build_root%" == "" (
echo Usage: %~0 "<source-dir>" "<build-dir>" [win-x86,win-x64]
goto error
)

if "%halide_arch%" == "" (
echo Usage: %~0 "<source-dir>" "<build-dir>" [win-x86,win-x64]
goto error
)

REM Ninja Multi-Config in 3.18 has some sort of bug. Very disappointing.
cmake --preset=package-nuget-%halide_arch% -S "%halide_source%" -B "%halide_build_root%\%halide_arch%"
if ERRORLEVEL 1 goto error

REM We don't distribute Debug binaries because they aren't useful
REM cmake --build %halide_build_root% --config Debug
cmake --build "%halide_build_root%\%halide_arch%" --config Release
if ERRORLEVEL 1 goto error

pushd "%halide_build_root%"

cpack -G NuGet -C Release --config "%script_dir%Halide.runtime.%halide_arch%\config.cmake"
if ERRORLEVEL 1 (
popd
goto error
)

REM TODO: write a second script for this? It should always be safe to clobber.
cmake -DHalide_USE_PACKAGE=%halide_arch% -P "%script_dir%Halide\build.cmake"
if ERRORLEVEL 1 (
popd
goto error
)

popd

exit /b

:error
exit /b 1