Skip to content

Commit c5a5383

Browse files
committed
Ladies and gentlemen, we officially have a target that will launch a godbolt container itself, use NSC straight from host build directory and can hot-swap in real time
1 parent 0cdd89a commit c5a5383

File tree

3 files changed

+101
-12
lines changed

3 files changed

+101
-12
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

docker/compiler-explorer

Submodule compiler-explorer added at 31269f4

tools/nsc/CMakeLists.txt

Lines changed: 97 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
1-
set(NBL_EXTRA_SOURCES
2-
# TODO: Cypi list extra sources if you need
3-
)
4-
5-
nbl_create_executable_project("${NBL_EXTRA_SOURCES}" "" "" "")
1+
nbl_create_executable_project("" "" "" "")
62

73
enable_testing()
84

9-
set(NBL_NSC_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/tests/install")
10-
set(NBL_NSC_COMPILE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/tests/compile")
5+
set(GODBOLT_BINARY_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/compiler-explorer")
6+
set(GODBOLT_BINARY_PRETEST_DIRECTORY "${GODBOLT_BINARY_DIRECTORY}/pre-test")
7+
set(NBL_NSC_COMPILE_DIRECTORY "${GODBOLT_BINARY_PRETEST_DIRECTORY}/.compile/$<CONFIG>")
8+
set(NBL_DOCKER_CT_NSC_VOLUME_SOURCE "${GODBOLT_BINARY_DIRECTORY}/install")
119

1210
add_test(NAME NBL_NSC_INSTALL_RUNTIMES_TEST
13-
COMMAND "${CMAKE_COMMAND}" --install . --config $<CONFIG> --prefix "${NBL_NSC_INSTALL_PREFIX}" --component Runtimes
11+
COMMAND "${CMAKE_COMMAND}" --install . --config $<CONFIG> --prefix "${NBL_DOCKER_CT_NSC_VOLUME_SOURCE}" --component Runtimes
1412
WORKING_DIRECTORY "${NBL_ROOT_PATH_BINARY}"
1513
COMMAND_EXPAND_LISTS
1614
)
1715

1816
add_test(NAME NBL_NSC_INSTALL_EXECUTABLES_TEST
19-
COMMAND "${CMAKE_COMMAND}" --install . --config $<CONFIG> --prefix "${NBL_NSC_INSTALL_PREFIX}" --component Executables
17+
COMMAND "${CMAKE_COMMAND}" --install . --config $<CONFIG> --prefix "${NBL_DOCKER_CT_NSC_VOLUME_SOURCE}" --component Executables
2018
WORKING_DIRECTORY "${NBL_ROOT_PATH_BINARY}"
2119
COMMAND_EXPAND_LISTS
2220
)
@@ -31,12 +29,99 @@ set(NBL_NSC_COMPILE_COMMAND
3129

3230
add_test(NAME NBL_NSC_COMPILE_AT_EXE_CWD_TEST
3331
COMMAND "$<TARGET_FILE_BASE_NAME:${EXECUTABLE_NAME}>" ${NBL_NSC_COMPILE_COMMAND}
34-
WORKING_DIRECTORY "${NBL_NSC_INSTALL_PREFIX}/${NBL_PACKAGE_RUNTIME_EXE_DIR_PATH}"
32+
WORKING_DIRECTORY "${NBL_DOCKER_CT_NSC_VOLUME_SOURCE}/${NBL_PACKAGE_RUNTIME_EXE_DIR_PATH}"
3533
COMMAND_EXPAND_LISTS
3634
)
3735

3836
add_test(NAME NBL_NSC_COMPILE_CUSTOM_CWD_TEST
3937
COMMAND "${NBL_PACKAGE_RUNTIME_EXE_DIR_PATH}/$<TARGET_FILE_BASE_NAME:${EXECUTABLE_NAME}>" ${NBL_NSC_COMPILE_COMMAND}
40-
WORKING_DIRECTORY "${NBL_NSC_INSTALL_PREFIX}"
38+
WORKING_DIRECTORY "${NBL_DOCKER_CT_NSC_VOLUME_SOURCE}"
4139
COMMAND_EXPAND_LISTS
42-
)
40+
)
41+
42+
set(NBL_DOCKER_NSC_COMPILER_CONFIG_OUTPUT "${NBL_DOCKER_CT_NSC_VOLUME_SOURCE}/hlsl.local.properties.cmake")
43+
44+
set(NBL_DOCKER_CT_NSC_VOLUME_TARGET "C:\\nsc\\install")
45+
string(GENEX_STRIP "${NBL_PACKAGE_RUNTIME_EXE_DIR_PATH}" NBL_RELATIVE_ENTRY)
46+
set(NSC_RELEASE_EXECUTABLE "${NBL_DOCKER_CT_NSC_VOLUME_TARGET}/${NBL_RELATIVE_ENTRY}/${EXECUTABLE_NAME}")
47+
set(NSC_DEBUG_EXECUTABLE "${NBL_DOCKER_CT_NSC_VOLUME_TARGET}/debug/${NBL_RELATIVE_ENTRY}/${EXECUTABLE_NAME}_d")
48+
cmake_path(NATIVE_PATH NSC_RELEASE_EXECUTABLE NORMALIZE NSC_RELEASE_EXECUTABLE)
49+
cmake_path(NATIVE_PATH NSC_DEBUG_EXECUTABLE NORMALIZE NSC_DEBUG_EXECUTABLE)
50+
set(NABLA_SHA "TODO")
51+
52+
string(APPEND CONFIG_CONTENT
53+
[=[
54+
compilers=&dxc
55+
56+
defaultCompiler=nsc_release_upstream
57+
supportsBinary=false
58+
compilerType=hlsl
59+
instructionSet=llvm
60+
61+
group.dxc.compilers=nsc_release_upstream:nsc_debug_upstream
62+
group.dxc.includeFlag=-I
63+
group.dxc.versionFlag=--version
64+
group.dxc.groupName=NSC compilers
65+
66+
compiler.nsc_release_upstream.exe=@NSC_RELEASE_EXECUTABLE@.exe
67+
compiler.nsc_release_upstream.name=NSC (Release)
68+
compiler.nsc_release_upstream.notification=The NSC (Release) has been compiled from following <a href="https://github.com/Devsh-Graphics-Programming/Nabla/commit/@NABLA_SHA@" target="_blank" rel="noopener noreferrer">commit<sup><small class="fas fa-external-link-alt opens-new-window" title="Opens the commit in a new window"></small></sup></a>.
69+
70+
compiler.nsc_debug_upstream.exe=@NSC_DEBUG_EXECUTABLE@.exe
71+
compiler.nsc_debug_upstream.name=NSC (Debug)
72+
compiler.nsc_debug_upstream.notification=The NSC (Debug) has been compiled from following <a href="https://github.com/Devsh-Graphics-Programming/Nabla/commit/@NABLA_SHA@" target="_blank" rel="noopener noreferrer">commit<sup><small class="fas fa-external-link-alt opens-new-window" title="Opens the commit in a new window"></small></sup></a>.
73+
]=]
74+
)
75+
76+
string(CONFIGURE "${CONFIG_CONTENT}" CONFIG_CONTENT @ONLY)
77+
file(WRITE "${NBL_DOCKER_NSC_COMPILER_CONFIG_OUTPUT}" "${CONFIG_CONTENT}")
78+
79+
set(NBL_DOCKER_CE_COMPOSE_BASE "${NBL_ROOT_PATH}/docker/compiler-explorer/compose.yml")
80+
set(NBL_DOCKER_CE_COMPOSE_TARGET "${GODBOLT_BINARY_DIRECTORY}/compose.yml")
81+
82+
include(InstallRequiredSystemLibraries)
83+
84+
string(APPEND COMPOSE_CONTENT
85+
[=[
86+
services:
87+
compiler-explorer-nsc:
88+
extends:
89+
file: @NBL_DOCKER_CE_COMPOSE_BASE@
90+
service: compiler-explorer
91+
container_name: dev.ce.nsc
92+
entrypoint:
93+
- "cmd"
94+
- "/c"
95+
- >
96+
C:\\redist\\vc_redist.x64.exe /quiet /install
97+
&& copy C:\\nsc\\install\\hlsl.local.properties.cmake %GIT_GODBOLT_REPOSITORY_PATH%\\etc\\config\\hlsl.local.properties
98+
&& npm --prefix %GIT_GODBOLT_REPOSITORY_PATH% run dev -- --language hlsl
99+
volumes:
100+
- type: bind
101+
source: .\install
102+
target: @NBL_DOCKER_CT_NSC_VOLUME_TARGET@
103+
- type: bind
104+
source: @MSVC_REDIST_DIR@
105+
target: C:\redist
106+
read_only: true
107+
108+
networks:
109+
docker_default:
110+
external: true
111+
]=]
112+
)
113+
114+
string(CONFIGURE "${COMPOSE_CONTENT}" COMPOSE_CONTENT @ONLY)
115+
file(WRITE "${NBL_DOCKER_CE_COMPOSE_TARGET}" "${COMPOSE_CONTENT}")
116+
117+
add_custom_target(run-compiler-explorer
118+
COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --blue "Performing Pre-Test..."
119+
COMMAND ctest -C $<CONFIG> --stop-on-failure
120+
COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --yellow "Attempt to remove any remaining previous container..."
121+
COMMAND docker compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET}" rm -f
122+
COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green "Starting Compiler Explorer!"
123+
COMMAND docker compose -f "${NBL_DOCKER_CE_COMPOSE_TARGET}" up --build compiler-explorer-nsc
124+
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
125+
)
126+
add_dependencies(run-compiler-explorer nsc)
127+
set_target_properties(run-compiler-explorer PROPERTIES FOLDER "Utilities")

0 commit comments

Comments
 (0)