Skip to content

Commit c463fd7

Browse files
committed
Merge branch 'docker' of github.com:Devsh-Graphics-Programming/Nabla into CE
2 parents 2b3bdaa + 8d044aa commit c463fd7

File tree

33 files changed

+448
-1230
lines changed

33 files changed

+448
-1230
lines changed

3rdparty/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ set(_OLD_SKIP_INSTALL_ALL ${SKIP_INSTALL_ALL})
9090
set(BUILD_SHARED_LIBS OFF)
9191
set(SKIP_INSTALL_ALL ON)
9292

93-
add_subdirectory(zlib zlib EXCLUDE_FROM_ALL)
9493
file(LOCK "${CMAKE_CURRENT_SOURCE_DIR}/zlib" DIRECTORY GUARD PROCESS RESULT_VARIABLE NBL_LOCK TIMEOUT 60)
94+
add_subdirectory(zlib zlib EXCLUDE_FROM_ALL)
9595
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/zlib/zconf.h.included")
9696
execute_process(COMMAND "${CMAKE_COMMAND}" -E rename zconf.h.included zconf.h
9797
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/zlib"

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ enable_language(C CXX ASM ASM_NASM)
1717

1818
if(MSVC)
1919
enable_language(ASM_MASM)
20+
link_libraries(delayimp)
2021
endif()
2122

2223
option(NBL_STATIC_BUILD "" OFF) # ON for static builds, OFF for shared
@@ -223,3 +224,6 @@ option(NBL_CPACK_INCLUDE_EXAMPLES "CPack with examples and media" ON)
223224
include(cpack/package)
224225

225226
export(TARGETS ${_NBL_3RDPARTY_TARGETS_} Nabla NAMESPACE Nabla:: APPEND FILE ${NBL_ROOT_PATH_BINARY}/NablaExport.cmake)
227+
228+
#set(NBL_CONFIG_ROOT_DIRECTORY "C:/Users/arekl/Desktop/ci-nabla-amd64-mt-s-15381bac3a7365231d75b6a000d4064a3ef820cd-win64")
229+
#find_package(Nabla REQUIRED)

cmake/FindNabla.cmake

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Define NBL_CONFIG_ROOT_DIRECTORY
2+
# variable to help the module find
3+
# Nabla package
4+
5+
if(NOT DEFINED CMAKE_CONFIGURATION_TYPES)
6+
set(CMAKE_CONFIGURATION_TYPES Release;RelWithDebInfo;Debug)
7+
endif()
8+
9+
if(NOT DEFINED NBL_PACKAGE_STATIC) # turn ON NBL_PACKAGE_STATIC to look for package with STATIC library type, turn off to look for DYNAMIC
10+
if(${NBL_STATIC_BUILD}) # internal, if called with Nabla's build system it will get detected autoamtically
11+
set(NBL_PACKAGE_STATIC ON)
12+
else()
13+
message(FATAL_ERROR "NBL_PACKAGE_STATIC must be defined!")
14+
endif()
15+
endif()
16+
17+
if(NBL_PACKAGE_STATIC)
18+
set(NBL_LIBRARY_TYPE static)
19+
else()
20+
set(NBL_LIBRARY_TYPE dynamic)
21+
endif()
22+
23+
foreach(X IN LISTS CMAKE_CONFIGURATION_TYPES)
24+
if(NOT "${X}" STREQUAL "")
25+
string(TOLOWER "nabla-${NBL_LIBRARY_TYPE}-${X}" _NBL_TARGET_PACKAGE_)
26+
27+
if(DEFINED NBL_CONFIG_ROOT_DIRECTORY)
28+
file(GLOB_RECURSE _NBL_G_CONFIG_ROOT_DIRECTORY_ "${NBL_CONFIG_ROOT_DIRECTORY}/*/${_NBL_TARGET_PACKAGE_}Config.cmake")
29+
cmake_path(GET _NBL_G_CONFIG_ROOT_DIRECTORY_ PARENT_PATH _NBL_G_CONFIG_ROOT_DIRECTORY_)
30+
else()
31+
unset(_NBL_G_CONFIG_ROOT_DIRECTORY_)
32+
endif()
33+
34+
find_package(${_NBL_TARGET_PACKAGE_} QUIET
35+
GLOBAL
36+
PATHS ${_NBL_G_CONFIG_ROOT_DIRECTORY_}
37+
)
38+
endif()
39+
endforeach()
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
list(TRANSFORM @_NBL_PROXY_@ PREPEND "${CMAKE_CURRENT_LIST_DIR}/")
2+
3+
set(@_NBL_COMPOMENT_D_@ "${CMAKE_CURRENT_LIST_DIR}/@_NBL_COMPOMENT_D_V_@")
4+
5+
include(FindPackageHandleStandardArgs)
6+
find_package_handle_standard_args(@_NBL_PACKAGE_@ DEFAULT_MSG @_NBL_PROXY_@ @_NBL_COMPOMENT_D_@)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
find_package(@_NBL_PACKAGE_@
2+
REQUIRED
3+
CONFIG
4+
GLOBAL
5+
PATHS "${CMAKE_CURRENT_LIST_DIR}/compoment"
6+
NO_DEFAULT_PATH
7+
NO_PACKAGE_ROOT_PATH
8+
NO_CMAKE_PATH
9+
NO_CMAKE_ENVIRONMENT_PATH
10+
NO_SYSTEM_ENVIRONMENT_PATH
11+
NO_CMAKE_PACKAGE_REGISTRY
12+
NO_CMAKE_SYSTEM_PATH
13+
NO_CMAKE_INSTALL_PREFIX
14+
NO_CMAKE_SYSTEM_PACKAGE_REGISTRY
15+
)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Copyright (C) 2018-2040 - DevSH Graphics Programming Sp. z O.O.
2+
# This file is part of the "Nabla Engine".
3+
# For conditions of distribution and use, see copyright notice in nabla.h

cmake/cpack/find/nabla.cmake

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
function(NBL_GEN_FIND_NABLA_COMPONENT_CODE_IMPL _COMPOMENT_ _SPATH_)
2+
string(APPEND NBL_FIND_NABLA_IMPL "set(_COMPOMENT_ ${_COMPOMENT_})\nset(_SPATH_ ${_SPATH_})\nset(NBL_ROOT_PATH ${NBL_ROOT_PATH})\nset(NBL_STATIC_BUILD ${NBL_STATIC_BUILD})\n\n")
3+
string(APPEND NBL_FIND_NABLA_IMPL
4+
[=[
5+
if(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Dd][Ee][Bb][Uu][Gg])$")
6+
set(NBL_CONFIG_PREFIX_PATH debug)
7+
elseif(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Rr][Ee][Ll][Ww][Ii][Tt][Hh][Dd][Ee][Bb][Ii][Nn][Ff][Oo])$")
8+
set(NBL_CONFIG_PREFIX_PATH relwithdebinfo)
9+
elseif(CMAKE_INSTALL_CONFIG_NAME MATCHES "^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$")
10+
unset(NBL_CONFIG_PREFIX_PATH)
11+
else()
12+
message(FATAL_ERROR "Internal error, requested \"${CMAKE_INSTALL_CONFIG_NAME}\" configuration is invalid!")
13+
endif()
14+
15+
string(TOUPPER "${_COMPOMENT_}" _Cu_)
16+
string(TOLOWER "${_COMPOMENT_}" _Cl_)
17+
18+
string(TOUPPER "${_SPATH_}" _Su_)
19+
string(TOLOWER "${_SPATH_}" _Sl_)
20+
21+
string(TOUPPER "${CMAKE_INSTALL_CONFIG_NAME}" _NBL_CONFIG_)
22+
string(TOLOWER "${CMAKE_INSTALL_CONFIG_NAME}" _NBL_CONFIG_L_)
23+
24+
if(NBL_STATIC_BUILD)
25+
set(NBL_LIBRARY_TYPE STATIC)
26+
else()
27+
set(NBL_LIBRARY_TYPE DYNAMIC)
28+
endif()
29+
30+
string(TOUPPER "${NBL_LIBRARY_TYPE}" _LTu_)
31+
string(TOLOWER "${NBL_LIBRARY_TYPE}" _LTl_)
32+
33+
set(_NBL_PACKAGE_ nabla-${_Cl_}-${_LTl_}-${_NBL_CONFIG_L_})
34+
set(_NBL_COMPLETE_P_CONFIG_ nabla-${_LTl_}-${_NBL_CONFIG_L_})
35+
36+
set(NBL_CMAKE_OUTPUT_DIRECTORY "${CMAKE_INSTALL_PREFIX}/${NBL_CONFIG_PREFIX_PATH}/cmake")
37+
set(NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY "${NBL_CMAKE_OUTPUT_DIRECTORY}/compoment")
38+
39+
string(REPLACE "${CMAKE_INSTALL_PREFIX}" "" NBL_CMAKE_INSTALL_MANIFEST_CONTENT "${CMAKE_INSTALL_MANIFEST_FILES}")
40+
list(REMOVE_DUPLICATES NBL_CMAKE_INSTALL_MANIFEST_CONTENT)
41+
42+
set(_NBL_PREFIX_ "${CMAKE_INSTALL_PREFIX}/${NBL_CONFIG_PREFIX_PATH}")
43+
44+
set(NBL_CMAKE_COMPOMENT_OUTPUT_FILE "${NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY}/${_NBL_PACKAGE_}Config.cmake")
45+
set(NBL_CMAKE_CONFIG_OUTPUT_FILE "${NBL_CMAKE_OUTPUT_DIRECTORY}/${_NBL_COMPLETE_P_CONFIG_}Config.cmake")
46+
47+
cmake_path(RELATIVE_PATH CMAKE_INSTALL_PREFIX BASE_DIRECTORY "${NBL_CMAKE_COMPOMENT_OUTPUT_DIRECTORY}" OUTPUT_VARIABLE _NBL_REL_TO_PREFIX_)
48+
49+
set(_NBL_PROXY_ NABLA_INSTALL_${_Cu_}_${_LTu_}_${_NBL_CONFIG_})
50+
set(_NBL_COMPOMENT_D_ "NABLA_INSTALL_${_Cu_}_DIRECTORY_${_LTu_}_${_NBL_CONFIG_}")
51+
set(_NBL_COMPOMENT_D_V_ "${_NBL_REL_TO_PREFIX_}")
52+
53+
foreach(_MANIFEST_INSTALL_REL_FILE_ IN LISTS NBL_CMAKE_INSTALL_MANIFEST_CONTENT)
54+
string(FIND "${_MANIFEST_INSTALL_REL_FILE_}" "/${_SPATH_}/" _NBL_FOUND_)
55+
56+
if(NOT "${_NBL_FOUND_}" STREQUAL "-1")
57+
set(_X_ "${_NBL_REL_TO_PREFIX_}/${_MANIFEST_INSTALL_REL_FILE_}")
58+
cmake_path(NORMAL_PATH _X_ OUTPUT_VARIABLE _X_)
59+
60+
list(APPEND ${_NBL_PROXY_} "${_X_}")
61+
endif()
62+
endforeach()
63+
64+
string(APPEND NBL_MANIFEST_IMPL "set(${_NBL_PROXY_}\n\t${${_NBL_PROXY_}}\n)")
65+
string(REPLACE ";" "\n\t" NBL_MANIFEST_IMPL "${NBL_MANIFEST_IMPL}")
66+
string(CONFIGURE "${NBL_MANIFEST_IMPL}" NBL_MANIFEST_IMPL_CONF)
67+
file(WRITE "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}" "${NBL_MANIFEST_IMPL_CONF}")
68+
69+
# the reason behind this weird looking thing is you cannot nest bracket arguments https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#bracket-argument
70+
# some variables need evaluation but some not and must be literals, to make this code read-able & work we do a small workaround
71+
72+
# Compoment
73+
configure_file("${NBL_ROOT_PATH}/cmake/cpack/find/compoment/template.cmake" "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp" @ONLY)
74+
file(READ "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp" _NBL_COMPOMENT_INCLUDE_LIST_TRANFORM_)
75+
file(REMOVE "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}.tmp")
76+
file(APPEND "${NBL_CMAKE_COMPOMENT_OUTPUT_FILE}" "\n${_NBL_COMPOMENT_INCLUDE_LIST_TRANFORM_}")
77+
78+
# Config
79+
if(NOT EXISTS "${NBL_CMAKE_CONFIG_OUTPUT_FILE}")
80+
file(READ "${NBL_ROOT_PATH}/cmake/cpack/find/licence/template.cmake" _NBL_LICENCE_)
81+
file(APPEND "${NBL_CMAKE_CONFIG_OUTPUT_FILE}" "${_NBL_LICENCE_}")
82+
endif()
83+
84+
configure_file("${NBL_ROOT_PATH}/cmake/cpack/find/config/template.cmake" "${NBL_CMAKE_CONFIG_OUTPUT_FILE}.tmp" @ONLY)
85+
file(READ "${NBL_CMAKE_CONFIG_OUTPUT_FILE}.tmp" _NBL_CONFIG_FILE_CONTENT_)
86+
file(REMOVE "${NBL_CMAKE_CONFIG_OUTPUT_FILE}.tmp")
87+
file(APPEND "${NBL_CMAKE_CONFIG_OUTPUT_FILE}" "\n\n${_NBL_CONFIG_FILE_CONTENT_}")
88+
]=]
89+
)
90+
91+
install(CODE "${NBL_FIND_NABLA_IMPL}" COMPONENT ${_COMPOMENT_})
92+
endfunction()
93+
94+
# Generate compoment configurations
95+
NBL_GEN_FIND_NABLA_COMPONENT_CODE_IMPL(Headers include)
96+
NBL_GEN_FIND_NABLA_COMPONENT_CODE_IMPL(Libraries lib)
97+
NBL_GEN_FIND_NABLA_COMPONENT_CODE_IMPL(Runtimes runtime)

