Skip to content

Commit cde3c03

Browse files
authored
Merge pull request #808 from Devsh-Graphics-Programming/CE
NSC Godbolt Docker based CMake integration
2 parents 2b3bdaa + 76bf038 commit cde3c03

File tree

39 files changed

+668
-1393
lines changed

39 files changed

+668
-1393
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,6 @@
114114
[submodule "3rdparty/libdeflate"]
115115
path = 3rdparty/libdeflate
116116
url = git@github.com:Devsh-Graphics-Programming/libdeflate.git
117+
[submodule "docker/compiler-explorer"]
118+
path = docker/compiler-explorer
119+
url = git@github.com:Devsh-Graphics-Programming/Compiler-Explorer-Docker.git

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: 2 additions & 1 deletion
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
@@ -222,4 +223,4 @@ add_subdirectory(artifacts)
222223
option(NBL_CPACK_INCLUDE_EXAMPLES "CPack with examples and media" ON)
223224
include(cpack/package)
224225

225-
export(TARGETS ${_NBL_3RDPARTY_TARGETS_} Nabla NAMESPACE Nabla:: APPEND FILE ${NBL_ROOT_PATH_BINARY}/NablaExport.cmake)
226+
export(TARGETS ${_NBL_3RDPARTY_TARGETS_} Nabla NAMESPACE Nabla:: APPEND FILE ${NBL_ROOT_PATH_BINARY}/NablaExport.cmake)

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-2025 - 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

0 commit comments

Comments
 (0)