diff --git a/build/build26.bat b/build/build26.bat new file mode 100644 index 00000000000..12f7a13a5fd --- /dev/null +++ b/build/build26.bat @@ -0,0 +1,305 @@ +@ECHO OFF + +REM SPDX-License-Identifier: Apache-2.0 +REM Copyright (C) 2026 Advanced Micro Devices, Inc. All rights reserved. + +setlocal +set "DO_CLEAN=0" +set "SCRIPTDIR=%~dp0" +set "SCRIPTDIR=%SCRIPTDIR:~0,-1%" +set "BUILDDIR=%SCRIPTDIR%" +set "DEBUG=1" +set "RELEASE=1" +set "RELWITHDEBINFO=0" +set "TARGET_TRIPLET=x64-windows-static" +set "CMAKE_ARCH=" +set "DIR_SUFFIX=" +set "EXT_DIR=" +set "EXT_CMAKE_PREFIX=" +set "EXT_DIR_USER=0" +set "CI_EXT_ROOT=C:/Xilinx/XRT/ext.new" +set "CMAKEFLAGS=" +set "NOCMAKE=0" +set "STAGE=0" +set "DYNAMIC_DEPS=0" +set "CREATE_SDK=0" +set "CREATE_PACKAGE=0" +set "INSTALL_ROOT=" + +IF DEFINED MSVC_PARALLEL_JOBS ( SET "LOCAL_MSVC_PARALLEL_JOBS=%MSVC_PARALLEL_JOBS%" ) ELSE ( SET "LOCAL_MSVC_PARALLEL_JOBS=4" ) + +REM -------------------------------------------------------------------------- +:parseArgs +if "%~1"=="" goto argsParsed + +if /I "%~1"=="-help" goto help +if /I "%~1"=="-ext" goto parseExt +if /I "%~1"=="-install" goto parseInstall +if /I "%~1"=="-arm64" goto parseArm64 +if /I "%~1"=="-dynamic" goto parseDynamic +if /I "%~1"=="-clean" ( set "DO_CLEAN=1" & shift & goto parseArgs ) +if /I "%~1"=="-dbg" ( set "RELEASE=0" & shift & goto parseArgs ) +if /I "%~1"=="-opt" ( set "DEBUG=0" & shift & goto parseArgs ) +if /I "%~1"=="-rwd" ( set "DEBUG=0" & set "RELEASE=0" & set "RELWITHDEBINFO=1" & shift & goto parseArgs ) +if /I "%~1"=="-sdk" ( set "CREATE_SDK=1" & set "CMAKEFLAGS=%CMAKEFLAGS% -DXRT_NPU=1" & shift & goto parseArgs ) +if /I "%~1"=="-pkg" ( set "CREATE_PACKAGE=1" & shift & goto parseArgs ) +if /I "%~1"=="-npu" ( set "CMAKEFLAGS=%CMAKEFLAGS% -DXRT_NPU=1" & shift & goto parseArgs ) +if /I "%~1"=="-noabi" ( set "CMAKEFLAGS=%CMAKEFLAGS% -DDISABLE_ABI_CHECK=1" & shift & goto parseArgs ) +if /I "%~1"=="-hip" ( set "CMAKEFLAGS=%CMAKEFLAGS% -DXRT_ENABLE_HIP=ON" & shift & goto parseArgs ) +if /I "%~1"=="-nocmake" ( set "NOCMAKE=1" & shift & goto parseArgs ) + +echo Unknown option: %1 +goto help + +REM -------------------------------------------------------------------------- +:parseArm64 +set "CMAKE_ARCH=ARM64" +if "%DYNAMIC_DEPS%"=="1" set "TARGET_TRIPLET=arm64-windows" +if not "%DYNAMIC_DEPS%"=="1" set "TARGET_TRIPLET=arm64-windows-static" +shift +goto parseArgs + +REM -------------------------------------------------------------------------- +:parseDynamic +set "DYNAMIC_DEPS=1" +set "STAGE=1" +if /I "%CMAKE_ARCH%"=="ARM64" set "TARGET_TRIPLET=arm64-windows" +if /I not "%CMAKE_ARCH%"=="ARM64" set "TARGET_TRIPLET=x64-windows" +shift +goto parseArgs + +REM -------------------------------------------------------------------------- +:parseExt +shift + +if "%~1"=="" ( + echo ERROR: -ext requires a path as argument + exit /B 2 +) + +set "EXT_DIR=%~1" +set "EXT_DIR_USER=1" +set "EXT_CMAKE_PREFIX=%EXT_DIR%" +shift +goto parseArgs + +REM -------------------------------------------------------------------------- +:parseInstall +shift + +set "INSTALL_ARG=%~1" +if "%INSTALL_ARG%"=="" ( set "INSTALL_ROOT=C:\Xilinx\XRT" & goto parseArgs ) +if "%INSTALL_ARG:~0,1%"=="-" ( set "INSTALL_ROOT=C:\Xilinx\XRT" & goto parseArgs ) + +set "INSTALL_ROOT=%INSTALL_ARG%" +shift +goto parseArgs + +REM -------------------------------------------------------------------------- +:argsParsed +if "%DO_CLEAN%"=="1" goto clean +call :pickGenerator +if "%EXT_DIR_USER%"=="0" call :resolveDefaultExtDir + +if not exist "%EXT_DIR%\" ( + echo ERROR: dependency prefix not found: "%EXT_DIR%" + echo Use -ext ^, or populate the default dependency area. + exit /B 2 +) + +echo Using dependency prefix: "%EXT_DIR%" +call :echoDetectedBaseline "%EXT_DIR%" + +if "%INSTALL_ROOT%"=="" goto skipInstallCheck + +set "INSTALL_CFGS=0" +if "%DEBUG%"=="1" set /A INSTALL_CFGS+=1 +if "%RELEASE%"=="1" set /A INSTALL_CFGS+=1 +if "%RELWITHDEBINFO%"=="1" set /A INSTALL_CFGS+=1 +if "%INSTALL_CFGS%"=="1" goto skipInstallCheck +echo ERROR: -install requires exactly one of -dbg, -opt, -rwd (cannot install multiple configs into one prefix) +exit /B 2 + +:skipInstallCheck +if /I "%CMAKE_ARCH%"=="ARM64" set "DIR_SUFFIX=A64" + +if "%DEBUG%"=="1" call :doBuild Debug WDebug%DIR_SUFFIX% +if errorlevel 1 exit /B + +if "%RELEASE%"=="1" call :doBuild Release WRelease%DIR_SUFFIX% +if errorlevel 1 exit /B + +if "%RELWITHDEBINFO%"=="1" call :doBuild RelWithDebInfo WRelDeb%DIR_SUFFIX% +if errorlevel 1 exit /B + +goto :EOF + +REM -------------------------------------------------------------------------- +:resolveDefaultExtDir +set "CI_VCPKG_EXT_DIR=%CI_EXT_ROOT%\vcpkg_installed\%TARGET_TRIPLET%" +set "CI_TRIPLET_EXT_DIR=%CI_EXT_ROOT%\%TARGET_TRIPLET%" +set "EXT_DIR=%CI_VCPKG_EXT_DIR%" +set "EXT_CMAKE_PREFIX=%CI_VCPKG_EXT_DIR%" +if exist "%CI_VCPKG_EXT_DIR%\" goto :EOF +if exist "%CI_TRIPLET_EXT_DIR%\" set "EXT_DIR=%CI_TRIPLET_EXT_DIR%" & set "EXT_CMAKE_PREFIX=%CI_TRIPLET_EXT_DIR%" & goto :EOF +if exist "%CI_EXT_ROOT%\" set "EXT_DIR=%CI_EXT_ROOT%" & set "EXT_CMAKE_PREFIX=%CI_EXT_ROOT%" +goto :EOF + +REM -------------------------------------------------------------------------- +:echoDetectedBaseline +set "BASELINE_MARKER=%~1\.vcpkg-baseline" +if not exist "%BASELINE_MARKER%" exit /B 0 +set "DETECTED_BASELINE=" +set /P DETECTED_BASELINE=<"%BASELINE_MARKER%" +if "%DETECTED_BASELINE%"=="" exit /B 0 +if /I "%DETECTED_BASELINE%"=="UNPINNED" echo Using detected vcpkg baseline: UNPINNED +if /I not "%DETECTED_BASELINE%"=="UNPINNED" echo Using detected vcpkg baseline: %DETECTED_BASELINE:~0,7% +exit /B 0 + +REM -------------------------------------------------------------------------- +:pickGenerator +if not "%GENERATOR%"=="" goto :EOF + +cmake --help 2>NUL | findstr /C:"Visual Studio 18 2026" >NUL +if errorlevel 1 goto UseVS17 + +set "GENERATOR=Visual Studio 18 2026" +goto :EOF + +:UseVS17 +set "GENERATOR=Visual Studio 17 2022" +goto :EOF + +REM -------------------------------------------------------------------------- +:doBuild +set "CFG=%~1" +set "DIR=%~2" +set "XRT_INSTALL_PREFIX=%BUILDDIR%\%DIR%\xilinx\xrt" +if not "%INSTALL_ROOT%"=="" set "XRT_INSTALL_PREFIX=%INSTALL_ROOT%" + +if "%NOCMAKE%"=="0" goto doConfig +goto doBuildOnly + +REM -------------------------------------------------------------------------- +:doConfig +echo Configuring %CFG%... +set "LOCAL_CMAKEFLAGS=%CMAKEFLAGS%" + +if not "%EXT_CMAKE_PREFIX%"=="" set "LOCAL_CMAKEFLAGS=%LOCAL_CMAKEFLAGS% -DCMAKE_PREFIX_PATH=%EXT_CMAKE_PREFIX%" +set "PROTOC_EXE=%EXT_DIR%\tools\protobuf\protoc.exe" +if exist "%PROTOC_EXE%" set "LOCAL_CMAKEFLAGS=%LOCAL_CMAKEFLAGS% -DProtobuf_PROTOC_EXECUTABLE=%PROTOC_EXE%" + +set "CMAKE_PLATFORM_ARG=" +if not "%CMAKE_ARCH%"=="" set "CMAKE_PLATFORM_ARG=-A %CMAKE_ARCH%" + +cmake -B "%BUILDDIR%\%DIR%" -G "%GENERATOR%" %CMAKE_PLATFORM_ARG% ^ + -DMSVC_PARALLEL_JOBS=%LOCAL_MSVC_PARALLEL_JOBS% ^ + -DCMAKE_VS_GLOBALS="VcpkgEnabled=false" ^ + -DKHRONOS="%EXT_DIR%" ^ + -DBOOST_ROOT="%EXT_DIR%" ^ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ^ + %LOCAL_CMAKEFLAGS% ^ + "%BUILDDIR%\..\src" +if errorlevel 1 exit /B + +REM -------------------------------------------------------------------------- +:doBuildOnly +echo Building %CFG%... +cmake --build "%BUILDDIR%\%DIR%" --config %CFG% --verbose +if errorlevel 1 exit /B + +echo Installing %CFG%... +cmake --install "%BUILDDIR%\%DIR%" --config %CFG% --prefix "%XRT_INSTALL_PREFIX%" +if errorlevel 1 exit /B + +if "%STAGE%"=="1" call :stageExt "%CFG%" "%XRT_INSTALL_PREFIX%" || exit /B + +set "DO_ZIP=0" +if "%CREATE_SDK%"=="1" set "DO_ZIP=1" +if "%CREATE_PACKAGE%"=="1" set "DO_ZIP=1" + +if /I "%CFG%"=="Release" if "%DO_ZIP%"=="1" call :doCpackZip "%BUILDDIR%\%DIR%" "%CFG%" || exit /B +if /I "%CFG%"=="Release" if "%CREATE_PACKAGE%"=="1" call :doCpackWix "%BUILDDIR%\%DIR%" "%CFG%" || exit /B + +exit /B 0 + +REM -------------------------------------------------------------------------- +:stageExt +set "CFG=%~1" +set "XRT_ROOT=%~2" + +set "VCPKG_BIN=%EXT_DIR%\bin" +if /I "%CFG%"=="Debug" if exist "%EXT_DIR%\debug\bin\" set "VCPKG_BIN=%EXT_DIR%\debug\bin" + +set "XRT_EXT_BIN=%XRT_ROOT%\ext\bin" +if not exist "%XRT_EXT_BIN%\" mkdir "%XRT_EXT_BIN%" >NUL 2>NUL + +copy /Y "%VCPKG_BIN%\boost_filesystem*.dll" "%XRT_EXT_BIN%\" || exit /B +copy /Y "%VCPKG_BIN%\boost_program_options*.dll" "%XRT_EXT_BIN%\" || exit /B +copy /Y "%VCPKG_BIN%\OpenCL.dll" "%XRT_EXT_BIN%\" || exit /B +if not exist "%VCPKG_BIN%\libprotobuf*.dll" goto skipProtobufCopy +copy /Y "%VCPKG_BIN%\libprotobuf*.dll" "%XRT_EXT_BIN%\" || exit /B +:skipProtobufCopy + +exit /B 0 + +REM -------------------------------------------------------------------------- +:doCpackZip +set "CPACK_BUILD_DIR=%~1" +set "CPACK_CFG=%~2" + +echo ====================== Creating SDK ZIP archive ============================ +echo cpack -G ZIP -B "%CPACK_BUILD_DIR%" -C %CPACK_CFG% --config "%CPACK_BUILD_DIR%\CPackConfig.cmake" +cpack -G ZIP -B "%CPACK_BUILD_DIR%" -C %CPACK_CFG% --config "%CPACK_BUILD_DIR%\CPackConfig.cmake" + +exit /B + +REM -------------------------------------------------------------------------- +:doCpackWix +set "CPACK_BUILD_DIR=%~1" +set "CPACK_CFG=%~2" + +echo ====================== Creating MSI Archive ============================== +echo cpack -G WIX -B "%CPACK_BUILD_DIR%" -C %CPACK_CFG% --config "%CPACK_BUILD_DIR%\CPackConfig.cmake" +cpack -G WIX -B "%CPACK_BUILD_DIR%" -C %CPACK_CFG% --config "%CPACK_BUILD_DIR%\CPackConfig.cmake" + +exit /B + +REM -------------------------------------------------------------------------- +:help +echo. +echo Usage: build26.bat [options] +echo. +echo [-help] - List this help +echo [-clean] - Remove build artifact directories +echo [-dbg] - Debug build only +echo [-opt] - Release build only +echo [-rwd] - RelWithDebInfo build only +echo [-ext ^] - Sets EXT_DIR for dependencies (usually a vcpkg prefix) +echo [-install [^]] - Install prefix (default: C:\Xilinx\XRT) +echo [-arm64] - Configure/build ARM64 (uses vcpkg triplet arm64-windows-static by default) +echo [-dynamic] - Use dynamic vcpkg triplets and copy runtime DLLs into ^\ext\bin +echo [-sdk] - Build NPU and create a ZIP archive via CPack (Release only) +echo [-pkg] - Create ZIP and MSI archives via CPack (Release only) +echo [-npu] - Build NPU component of XRT +echo [-noabi] - Disable ABI check +echo [-hip] - Enable HIP build +echo [-nocmake] - Skip re-configure; build/install only +echo. +echo Note: +echo Default EXT_DIR tries: C:\Xilinx\XRT\ext.new\vcpkg_installed\^ +echo Then tries: C:\Xilinx\XRT\ext.new\^ +echo Then tries: C:\Xilinx\XRT\ext.new +goto :EOF + +REM -------------------------------------------------------------------------- +:clean +if exist "%BUILDDIR%\WDebug" rmdir /S /Q "%BUILDDIR%\WDebug" +if exist "%BUILDDIR%\WRelease" rmdir /S /Q "%BUILDDIR%\WRelease" +if exist "%BUILDDIR%\WRelDeb" rmdir /S /Q "%BUILDDIR%\WRelDeb" +if exist "%BUILDDIR%\WDebugA64" rmdir /S /Q "%BUILDDIR%\WDebugA64" +if exist "%BUILDDIR%\WReleaseA64" rmdir /S /Q "%BUILDDIR%\WReleaseA64" +if exist "%BUILDDIR%\WRelDebA64" rmdir /S /Q "%BUILDDIR%\WRelDebA64" +echo Build directories cleaned. + +exit /B 0 \ No newline at end of file diff --git a/src/python/pybind11/CMakeLists.txt b/src/python/pybind11/CMakeLists.txt index 2ea3dea1aa6..d52ac58e2cb 100644 --- a/src/python/pybind11/CMakeLists.txt +++ b/src/python/pybind11/CMakeLists.txt @@ -78,6 +78,11 @@ find_package(Python3 COMPONENTS Development Interpreter) if (Python3_FOUND) message("-- Python libs version: ${Python3_VERSION}") message("-- PYTHON_INCLUDE_PATH ${Python3_INCLUDE_DIRS}") + set(PYTHON_INCLUDE_PATH ${Python3_INCLUDE_DIRS}) + execute_process(COMMAND ${Python3_EXECUTABLE} -c "import sys, pathlib; print((pathlib.Path(sys.base_prefix)/'libs').as_posix())" + OUTPUT_VARIABLE PYTHON_LIBDIR + OUTPUT_STRIP_TRAILING_WHITESPACE + ) set(PYTHONLIBS_VERSION_MAJOR ${Python3_VERSION_MAJOR}) set(PYTHONLIBS_VERSION_MINOR ${Python3_VERSION_MINOR}) endif(Python3_FOUND) @@ -105,6 +110,7 @@ if (pybind11_FOUND) INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) pybind11_add_module(pyxrt src/pyxrt.cpp) target_link_libraries(pyxrt PRIVATE xrt_coreutil uuid) + target_link_directories(pyxrt PRIVATE "${PYTHON_LIBDIR}") set_target_properties(pyxrt PROPERTIES SUFFIX ".pyd") install(TARGETS pyxrt diff --git a/src/runtime_src/tools/scripts/xrtdeps-vcpkg.bat b/src/runtime_src/tools/scripts/xrtdeps-vcpkg.bat new file mode 100644 index 00000000000..881ac3cafe6 --- /dev/null +++ b/src/runtime_src/tools/scripts/xrtdeps-vcpkg.bat @@ -0,0 +1,204 @@ +@ECHO OFF + +REM SPDX-License-Identifier: Apache-2.0 +REM Copyright (C) 2026 Advanced Micro Devices, Inc. All rights reserved. + +setlocal +set "DO_CLEAN=0" +set "SCRIPTDIR=%~dp0" +set "SCRIPTDIR=%SCRIPTDIR:~0,-1%" +set "SRC_ROOT=%SCRIPTDIR%\..\..\..\.." +set "EXTRA_PORTS=" +set "CREATE_PACKAGE=0" +REM Pin vcpkg registry baseline for determinism. +REM Dependency versioning can be done here. +REM Current vcpkg release: 2026.01.16 +set "VCPKG_BASELINE_SHA=66c0373dc7fca549e5803087b9487edfe3aca0a1" + +for %%I in ("%SRC_ROOT%") do set "SRC_ROOT=%%~fI" + +if "%XRT_EXT_ROOT%"=="" set "XRT_EXT_ROOT=%SRC_ROOT%\build\ext.vcpkg" +if "%VCPKG_TRIPLET%"=="" set "VCPKG_TRIPLET=x64-windows-static" + +REM -------------------------------------------------------------------------- +:parseArgs +if "%~1"=="" goto argsParsed + +if /I "%~1"=="-help" goto help +if /I "%~1"=="-extroot" goto parseExtRoot +if /I "%~1"=="-triplet" goto parseTriplet +if /I "%~1"=="-port" goto parsePort +if /I "%~1"=="-baseline" goto parseBaseline +if /I "%~1"=="-pkg" ( set "CREATE_PACKAGE=1" & shift & goto parseArgs ) +if /I "%~1"=="-clean" ( set "DO_CLEAN=1" & shift & goto parseArgs ) + +echo Unknown option: %1 +goto help + +REM -------------------------------------------------------------------------- +:parseExtRoot +shift + +if "%~1"=="" ( + echo ERROR: -extroot requires a path argument + exit /B 2 +) + +set "XRT_EXT_ROOT=%~1" +shift +goto parseArgs + +REM -------------------------------------------------------------------------- +:parseTriplet +shift + +if "%~1"=="" ( + echo ERROR: -triplet requires an argument + exit /B 2 +) + +set "VCPKG_TRIPLET=%~1" +shift +goto parseArgs + +REM -------------------------------------------------------------------------- +:parsePort +shift + +if "%~1"=="" ( + echo ERROR: -port requires a port name + exit /B 2 +) + +if /I "%~1"=="opencl" ( + echo NOTE: opencl is handled separately and does not need -port opencl + shift + goto parseArgs +) + +set "EXTRA_PORTS=%EXTRA_PORTS% %~1" +shift +goto parseArgs + +REM -------------------------------------------------------------------------- +:parseBaseline +shift + +set "VCPKG_BASELINE_SHA=" +set "BASELINE_ARG=%~1" +if "%BASELINE_ARG%"=="" goto parseArgs +if "%BASELINE_ARG:~0,1%"=="-" goto parseArgs + +set "VCPKG_BASELINE_SHA=%BASELINE_ARG%" +shift +goto parseArgs + +REM -------------------------------------------------------------------------- +:argsParsed +if "%DO_CLEAN%"=="1" goto clean + +set "OPENCL_TRIPLET=%VCPKG_TRIPLET:-static=%" +set "EXT_DIR=%XRT_EXT_ROOT%\vcpkg_installed\%VCPKG_TRIPLET%" +set "OPENCL_EXT_ROOT=%XRT_EXT_ROOT%\.opencl.dynamic" +set "OPENCL_EXT_DIR=%OPENCL_EXT_ROOT%\vcpkg_installed\%OPENCL_TRIPLET%" +set "PKG_OUT_DIR=%SRC_ROOT%\build\pkg" +set "PKG_BASELINE_ID=unpinned" +if not "%VCPKG_BASELINE_SHA%"=="" set "PKG_BASELINE_ID=%VCPKG_BASELINE_SHA:~0,7%" + +call :prepareManifestRoot "%XRT_EXT_ROOT%" || exit /B +copy /Y "%SRC_ROOT%\src\vcpkg.json" "%XRT_EXT_ROOT%\vcpkg.json" >NUL || exit /B +python -c "import json, os, pathlib; p=pathlib.Path(os.environ['XRT_EXT_ROOT'])/'vcpkg.json'; d=json.loads(p.read_text(encoding='utf-8')); d['dependencies']=[dep for dep in d.get('dependencies', []) if dep != 'opencl']; p.write_text(json.dumps(d, indent=2) + chr(10), encoding='utf-8')" || exit /B + +pushd "%XRT_EXT_ROOT%" || exit /B +if not "%EXTRA_PORTS%"=="" vcpkg add port %EXTRA_PORTS% || exit /B +vcpkg install --triplet %VCPKG_TRIPLET% --clean-after-build || exit /B +popd + +call :prepareManifestRoot "%OPENCL_EXT_ROOT%" || exit /B +pushd "%OPENCL_EXT_ROOT%" || exit /B +vcpkg add port opencl || exit /B +vcpkg install --triplet %OPENCL_TRIPLET% --clean-after-build || exit /B +popd + +call :copyOpenCLIntoPrefix || exit /B +call :writeBaselineMarker || exit /B + +REM Needed for pyxrt. +python -m pip install pybind11 || exit /B + +if "%CREATE_PACKAGE%"=="1" call :packageDeps || exit /B + +echo. +echo Dependency prefix ready: +echo EXT_DIR=%EXT_DIR% +if "%CREATE_PACKAGE%"=="1" echo PACKAGE=%PKG_OUT_DIR%\ext.vcpkg.%PKG_BASELINE_ID%.%VCPKG_TRIPLET%.zip +echo. +set "BUILD_ARCH_ARG=" +if /I "%VCPKG_TRIPLET:~0,6%"=="arm64-" set "BUILD_ARCH_ARG= -arm64" +set "BUILD_DYNAMIC_ARG=" +if "%VCPKG_TRIPLET:-static=%"=="%VCPKG_TRIPLET%" set "BUILD_DYNAMIC_ARG= -dynamic" +echo Build example: +echo build\build26.bat -ext "%EXT_DIR%"%BUILD_ARCH_ARG%%BUILD_DYNAMIC_ARG% -opt -npu -install + +exit /B 0 + +REM -------------------------------------------------------------------------- +:help +echo. +echo Usage: xrtdeps-vcpkg.bat [options] +echo. +echo [-help] - List this help +echo [-extroot ^] - Root directory for vcpkg deps (default: ^\build\ext.vcpkg) +echo [-clean] - Remove the extroot directory (default: ^\build\ext.vcpkg) +echo [-triplet ^] - vcpkg triplet (default: x64-windows-static) +echo [-baseline [^]] - Use vcpkg default baseline (omit ^) or pin to user-specified ^ +echo [-port ^] - Extra vcpkg port to install (may be repeated) +echo [-pkg] - Create build\pkg\ext.vcpkg.^.^.zip for publishing +echo. +echo Note: Uses first vcpkg on PATH. +echo OpenCL is always installed separately as a dynamic dependency and copied into the main prefix. + +exit /B 2 + +REM -------------------------------------------------------------------------- +:prepareManifestRoot +set "MANIFEST_ROOT=%~1" +mkdir "%MANIFEST_ROOT%" >NUL 2>NUL +pushd "%MANIFEST_ROOT%" || exit /B +del /F /Q vcpkg.json vcpkg-configuration.json vcpkg-lock.json >NUL 2>NUL +vcpkg new --application || exit /B +if "%VCPKG_BASELINE_SHA%"=="" goto prepareManifestRootDone +python -c "import json, pathlib; p=pathlib.Path('vcpkg-configuration.json'); d=json.loads(p.read_text(encoding='utf-8')); dr=d.get('default-registry') or {}; dr['baseline']=r'%VCPKG_BASELINE_SHA%'; d['default-registry']=dr; p.write_text(json.dumps(d, indent=2) + chr(10), encoding='utf-8')" || exit /B +:prepareManifestRootDone +popd +exit /B 0 + +REM -------------------------------------------------------------------------- +:copyOpenCLIntoPrefix +python -c "import os, pathlib, shutil; src=pathlib.Path(os.environ['OPENCL_EXT_DIR']); dst=pathlib.Path(os.environ['EXT_DIR']); (dst/'bin').mkdir(parents=True, exist_ok=True); (dst/'lib').mkdir(parents=True, exist_ok=True); (dst/'include').mkdir(parents=True, exist_ok=True); shutil.copy2(src/'bin'/'OpenCL.dll', dst/'bin'/'OpenCL.dll'); shutil.copy2(src/'lib'/'OpenCL.lib', dst/'lib'/'OpenCL.lib'); shutil.copytree(src/'include'/'CL', dst/'include'/'CL', dirs_exist_ok=True)" || exit /B +exit /B 0 + +REM -------------------------------------------------------------------------- +:writeBaselineMarker +set "BASELINE_MARKER=%EXT_DIR%\.vcpkg-baseline" +set "BASELINE_MARKER_VALUE=%VCPKG_BASELINE_SHA%" +if "%BASELINE_MARKER_VALUE%"=="" set "BASELINE_MARKER_VALUE=UNPINNED" +> "%BASELINE_MARKER%"