cmake/cpack/package.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,5 @@ set(CPACK_COMPONENT_HEADERS_DEPENDS Libraries Runtimes)
8787

8888
set(CPACK_THREADS 0) # try to use all threads for compression
8989

90-
include(CPack)
90+
include(CPack)
91+
include("${CMAKE_CURRENT_LIST_DIR}/find/nabla.cmake")

docker/.env

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
THIS_PROJECT_WORKING_DIRECTORY=C:\docker
2+
THIS_PROJECT_NABLA_DIRECTORY=C:/Users/ContainerAdministrator/Nabla/bind

docker/Dockerfile

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# escape=`
2+
3+
ARG BASE_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2022-amd64
4+
5+
FROM ${BASE_IMAGE}
6+
7+
SHELL ["cmd", "/S", "/C"]
8+
9+
USER ContainerAdministrator
10+
11+
ENV THIS_PROJECT_WORKING_DIRECTORY="C:\docker"
12+
ENV THIS_PROJECT_NABLA_DIRECTORY="C:/Users/ContainerAdministrator/Nabla/bind"
13+
ENV VULKAN_SDK_INSTALL_DIRECTORY="${THIS_PROJECT_WORKING_DIRECTORY}\dependencies\VulkanSDK"
14+
ENV VS_INSTALL_DIRECTORY="${THIS_PROJECT_WORKING_DIRECTORY}\dependencies\VS\BuildTools"
15+
16+
RUN `
17+
# Download the Build Tools (17.11.5 October 8, 2024 version) bootstrapper. https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-history
18+
`
19+
curl -SL --output vs_buildtools.exe https://download.visualstudio.microsoft.com/download/pr/69e24482-3b48-44d3-af65-51f866a08313/471c9a89fa8ba27d356748ae0cf25eb1f362184992dc0bb6e9ccf10178c43c27/vs_BuildTools.exe `
20+
`
21+
# Install Build Tools with the Microsoft.VisualStudio.Workload.VCTools recommended workload and ATL & ATLMFC, excluding some Windows SDKs.
22+
`
23+
&& (start /w vs_buildtools.exe --quiet --wait --norestart --nocache `
24+
--installPath "%VS_INSTALL_DIRECTORY%" `
25+
--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended `
26+
--add Microsoft.VisualStudio.Component.VC.ATL `
27+
--add Microsoft.VisualStudio.Component.VC.ATLMFC `
28+
--remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
29+
--remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
30+
--remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
31+
--remove Microsoft.VisualStudio.Component.Windows81SDK `
32+
|| IF "%ERRORLEVEL%"=="3010" EXIT 0) `
33+
`
34+
# Add VS's CMake to the system PATH and cleanup
35+
`
36+
&& setx PATH "%PATH%;%VS_INSTALL_DIRECTORY%\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin" /M `
37+
`
38+
# Cleanup
39+
`
40+
&& del /q vs_buildtools.exe
41+
42+
ENV VS_DEV_CMD_DIRECTORY="${VS_INSTALL_DIRECTORY}\Common7\Tools"
43+
44+
RUN `
45+
# Add VS_DEV_CMD_DIRECTORY to the system PATH
46+
`
47+
setx PATH "%PATH%;%VS_DEV_CMD_DIRECTORY%" /M
48+
49+
RUN `
50+
# Download VulkanSDK
51+
`
52+
curl -SL --output VulkanSDK-Installer.exe https://sdk.lunarg.com/sdk/download/1.3.268.0/windows/VulkanSDK-1.3.268.0-Installer.exe `
53+
`
54+
# Install VulkanSDK
55+
`
56+
&& VulkanSDK-Installer.exe install --root "%VULKAN_SDK_INSTALL_DIRECTORY%" --default-answer --accept-licenses --confirm-command `
57+
`
58+
# Cleanup
59+
`
60+
&& del /q VulkanSDK-Installer.exe
61+
62+
RUN `
63+
# Download & install choco packet manager
64+
`
65+
powershell Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
66+
67+
RUN `
68+
# Download & install executable Strawberry Perl
69+
`
70+
choco install -y strawberryperl --version 5.28.2.1
71+
72+
RUN `
73+
# Download & install Python
74+
`
75+
choco install -y python --version 3.11.6
76+
77+
RUN `
78+
# Download & install git
79+
`
80+
choco install -y git --version 2.43.0
81+
82+
RUN `
83+
# Download & install nasm
84+
`
85+
choco install -y nasm --version 2.16.1
86+
87+
RUN `
88+
# Download & install ninja
89+
`
90+
choco install -y ninja --version 1.12.1
91+
92+
RUN `
93+
# Enable Long Paths feature
94+
`
95+
reg add "HKLM\SYSTEM\CurrentControlSet\Control\FileSystem" /v "LongPathsEnabled" /t REG_DWORD /d 1 /f
96+
97+
RUN `
98+
# Force git to use HTTPS protocol & trust containers
99+
`
100+
git config --system protocol.*.allow always `
101+
`
102+
&& git config --system url."https://github.com/".insteadOf "git@github.com:" `
103+
`
104+
&& git config --system --add safe.directory *
105+
106+
RUN `
107+
# Post environment setup
108+
`
109+
setx VS_INSTALL_DIRECTORY "%VS_INSTALL_DIRECTORY%" /M `
110+
`
111+
&& setx PATH "%PATH%;%VS_INSTALL_DIRECTORY%\VC\Auxiliary\Build" /M `
112+
`
113+
&& setx NBL_CI_MODE "ON"
114+
115+
WORKDIR ${THIS_PROJECT_NABLA_DIRECTORY}
116+
117+
COPY --from=dcr.devsh.eu/nabla/source/git-cache:latest /gitcache/.git ./.git
118+
119+
ENTRYPOINT ["cmd.exe", "/K"]

0 commit comments

Comments
 (0)