jesus. i hacked the fuck out of the build environement and got x64 and arm64 bins built on an arm64 virtual machine. There is no way that it is a good a proper build script, but it works...
This commit is contained in:
parent
fa4257e999
commit
c2f99a603a
|
|
@ -6,6 +6,7 @@ build_windows/
|
||||||
icons
|
icons
|
||||||
*.png
|
*.png
|
||||||
vamp-plugin/
|
vamp-plugin/
|
||||||
|
libraries/loop-tempo-estimator/
|
||||||
tests/
|
tests/
|
||||||
ADC-2024/
|
ADC-2024/
|
||||||
*.json
|
*.json
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@ set "PROJECT_ROOT=%SCRIPT_DIR%.."
|
||||||
set "BUILD_DIR=%PROJECT_ROOT%\build_windows\x64"
|
set "BUILD_DIR=%PROJECT_ROOT%\build_windows\x64"
|
||||||
set "QT_X64_BIN=C:\Qt\6.8.3\msvc2022_64\bin"
|
set "QT_X64_BIN=C:\Qt\6.8.3\msvc2022_64\bin"
|
||||||
set "QT_X64_PLUGINS=C:\Qt\6.8.3\msvc2022_64\plugins"
|
set "QT_X64_PLUGINS=C:\Qt\6.8.3\msvc2022_64\plugins"
|
||||||
set "VCPKG_BIN=%PROJECT_ROOT%\vcpkg_installed\x64-windows\bin"
|
set "TRIPLETS_DIR=%PROJECT_ROOT%\custom_triplets"
|
||||||
|
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
:: ENVIRONMENT SETUP (VS Discovery)
|
:: ENVIRONMENT SETUP
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
if defined VSINSTALLDIR (
|
if defined VSINSTALLDIR (
|
||||||
set "VS_INSTALL_DIR=!VSINSTALLDIR!"
|
set "VS_INSTALL_DIR=!VSINSTALLDIR!"
|
||||||
|
|
@ -32,74 +32,62 @@ set "VCPKG_EXE=!VS_INSTALL_DIR!\VC\vcpkg\vcpkg.exe"
|
||||||
set "VCPKG_CMAKE=!VS_INSTALL_DIR!\VC\vcpkg\scripts\buildsystems\vcpkg.cmake"
|
set "VCPKG_CMAKE=!VS_INSTALL_DIR!\VC\vcpkg\scripts\buildsystems\vcpkg.cmake"
|
||||||
|
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
:: 0. DYNAMIC BASELINE DISCOVERY
|
:: 1. CLEANUP & PREP
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
echo [INFO] Probing for latest vcpkg baseline...
|
echo [INFO] Cleaning up previous configurations...
|
||||||
|
if exist "%TRIPLETS_DIR%" rmdir /s /q "%TRIPLETS_DIR%"
|
||||||
|
del "%PROJECT_ROOT%\vcpkg.json" 2>nul
|
||||||
|
|
||||||
:: 1. Create temporary manifest with empty baseline to provoke the "suggestion" error
|
:: GENERATE VCPKG.JSON
|
||||||
(
|
(
|
||||||
echo {
|
echo {
|
||||||
echo "name": "yrcrystals",
|
echo "name": "yrcrystals",
|
||||||
echo "version-string": "1.0.0",
|
echo "version-string": "1.0.0",
|
||||||
echo "dependencies": [ "fftw3" ],
|
echo "builtin-baseline": "b1b19307e2d2ec1eefbdb7ea069de7d4bcd31f01",
|
||||||
echo "builtin-baseline": ""
|
echo "dependencies": [ "fftw3" ]
|
||||||
echo }
|
echo }
|
||||||
) > "%PROJECT_ROOT%\vcpkg.json"
|
) > "%PROJECT_ROOT%\vcpkg.json"
|
||||||
|
|
||||||
:: 2. Run dry-run and capture output (stderr included)
|
:: GENERATE OVERLAY TRIPLET
|
||||||
"!VCPKG_EXE!" install --triplet x64-windows --dry-run > "%PROJECT_ROOT%\vcpkg_probe.log" 2>&1
|
if not exist "%TRIPLETS_DIR%" mkdir "%TRIPLETS_DIR%"
|
||||||
|
|
||||||
:: 3. Extract the hash using PowerShell regex
|
|
||||||
:: Matches pattern: "builtin-baseline": "HEX_HASH"
|
|
||||||
set "DETECTED_HASH="
|
|
||||||
for /f "usebackq tokens=*" %%H in (`powershell -NoProfile -Command "$content = Get-Content '%PROJECT_ROOT%\vcpkg_probe.log' -Raw; if ($content -match 'builtin-baseline.: .([a-f0-9]+).') { $matches[1] }"`) do (
|
|
||||||
set "DETECTED_HASH=%%H"
|
|
||||||
)
|
|
||||||
|
|
||||||
if "!DETECTED_HASH!"=="" (
|
|
||||||
echo [WARNING] Could not auto-detect baseline. Defaulting to standard hash.
|
|
||||||
set "DETECTED_HASH=b1b19307e2d2ec1eefbdb7ea069de7d4bcd31f01"
|
|
||||||
) else (
|
|
||||||
echo [INFO] Detected Baseline: !DETECTED_HASH!
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Clean up log
|
|
||||||
del "%PROJECT_ROOT%\vcpkg_probe.log" 2>nul
|
|
||||||
|
|
||||||
:: 4. Generate Final Manifest with discovered hash
|
|
||||||
echo [INFO] Writing vcpkg.json...
|
|
||||||
(
|
(
|
||||||
echo {
|
echo set(VCPKG_TARGET_ARCHITECTURE x64^)
|
||||||
echo "name": "yrcrystals",
|
echo set(VCPKG_CRT_LINKAGE dynamic^)
|
||||||
echo "version-string": "1.0.0",
|
echo set(VCPKG_LIBRARY_LINKAGE dynamic^)
|
||||||
echo "builtin-baseline": "!DETECTED_HASH!",
|
echo set(VCPKG_CMAKE_SYSTEM_NAME Windows^)
|
||||||
echo "dependencies": [
|
echo set(VCPKG_PLATFORM_TOOLSET v143^)
|
||||||
echo "fftw3"
|
echo set(VCPKG_ENV_PASSTHROUGH_UNTRACKED LIB LIBPATH INCLUDE PATH^)
|
||||||
echo ]
|
) > "%TRIPLETS_DIR%\x64-windows.cmake"
|
||||||
echo }
|
|
||||||
) > "%PROJECT_ROOT%\vcpkg.json"
|
|
||||||
|
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
:: 1. INSTALL DEPENDENCIES (Targeting x64-windows)
|
:: 2. NINJA HUNT (Explicit Download Check)
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
echo [INFO] Verifying dependencies for x64...
|
echo [INFO] Hunting for ARM64 Ninja...
|
||||||
cd "%PROJECT_ROOT%"
|
|
||||||
"!VCPKG_EXE!" install --triplet x64-windows
|
|
||||||
|
|
||||||
if %errorlevel% neq 0 (
|
:: 1. Ask VCPKG to fetch it (ensures it is on disk)
|
||||||
echo [ERROR] VCPKG install failed.
|
"!VCPKG_EXE!" fetch ninja >nul
|
||||||
pause
|
|
||||||
exit /b %errorlevel%
|
:: 2. Manually look for the downloaded version to avoid picking up the VS one
|
||||||
|
set "GOOD_NINJA_DIR="
|
||||||
|
for /d %%d in ("%LOCALAPPDATA%\vcpkg\downloads\tools\ninja\*") do (
|
||||||
|
if exist "%%d\ninja.exe" set "GOOD_NINJA_DIR=%%d"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
:: 3. Fallback: Ask VCPKG where it is (if manual search failed)
|
||||||
|
if "!GOOD_NINJA_DIR!"=="" (
|
||||||
|
for /f "delims=" %%i in ('"!VCPKG_EXE!" fetch ninja') do set "GOOD_NINJA_EXE=%%i"
|
||||||
|
for %%F in ("!GOOD_NINJA_EXE!") do set "GOOD_NINJA_DIR=%%~dpF"
|
||||||
|
)
|
||||||
|
|
||||||
|
echo [INFO] Found Ninja at: !GOOD_NINJA_DIR!
|
||||||
|
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
:: 2. AUTO-DETECT MAGICK
|
:: 3. IMAGE MAGICK CHECK
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
set "MAGICK_PATH="
|
set "MAGICK_PATH="
|
||||||
where magick >nul 2>nul
|
where magick >nul 2>nul
|
||||||
if %errorlevel% equ 0 (
|
if %errorlevel% equ 0 (
|
||||||
for /f "delims=" %%i in ('where magick') do set "MAGICK_PATH=%%i"
|
for /f "delims=" %%i in ('where magick') do set "MAGICK_PATH=%%i"
|
||||||
echo [INFO] Found Magick in PATH.
|
|
||||||
)
|
)
|
||||||
if not defined MAGICK_PATH (
|
if not defined MAGICK_PATH (
|
||||||
for /d %%d in ("C:\Program Files\ImageMagick*") do (
|
for /d %%d in ("C:\Program Files\ImageMagick*") do (
|
||||||
|
|
@ -107,44 +95,76 @@ if not defined MAGICK_PATH (
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if defined MAGICK_PATH (
|
if defined MAGICK_PATH (
|
||||||
echo [INFO] Using ImageMagick: !MAGICK_PATH!
|
|
||||||
set "CMAKE_MAGICK_ARG=-DMAGICK_EXECUTABLE="!MAGICK_PATH!""
|
set "CMAKE_MAGICK_ARG=-DMAGICK_EXECUTABLE="!MAGICK_PATH!""
|
||||||
) else (
|
) else (
|
||||||
echo [WARNING] ImageMagick not found. Icons will be skipped.
|
|
||||||
set "CMAKE_MAGICK_ARG="
|
set "CMAKE_MAGICK_ARG="
|
||||||
)
|
)
|
||||||
|
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
:: 3. CONFIGURE & BUILD
|
:: 4. CONFIGURATION (The Flattened Double Tap)
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
echo [INFO] Setting up Environment for x64 Build...
|
echo [INFO] Setting up Environment...
|
||||||
:: CRITICAL: arm64_x64 means "Use ARM64 host to build x64 binaries"
|
|
||||||
call "!VCVARSALL!" arm64_x64
|
call "!VCVARSALL!" arm64_x64
|
||||||
|
set "PATH=!GOOD_NINJA_DIR!;!PATH!"
|
||||||
|
|
||||||
if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%"
|
if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%"
|
||||||
cd "%BUILD_DIR%"
|
cd "%BUILD_DIR%"
|
||||||
|
|
||||||
set "NEED_CONFIG=0"
|
if exist "build.ninja" if exist "CMakeCache.txt" goto BUILD_STEP
|
||||||
if not exist "build.ninja" set "NEED_CONFIG=1"
|
|
||||||
if not exist "CMakeCache.txt" set "NEED_CONFIG=1"
|
|
||||||
|
|
||||||
if "!NEED_CONFIG!"=="1" (
|
:CONFIG_ROUND_1
|
||||||
echo [INFO] Build configuration missing. Running CMake Configure...
|
echo [INFO] Attempting CMake Configure (Round 1)...
|
||||||
cmake -G "Ninja" ^
|
cmake -G "Ninja" ^
|
||||||
-DCMAKE_BUILD_TYPE=Release ^
|
-DCMAKE_BUILD_TYPE=Release ^
|
||||||
-DCMAKE_PREFIX_PATH="%QT_X64_BIN%\..;%PROJECT_ROOT%\vcpkg_installed\x64-windows" ^
|
-DCMAKE_PREFIX_PATH="%QT_X64_BIN%\..;%PROJECT_ROOT%\vcpkg_installed\x64-windows" ^
|
||||||
-DCMAKE_TOOLCHAIN_FILE="!VCPKG_CMAKE!" ^
|
-DCMAKE_TOOLCHAIN_FILE="!VCPKG_CMAKE!" ^
|
||||||
-DVCPKG_TARGET_TRIPLET=x64-windows ^
|
-DVCPKG_TARGET_TRIPLET=x64-windows ^
|
||||||
!CMAKE_MAGICK_ARG! ^
|
-DVCPKG_HOST_TRIPLET=arm64-windows ^
|
||||||
"%PROJECT_ROOT%"
|
-DVCPKG_OVERLAY_TRIPLETS="%TRIPLETS_DIR%" ^
|
||||||
|
!CMAKE_MAGICK_ARG! ^
|
||||||
if !errorlevel! neq 0 (
|
"%PROJECT_ROOT%"
|
||||||
echo [ERROR] Configuration Failed.
|
|
||||||
pause
|
if %errorlevel% equ 0 goto BUILD_STEP
|
||||||
exit /b !errorlevel!
|
|
||||||
)
|
:CONFIG_PATCH
|
||||||
|
echo.
|
||||||
|
echo [WARN] Configuration Failed. Applying "Double Tap" Patch...
|
||||||
|
|
||||||
|
set "SHADOW_VCPKG=%BUILD_DIR%\vcpkg_installed\x64-windows"
|
||||||
|
set "SHADOW_BIN=!SHADOW_VCPKG!\bin\fftw3.dll"
|
||||||
|
set "SHADOW_TOOLS_DIR=!SHADOW_VCPKG!\tools\fftw3"
|
||||||
|
set "SHADOW_TOOLS_DLL=!SHADOW_TOOLS_DIR!\fftw3.dll"
|
||||||
|
|
||||||
|
if not exist "!SHADOW_BIN!" (
|
||||||
|
echo [ERROR] Could not find Shadow Build artifacts to patch.
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not exist "!SHADOW_TOOLS_DIR!" mkdir "!SHADOW_TOOLS_DIR!"
|
||||||
|
copy /Y "!SHADOW_BIN!" "!SHADOW_TOOLS_DLL!" >nul
|
||||||
|
echo [INFO] Patch Applied.
|
||||||
|
|
||||||
|
:CONFIG_ROUND_2
|
||||||
|
echo.
|
||||||
|
echo [INFO] Retrying Configuration (Round 2)...
|
||||||
|
cmake -G "Ninja" ^
|
||||||
|
-DCMAKE_BUILD_TYPE=Release ^
|
||||||
|
-DCMAKE_PREFIX_PATH="%QT_X64_BIN%\..;%PROJECT_ROOT%\vcpkg_installed\x64-windows" ^
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE="!VCPKG_CMAKE!" ^
|
||||||
|
-DVCPKG_TARGET_TRIPLET=x64-windows ^
|
||||||
|
-DVCPKG_HOST_TRIPLET=arm64-windows ^
|
||||||
|
-DVCPKG_OVERLAY_TRIPLETS="%TRIPLETS_DIR%" ^
|
||||||
|
!CMAKE_MAGICK_ARG! ^
|
||||||
|
"%PROJECT_ROOT%"
|
||||||
|
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo [ERROR] Configuration Failed even after patch.
|
||||||
|
pause
|
||||||
|
exit /b %errorlevel%
|
||||||
|
)
|
||||||
|
|
||||||
|
:BUILD_STEP
|
||||||
echo [INFO] Building...
|
echo [INFO] Building...
|
||||||
cmake --build .
|
cmake --build .
|
||||||
|
|
||||||
|
|
@ -155,10 +175,10 @@ if %errorlevel% neq 0 (
|
||||||
)
|
)
|
||||||
|
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
:: 4. THE NUKE (Clean Slate)
|
:: 5. THE NUKE & COPY
|
||||||
:: ==============================================================================
|
:: ==============================================================================
|
||||||
echo.
|
echo.
|
||||||
echo [CLEAN] Removing old DLLs and Plugins...
|
echo [CLEAN] Removing old DLLs...
|
||||||
del /f /q *.dll 2>nul
|
del /f /q *.dll 2>nul
|
||||||
if exist "platforms" rmdir /s /q "platforms"
|
if exist "platforms" rmdir /s /q "platforms"
|
||||||
if exist "styles" rmdir /s /q "styles"
|
if exist "styles" rmdir /s /q "styles"
|
||||||
|
|
@ -168,9 +188,6 @@ if exist "imageformats" rmdir /s /q "imageformats"
|
||||||
if exist "iconengines" rmdir /s /q "iconengines"
|
if exist "iconengines" rmdir /s /q "iconengines"
|
||||||
if exist "tls" rmdir /s /q "tls"
|
if exist "tls" rmdir /s /q "tls"
|
||||||
|
|
||||||
:: ==============================================================================
|
|
||||||
:: 5. COPY DEPENDENCIES (x64 Source)
|
|
||||||
:: ==============================================================================
|
|
||||||
echo.
|
echo.
|
||||||
echo [COPY] Copying DLLs...
|
echo [COPY] Copying DLLs...
|
||||||
|
|
||||||
|
|
@ -214,11 +231,12 @@ copy /Y "%QT_X64_PLUGINS%\iconengines\*.dll" "iconengines\" >nul
|
||||||
if not exist "tls" mkdir "tls"
|
if not exist "tls" mkdir "tls"
|
||||||
copy /Y "%QT_X64_PLUGINS%\tls\*.dll" "tls\" >nul
|
copy /Y "%QT_X64_PLUGINS%\tls\*.dll" "tls\" >nul
|
||||||
|
|
||||||
:: FFTW3 (x64)
|
:: FFTW3 (x64) - Grab from shadow build if present
|
||||||
if exist "%VCPKG_BIN%\fftw3.dll" (
|
if exist "%BUILD_DIR%\vcpkg_installed\x64-windows\bin\fftw3.dll" (
|
||||||
copy /Y "%VCPKG_BIN%\fftw3.dll" . >nul
|
copy /Y "%BUILD_DIR%\vcpkg_installed\x64-windows\bin\fftw3.dll" . >nul
|
||||||
)
|
)
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
echo [SUCCESS] x64 Build Complete.
|
echo [SUCCESS] x64 Build Complete.
|
||||||
|
echo [NOTE] This executable requires an x64 machine or Emulator settings to run.
|
||||||
pause
|
pause
|
||||||
Loading…
Reference in New Issue