Skip to content

Commit e4916c6

Browse files
committed
and finally we have dxcompiler build from nano server ltsc2022; update winsdk-msvc-toolchain.cmake, add atl & mfc, a few hacks with global tmp .gitconfig on CMake configure, redist/msvc.ps1 script
1 parent 1b8b2f7 commit e4916c6

File tree

6 files changed

+108
-20
lines changed

6 files changed

+108
-20
lines changed

.dockerignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
**
1+
**
2+
!redist/**

Dockerfile

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ RUN mkdir C:\Temp && cd C:\Temp `
2929
&& (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
3030
--remove Microsoft.VisualStudio.Component.VC.Tools.x86.x64 `
3131
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.x86.x64 `
32+
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.ATL `
33+
--add Microsoft.VisualStudio.Component.VC.%VC_VERSION%.MFC `
3234
--add Microsoft.VisualStudio.Component.Windows11SDK.%WINDOWS_11_SDK_VERSION% `
3335
--add Microsoft.VisualCpp.DIA.SDK `
3436
--installPath %IMPL_ARTIFACTS_DIR% `
@@ -116,6 +118,7 @@ Remove-Item C:\Temp\git.zip
116118
# ---------------- FINAL IMAGE ----------------
117119
FROM ${IMPL_NANO_BASE}:${IMPL_NANO_TAG}
118120
SHELL ["pwsh", "-NoLogo", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command"]
121+
USER ContainerAdministrator
119122

120123
ARG IMPL_ARTIFACTS_DIR
121124
COPY --link --from=buildtools ["C:/Program Files (x86)/Windows Kits/10", "C:/WindowsKits10SDK"]
@@ -126,6 +129,10 @@ COPY --link --from=ninja ["${IMPL_ARTIFACTS_DIR}", "C:/Ninja"]
126129
COPY --link --from=nasm ["${IMPL_ARTIFACTS_DIR}", "C:/Nasm"]
127130
COPY --link --from=git ["${IMPL_ARTIFACTS_DIR}", "C:/Git"]
128131

132+
COPY redist/msvc.ps1 msvc.ps1
133+
ARG MSVC_VERSION
134+
RUN $REDIST_PATH = 'C:/BuildTools/VC/Redist/MSVC/' + $env:MSVC_VERSION ; pwsh -File msvc.ps1 -RedistPath "$REDIST_PATH" -Arch x64
135+
129136
ARG CMAKE_VERSION
130137
ARG PYTHON_VERSION
131138
ARG NINJA_VERSION
@@ -134,9 +141,8 @@ ARG GIT_VERSION
134141
ARG WINDOWS_11_SDK_VERSION
135142
ARG WINDOWS_SDK_VERSION
136143
ARG VC_VERSION
137-
ARG MSVC_VERSION
138144

139-
USER ContainerAdministrator
145+
140146
ENV CMAKE_WINDOWS_KITS_10_DIR="C:\WindowsKits10SDK" `
141147
CMAKE_VERSION=${CMAKE_VERSION} `
142148
PYTHON_VERSION=${PYTHON_VERSION} `

cmake/winsdk-msvc-toolchain.cmake

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ if("${FOUND}" MATCHES "-1")
2828
message(FATAL_ERROR "MSVC_TOOLSET_DIR is not within VS_INSTANCE_LOCATION, did you move the MSVC toolset directory outside the VS installation? (bad idea!)")
2929
endif()
3030

31-
set(CMAKE_SYSTEM_NAME Windows)
3231
set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR})
3332

3433
if(ARCH)
3534
if(ARCH MATCHES "x64")
3635
elseif(ARCH MATCHES "arm64")
36+
set(CMAKE_SYSTEM_NAME Windows)
3737
set(CMAKE_SYSTEM_PROCESSOR arm64)
3838
# never tested it but I'm pretty sure _COMPILER needs to be updated depending on target ARCH
3939
message(FATAL_ERROR "TODO, Cross compilation requires ARM64 build tools compoment and updates to the toolchain file!")
@@ -49,6 +49,7 @@ set(LIB
4949
"${WINDOWS_KITS_10_DIR}/Lib/${WINDOWS_SDK_VERSION}/ucrt/${ARCH}"
5050
"${WINDOWS_KITS_10_DIR}/Lib/${WINDOWS_SDK_VERSION}/um/${ARCH}"
5151
"${MSVC_TOOLSET_DIR}/lib/${ARCH}"
52+
"${MSVC_TOOLSET_DIR}/atlmfc/lib/${ARCH}"
5253
)
5354

5455
set(INCLUDE
@@ -58,6 +59,7 @@ set(INCLUDE
5859
"${WINDOWS_KITS_10_DIR}/Include/${WINDOWS_SDK_VERSION}/ucrt"
5960
"${WINDOWS_KITS_10_DIR}/Include/${WINDOWS_SDK_VERSION}/um"
6061
"${MSVC_TOOLSET_DIR}/include"
62+
"${MSVC_TOOLSET_DIR}/atlmfc/include"
6163
)
6264

6365
set(ENV{LIB} "${LIB}")
@@ -75,22 +77,24 @@ endfunction()
7577
_VALIDATE_ENV_V_(LIB)
7678
_VALIDATE_ENV_V_(INCLUDE)
7779

78-
set(CMAKE_C_COMPILER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/cl.exe")
79-
set(CMAKE_CXX_COMPILER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/cl.exe")
80-
set(CMAKE_ASM_COMPILER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/cl.exe")
81-
set(CMAKE_ASM_MASM_COMPILER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/ml64.exe")
80+
set(CMAKE_C_COMPILER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/cl.exe" CACHE FILEPATH "")
81+
set(CMAKE_CXX_COMPILER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/cl.exe" CACHE FILEPATH "")
82+
set(CMAKE_ASM_COMPILER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/cl.exe" CACHE FILEPATH "")
83+
set(CMAKE_ASM_MASM_COMPILER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/ml64.exe" CACHE FILEPATH "")
8284
find_program(CMAKE_ASM_NASM_COMPILER nasm HINTS ENV PATH ENV NASM_DIR NO_CACHE REQUIRED)
83-
set(CMAKE_RC_COMPILER "${WINDOWS_KITS_10_DIR}/bin/${WINDOWS_SDK_VERSION}/${ARCH}/rc.exe")
84-
set(CMAKE_LINKER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/link.exe")
85-
set(CMAKE_AR "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/lib.exe")
86-
set(CMAKE_MT "${WINDOWS_KITS_10_DIR}/bin/${WINDOWS_SDK_VERSION}/${ARCH}/mt.exe")
85+
set(CMAKE_ASM_NASM_COMPILER "${CMAKE_ASM_NASM_COMPILER}" CACHE FILEPATH "")
86+
set(CMAKE_RC_COMPILER "${WINDOWS_KITS_10_DIR}/bin/${WINDOWS_SDK_VERSION}/${ARCH}/rc.exe" CACHE FILEPATH "")
87+
set(CMAKE_LINKER "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/link.exe" CACHE FILEPATH "")
88+
set(CMAKE_AR "${MSVC_TOOLSET_DIR}/bin/Host${ARCH}/${ARCH}/lib.exe" CACHE FILEPATH "")
89+
set(CMAKE_MT "${WINDOWS_KITS_10_DIR}/bin/${WINDOWS_SDK_VERSION}/${ARCH}/mt.exe" CACHE FILEPATH "")
8790

8891
macro(_UPDATE_STANDARD_DIRECTORIES_ WHAT VARV)
89-
set(CMAKE_C_STANDARD_${WHAT}_DIRECTORIES ${VARV})
90-
set(CMAKE_CXX_STANDARD_${WHAT}_DIRECTORIES ${VARV})
91-
set(CMAKE_ASM_STANDARD_${WHAT}_DIRECTORIES ${VARV})
92-
set(CMAKE_NASM_STANDARD_${WHAT}_DIRECTORIES ${VARV})
93-
set(CMAKE_MASM_STANDARD_${WHAT}_DIRECTORIES ${VARV})
92+
set(CMAKE_C_STANDARD_${WHAT}_DIRECTORIES ${VARV} CACHE FILEPATH "")
93+
set(CMAKE_CXX_STANDARD_${WHAT}_DIRECTORIES ${VARV} CACHE FILEPATH "")
94+
set(CMAKE_RC_STANDARD_${WHAT}_DIRECTORIES ${VARV} CACHE FILEPATH "")
95+
set(CMAKE_ASM_STANDARD_${WHAT}_DIRECTORIES ${VARV} CACHE FILEPATH "")
96+
set(CMAKE_NASM_STANDARD_${WHAT}_DIRECTORIES ${VARV} CACHE FILEPATH "")
97+
set(CMAKE_MASM_STANDARD_${WHAT}_DIRECTORIES ${VARV} CACHE FILEPATH "")
9498
endmacro()
9599

96100
_UPDATE_STANDARD_DIRECTORIES_(INCLUDE "${INCLUDE}")

redist/msvc.ps1

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
param(
2+
[Parameter(Mandatory=$true)]
3+
[string]$RedistPath,
4+
5+
[Parameter(Mandatory=$true)]
6+
[string]$Arch
7+
)
8+
9+
function Find-DllDirs {
10+
param([string]$BaseDir)
11+
$dllDirs = @()
12+
if (-Not (Test-Path $BaseDir)) {
13+
Write-Warning "Directory does not exist: $BaseDir"
14+
return $dllDirs
15+
}
16+
Get-ChildItem -Path $BaseDir -Recurse -Directory | ForEach-Object {
17+
if (Get-ChildItem -Path $_.FullName -Filter *.dll -File -ErrorAction SilentlyContinue) {
18+
$dllDirs += $_.FullName
19+
}
20+
}
21+
return $dllDirs
22+
}
23+
24+
$RedistPath = Resolve-Path -Path $RedistPath | Select-Object -ExpandProperty Path
25+
26+
$ReleaseBase = Join-Path $RedistPath $Arch
27+
$DebugBase = Join-Path $RedistPath "debug_nonredist\$Arch"
28+
29+
Write-Host "`n[*] Scanning release DLLs in: $ReleaseBase"
30+
$ReleaseDirs = Find-DllDirs -BaseDir $ReleaseBase
31+
32+
Write-Host "`n[*] Scanning debug DLLs in: $DebugBase"
33+
$DebugDirs = Find-DllDirs -BaseDir $DebugBase
34+
35+
if (-Not $ReleaseDirs.Count) {
36+
Write-Error "No release DLL directories found."
37+
exit 2
38+
}
39+
if (-Not $DebugDirs.Count) {
40+
Write-Error "No debug DLL directories found."
41+
exit 3
42+
}
43+
44+
$AllDirs = $ReleaseDirs + $DebugDirs
45+
$EnvVarName = "MSVC_$($Arch.ToUpper())_REDIST_DIRS"
46+
$EnvVarValue = ($AllDirs -join ";")
47+
48+
Write-Host "`n[+] Setting system environment variable $EnvVarName ..."
49+
50+
try {
51+
$regResult = & reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v $EnvVarName /t REG_EXPAND_SZ /d "$EnvVarValue" /f 2>&1
52+
53+
if ($LASTEXITCODE -ne 0) {
54+
throw "reg add failure:`n$regResult"
55+
}
56+
57+
Write-Host " Done."
58+
Write-Host " Value:"
59+
$AllDirs | ForEach-Object { Write-Host " $_" }
60+
} catch {
61+
Write-Error "Failed due to:`n $_"
62+
exit 4
63+
}

tests/3rdparty/CMakeLists.txt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,24 @@ set(CMAKE_FIND_PACKAGE_REDIRECTS_DIR "${CMAKE_CURRENT_BINARY_DIR}/packages/redir
99
file(DOWNLOAD ${CPM_URL} ${CPM_CMAKE} EXPECTED_HASH SHA256=c0fc82149e00c43a21febe7b2ca57b2ffea2b8e88ab867022c21d6b81937eb50) # cmake -E sha256sum CPM.cmake
1010
include(${CPM_CMAKE})
1111

12+
# I'm doing hard assumption here for my tests, no SSH remotes & forced HTTPS
13+
# for the configuration only, note the nano image doesn't rewrite urls
14+
set(ENV{GIT_CONFIG_GLOBAL} "${CMAKE_CURRENT_BINARY_DIR}/.gitconfig")
15+
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/.gitconfig"
16+
[=[
17+
[url "https://github.com/"]
18+
insteadOf = [email protected]:
19+
[safe]
20+
directory = *
21+
]=]
22+
)
23+
1224
CPMAddPackage(NAME libjpeg-turbo URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/97a1575cb877e593cf9940cd869f41b1ddd4a4fd.tar.gz)
1325
CPMAddPackage(NAME blake3 URL https://github.com/BLAKE3-team/BLAKE3/archive/refs/tags/1.6.1.tar.gz DOWNLOAD_ONLY YES)
1426
add_subdirectory("${blake3_SOURCE_DIR}/c")
15-
CPMAddPackage(NAME dxc GITHUB_REPOSITORY Devsh-Graphics-Programming/DirectXShaderCompiler GIT_TAG b2e75826b70d85d03686dd8a755ef477b4fa3807 GIT_SHALLOW YES DOWNLOAD_ONLY YES)
27+
CPMAddPackage(NAME dxc GITHUB_REPOSITORY Devsh-Graphics-Programming/DirectXShaderCompiler GIT_TAG 96a5b5c85ee1ec7e8333d7140e1d2384be4faa02 GIT_SHALLOW YES DOWNLOAD_ONLY YES)
1628

29+
set(DXC_ENABLE_ETW OFF) # this is very important, without disabling this one its impossbile to compile dxcompiler on nano server within its current build system
1730
set(HLSL_OPTIONAL_PROJS_IN_DEFAULT OFF)
1831
set(HLSL_ENABLE_ANALYZE OFF)
1932
set(HLSL_OFFICIAL_BUILD OFF)
@@ -53,7 +66,8 @@ set(SPIRV_SKIP_EXECUTABLES ON)
5366
set(HLSL_ENABLE_DEBUG_ITERATORS ON)
5467

5568
include("${dxc_SOURCE_DIR}/cmake/caches/PredefinedParams.cmake")
56-
add_subdirectory("${dxc_SOURCE_DIR}")
69+
add_subdirectory("${dxc_SOURCE_DIR}" EXCLUDE_FROM_ALL)
70+
set_target_properties(dxcompiler PROPERTIES EXCLUDE_FROM_ALL False)
5771

5872
# old jpeg-turbo doesn't explicilty associate .asm extension with ASM dialect, small patch
5973
get_target_property(TARGET_SOURCE_DIR simd SOURCE_DIR)

tests/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_policy(SET CMP0119 NEW) # https://cmake.org/cmake/help/latest/policy/CMP0119.html#policy:CMP0119
2-
cmake_minimum_required(VERSION 3.30)
2+
cmake_minimum_required(VERSION 3.31.0)
33
project(NanoMSVC CXX C)
44

55
set(CMAKE_CXX_STANDARD 20)

0 commit comments

Comments
 (0)