From 754249d9c652ef941e6b082d2e86538d15ba9434 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Tue, 5 May 2026 00:29:41 +0200 Subject: Remove cmake and vcpkg, use a batch file instead --- .gitignore | 4 +- .gitmodules | 6 -- CMakeLists.txt | 35 --------- api-test/CMakeLists.txt | 32 -------- build.bat | 105 +++++++++++++++++++-------- scripts/ninjatracing.py | 189 ------------------------------------------------ shaders/CMakeLists.txt | 27 ------- src/CMakeLists.txt | 82 --------------------- vcpkg | 1 - vcpkg.json | 8 -- 10 files changed, 78 insertions(+), 411 deletions(-) delete mode 100644 .gitmodules delete mode 100644 CMakeLists.txt delete mode 100644 api-test/CMakeLists.txt delete mode 100644 scripts/ninjatracing.py delete mode 100644 shaders/CMakeLists.txt delete mode 100644 src/CMakeLists.txt delete mode 160000 vcpkg delete mode 100644 vcpkg.json diff --git a/.gitignore b/.gitignore index 6565d3d..2edf5e5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ -/build +/build* /out /.vs /.cache +/vcpkg +/tracy compile_commands.json diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e1fdc4f..0000000 --- a/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "vcpkg"] - path = vcpkg - url = git@github.com:microsoft/vcpkg.git -[submodule "tracy"] - path = tracy - url = git@github.com:wolfpld/tracy.git diff --git a/CMakeLists.txt b/CMakeLists.txt deleted file mode 100644 index c36dc38..0000000 --- a/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -cmake_minimum_required(VERSION 3.10) - -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file") - -project(path-tracer VERSION 1.0 LANGUAGES CXX) - - -find_package(imgui CONFIG REQUIRED) -find_package(nlohmann_json CONFIG REQUIRED) -find_package(Vulkan REQUIRED) - -if(UNIX AND NOT APPLE) - find_package(X11 REQUIRED) -endif() - -# find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck) -# if (CMAKE_CXX_CPPCHECK) -# file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/cppcheck) -# -# list( -# APPEND CMAKE_CXX_CPPCHECK -# "--project=${CMAKE_BINARY_DIR}/compile_commands.json" -# "--cppcheck-build-dir=${CMAKE_BINARY_DIR}/cppcheck" -# "--enable=all" -# "-ithirdparty" -# ) -# endif() - -add_subdirectory(src) -add_subdirectory(api-test) -add_subdirectory(shaders) diff --git a/api-test/CMakeLists.txt b/api-test/CMakeLists.txt deleted file mode 100644 index d8ae739..0000000 --- a/api-test/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -add_executable( - api-test - main.cpp - vk-device.cpp - vk-command-buffer.cpp - vk-bindless.cpp - vk-utils.cpp - dx12-device.cpp - dx12-command-buffer.cpp - ${CMAKE_SOURCE_DIR}/thirdparty/D3D12MemAlloc.cpp - ${CMAKE_SOURCE_DIR}/src/window.cpp - ${CMAKE_SOURCE_DIR}/src/utils.cpp - ${CMAKE_SOURCE_DIR}/src/vulkan-loader.cpp - ${CMAKE_SOURCE_DIR}/src/gltf.cpp - ${CMAKE_SOURCE_DIR}/src/vec3.cpp - ${CMAKE_SOURCE_DIR}/src/mesh.cpp - ${CMAKE_SOURCE_DIR}/src/scene.cpp - ${CMAKE_SOURCE_DIR}/src/camera.cpp - ${CMAKE_SOURCE_DIR}/src/bvh.cpp -) - -target_compile_definitions(api-test PUBLIC WINDOWS VK_NO_PROTOTYPES VK_USE_PLATFORM_WIN32_KHR API_TEST NOMINMAX) - -target_compile_options(api-test - PRIVATE -Wall -Wextra -msse4.1 -) - -target_include_directories(api-test SYSTEM PUBLIC ${Vulkan_INCLUDE_DIRS}) -target_include_directories(api-test SYSTEM PUBLIC ${CMAKE_SOURCE_DIR}/thirdparty) -target_include_directories(api-test PUBLIC ${CMAKE_SOURCE_DIR}/include) -target_include_directories(api-test PUBLIC ${CMAKE_SOURCE_DIR}/include/api-test) -target_link_libraries(api-test PRIVATE imgui::imgui dxgi d3d12) diff --git a/build.bat b/build.bat index 918f089..c2c9018 100644 --- a/build.bat +++ b/build.bat @@ -1,7 +1,7 @@ @ECHO OFF :: Unpack Arguments -set release=0 +set RELEASE=0 for %%a in (%*) do set "%%a=1" set BUILD_DIR=build_rel @@ -11,45 +11,90 @@ if "%release%"=="0" ( ) :: clean directory -:: IF EXIST %BUILD_DIR% rmdir %BUILD_DIR%\ /S /Q +IF EXIST %BUILD_DIR% rmdir %BUILD_DIR%\ /S /Q IF NOT EXIST %BUILD_DIR% mkdir %BUILD_DIR% IF NOT EXIST %BUILD_DIR%\shaders mkdir %BUILD_DIR%\shaders -:: set C_FLAGS=/nologo /W4 /WX /Zi /Fo:%BUILD_DIR%\ /Iinclude /Iinclude\api-test /I%VULKAN_SDK%\Include /Ithirdparty /Ithirdparty\imgui-1.92.5 /std:c++latest /DWINDOWS /DNOMINMAX /c /Tp -:: set C_FLAGS=/nologo /W4 /Zi /Fo:%BUILD_DIR%\ /Iinclude /Iinclude\api-test /I%VULKAN_SDK%\Include /imsvcthirdparty /Ithirdparty /Ithirdparty\imgui-1.92.5 /std:c++latest /DWINDOWS /DNOMINMAX /c /Tp - -:: showincludes -:: set C_FLAGS=/nologo /showIncludes /W4 /Zi /Fo:%BUILD_DIR%\ /Iinclude /Iinclude\api-test /I%VULKAN_SDK%\Include /external:W0 /external:Ithirdparty /external:Ithirdparty\imgui-1.92.5 /std:c++latest /DWINDOWS /DNOMINMAX /c /Tp -set C_FLAGS=/nologo /W4 /Zi /Fo:%BUILD_DIR%\ /Iinclude /Iinclude\api-test /I%VULKAN_SDK%\Include /external:W0 /external:Ithirdparty /external:Ithirdparty\imgui-1.92.5 /std:c++latest /DWINDOWS /DNOMINMAX /c /Tp -set SHADER_FLAGS=-I shaders\include -std=460 -:: set C_FLAGS=/nologo /W4 /Zi /Fo:%BUILD_DIR%\ /Iinclude /Iinclude\api-test /imsvcthirdparty /Ithirdparty\imgui-1.92.5 /std:c++latest /DDX12 /DWINDOWS /DNOMINMAX /c /Tp -REM set L_FLAGS=/WX /SUBSYSTEM:CONSOLE /NODEFAULTLIB /stack:0x100000,100000 + + +set MSVC=1 +set CLANG=0 +set C_COMPILER=cl +if %MSVC% EQU 1 ( + if %CLANG% EQU 1 ( + set C_COMPILER=clang-cl + ) +) else ( + set CLANG=1 + set C_COMPILER=clang +) + +set C_FLAGS= +set L_FLAGS=/WX /SUBSYSTEM:CONSOLE /stack:0x10000000,10000000 +:: set L_FLAGS=/WX /SUBSYSTEM:CONSOLE /NODEFAULTLIB /stack:0x100000,100000 :: set L_FLAGS=/WX /SUBSYSTEM:CONSOLE /NODEFAULTLIB -set L_FLAGS=/WX /SUBSYSTEM:CONSOLE -if "%release%"=="0" ( - set C_FLAGS=/DDEBUG /Od %C_FLAGS% - set SHADER_FLAGS=-O0 -g %SHADER_FLAGS% - set L_FLAGS=/DEBUG %L_FLAGS% +set SHADERS_C_FLAGS=-I shaders\include -std=460 + +set DEBUG_C_FLAGS= +set DEBUG_L_FLAGS= +set RELEASE_C_FLAGS= + +if %MSVC% EQU 1 ( + set C_FLAGS=/nologo /W4 /WX /Zi /Fo:%BUILD_DIR%\ /Iinclude /Iinclude\api-test /I%VULKAN_SDK%\Include /external:W0 /external:Ithirdparty /external:Ithirdparty\imgui /std:c++20 /DNOMINMAX /EHsc /c /Tp + + set DEBUG_C_FLAGS=/DDEBUG /Od + set RELEASE_C_FLAGS=/DNDEBUG /O2 + set DEBUG_L_FLAGS=/DEBUG +) else ( + set C_FLAGS=--target=x86_64-pc-windows-msvc -pedantic -I include -I include\api-test -I %VULKAN_SDK%\Include -isystem thirdparty -isystem thirdparty\imgui -std=c++20 -DNOMINMAX -c -msse4.1 -Wno-missing-designated-field-initializers + + set DEBUG_C_FLAGS=-DDEBUG -g -O0 + set RELEASE_C_FLAGS=-DNDEBUG -O2 +) + + +if %RELEASE% EQU 0 ( + set C_FLAGS=%DEBUG_C_FLAGS% %C_FLAGS% + set L_FLAGS=%DEBUG_L_FLAGS% %L_FLAGS% + set SHADERS_C_FLAGS = -O0 -g %SHADERS_C_FLAGS% +) else ( + set C_FLAGS=%RELEASE_C_FLAGS% %C_FLAGS% + set SHADERS_C_FLAGS=-O %SHADERS_C_FLAGS% +) + + +if 0 EQU 1 ( + set C_FLAGS=/showIncludes %C_FLAGS% ) -:compilation +:: compiles each compilation unit to an obj :: set imgui_src=imgui imgui_draw imgui_tables imgui_widgets -set src=window vec3 camera scene vulkan-loader utils bvh gltf mesh +:: set src=window vec3 camera scene vulkan-loader utils bvh gltf mesh :: set api=main vk-utils vk-device vk-bindless vk-command-buffer -set api=main -set shaders=ui.vert ui.frag test.comp compute.comp api-test-ui.vert api-test-ui.frag tonemapping.comp transmittance_lut.comp -:: set src=main dx12-device dx12-command-buffer +:: set src=main dx12-device dx12-command-buffer +:: (for %%s in (%api%) do ( +:: call set OBJS=%%OBJS%% %BUILD_DIR%\%%s.obj +:: echo %C_COMPILER% /Fd:%BUILD_DIR%\%%s.pdb %C_FLAGS% api-test\%%s.cpp +:: %C_COMPILER% /Fd:%BUILD_DIR%\%%s.pdb %C_FLAGS% api-test\%%s.cpp +:: )) +:: link multiple objs +:: link %L_FLAGS% /OUT:%BUILD_DIR%\main.exe %OBJS% kernel32.lib user32.lib -(for %%s in (%api%) do ( - call set OBJS=%%OBJS%% %BUILD_DIR%\%%s.obj - cl /Fd:%BUILD_DIR%\%%s.pdb %C_FLAGS% api-test\%%s.cpp -)) +:: compiles the project as a single compilation unit +if %MSVC% EQU 1 ( + echo %C_COMPILER% /Fd:%BUILD_DIR%\main.pdb %C_FLAGS% api-test\main.cpp + %C_COMPILER% /Fd:%BUILD_DIR%\main.pdb %C_FLAGS% api-test\main.cpp +) else ( + echo %C_COMPILER% -o %BUILD_DIR%\main.obj %C_FLAGS% api-test\main.cpp + %C_COMPILER% -o %BUILD_DIR%\main.obj %C_FLAGS% api-test\main.cpp +) + +link %L_FLAGS% /OUT:%BUILD_DIR%\main.exe %BUILD_DIR%\main.obj kernel32.lib user32.lib shlwapi.lib + +set shaders=ui.vert ui.frag test.comp compute.comp api-test-ui.vert api-test-ui.frag tonemapping.comp transmittance_lut.comp (for %%s in (%shaders%) do ( - glslc.exe -o %BUILD_DIR%\shaders\%%s.spv %SHADER_FLAGS% shaders\%%s + echo glslc.exe -o %BUILD_DIR%\shaders\%%s.spv %SHADER_FLAGS% shaders\%%s + glslc.exe -o %BUILD_DIR%\shaders\%%s.spv %SHADERS_C_FLAGS% shaders\%%s )) - :: clang-cl /Fd:%BUILD_DIR%\%%s.pdb %C_FLAGS% api-test\%%s.cpp - -:: link -link %L_FLAGS% /OUT:%BUILD_DIR%\main.exe %OBJS% kernel32.lib diff --git a/scripts/ninjatracing.py b/scripts/ninjatracing.py deleted file mode 100644 index 98461cb..0000000 --- a/scripts/ninjatracing.py +++ /dev/null @@ -1,189 +0,0 @@ -#!/usr/bin/env python -# Copyright 2018 Nico Weber -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -"""Converts one (or several) .ninja_log files into chrome's about:tracing format. - -If clang -ftime-trace .json files are found adjacent to generated files they -are embedded. - -Usage: - ninja -C $BUILDDIR - ninjatracing $BUILDDIR/.ninja_log > trace.json -""" - -from __future__ import print_function -import json -import os -import optparse -import re -import sys - - -class Target: - """Represents a single line read for a .ninja_log file. Start and end times - are milliseconds.""" - def __init__(self, start, end): - self.start = int(start) - self.end = int(end) - self.targets = [] - - -def read_targets(log, show_all): - """Reads all targets from .ninja_log file |log_file|, sorted by start - time""" - header = log.readline() - m = re.search(r'^# ninja log v(\d+)\n$', header) - assert m, "unrecognized ninja log version %r" % header - version = int(m.group(1)) - assert 5 <= version <= 6, "unsupported ninja log version %d" % version - if version == 6: - # Skip header line - next(log) - - targets = {} - last_end_seen = 0 - for line in log: - start, end, _, name, cmdhash = line.strip().split('\t') # Ignore restat. - if not show_all and int(end) < last_end_seen: - # An earlier time stamp means that this step is the first in a new - # build, possibly an incremental build. Throw away the previous data - # so that this new build will be displayed independently. - targets = {} - last_end_seen = int(end) - targets.setdefault(cmdhash, Target(start, end)).targets.append(name) - return sorted(targets.values(), key=lambda job: job.end, reverse=True) - - -class Threads: - """Tries to reconstruct the parallelism from a .ninja_log""" - def __init__(self): - self.workers = [] # Maps thread id to time that thread is occupied for. - - def alloc(self, target): - """Places target in an available thread, or adds a new thread.""" - for worker in range(len(self.workers)): - if self.workers[worker] >= target.end: - self.workers[worker] = target.start - return worker - self.workers.append(target.start) - return len(self.workers) - 1 - - -def read_events(trace, options): - """Reads all events from time-trace json file |trace|.""" - trace_data = json.load(trace) - - def include_event(event, options): - """Only include events if they are complete events, are longer than - granularity, and are not totals.""" - return ((event['ph'] == 'X') and - (event['dur'] >= options['granularity']) and - (not event['name'].startswith('Total'))) - - return [x for x in trace_data['traceEvents'] if include_event(x, options)] - - -def trace_to_dicts(target, trace, options, pid, tid): - """Read a file-like object |trace| containing -ftime-trace data and yields - about:tracing dict per eligible event in that log.""" - ninja_time = (target.end - target.start) * 1000 - for event in read_events(trace, options): - # Check if any event duration is greater than the duration from ninja. - if event['dur'] > ninja_time: - print("Inconsistent timing found (clang time > ninja time). Please" - " ensure that timings are from consistent builds.") - sys.exit(1) - - # Set tid and pid from ninja log. - event['pid'] = pid - event['tid'] = tid - - # Offset trace time stamp by ninja start time. - event['ts'] += (target.start * 1000) - - yield event - - -def embed_time_trace(ninja_log_dir, target, pid, tid, options): - """Produce time trace output for the specified ninja target. Expects - time-trace file to be in .json file named based on .o file.""" - for t in target.targets: - o_path = os.path.join(ninja_log_dir, t) - json_trace_path = os.path.splitext(o_path)[0] + '.json' - try: - with open(json_trace_path, 'r') as trace: - for time_trace_event in trace_to_dicts(target, trace, options, - pid, tid): - yield time_trace_event - except IOError: - pass - - -def log_to_dicts(log, pid, options): - """Reads a file-like object |log| containing a .ninja_log, and yields one - about:tracing dict per command found in the log.""" - threads = Threads() - for target in read_targets(log, options['showall']): - tid = threads.alloc(target) - - yield { - 'name': '%0s' % ', '.join(target.targets), 'cat': 'targets', - 'ph': 'X', 'ts': (target.start * 1000), - 'dur': ((target.end - target.start) * 1000), - 'pid': pid, 'tid': tid, 'args': {}, - } - if options.get('embed_time_trace', False): - # Add time-trace information into the ninja trace. - try: - ninja_log_dir = os.path.dirname(log.name) - except AttributeError: - continue - for time_trace in embed_time_trace(ninja_log_dir, target, pid, - tid, options): - yield time_trace - - -def main(argv): - usage = __doc__ - parser = optparse.OptionParser(usage) - parser.add_option('-a', '--showall', action='store_true', dest='showall', - default=False, - help='report on last build step for all outputs. Default ' - 'is to report just on the last (possibly incremental) ' - 'build') - parser.add_option('-g', '--granularity', type='int', default=50000, - dest='granularity', - help='minimum length time-trace event to embed in ' - 'microseconds. Default: %default') - parser.add_option('-e', '--embed-time-trace', action='store_true', - default=False, dest='embed_time_trace', - help='embed clang -ftime-trace json file found adjacent ' - 'to a target file') - (options, args) = parser.parse_args() - - if len(args) == 0: - print('Must specify at least one .ninja_log file') - parser.print_help() - return 1 - - entries = [] - for pid, log_file in enumerate(args): - with open(log_file, 'r') as log: - entries += list(log_to_dicts(log, pid, vars(options))) - json.dump(entries, sys.stdout) - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/shaders/CMakeLists.txt b/shaders/CMakeLists.txt deleted file mode 100644 index 8f6985f..0000000 --- a/shaders/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -file(GLOB_RECURSE GLSL_SOURCE_FILES - "./*.frag" - "./*.vert" - "./*.geom" - "./*.comp" - "./*.glsl" -) - -message(STATUS ${GLSL_SOURCE_FILES}) - -foreach(GLSL ${GLSL_SOURCE_FILES}) - get_filename_component(FILE_NAME ${GLSL} NAME) - set(SPIRV "${PROJECT_BINARY_DIR}/shaders/${FILE_NAME}.spv") - add_custom_command( - OUTPUT ${SPIRV} - COMMAND glslc --target-env=vulkan1.2 -g -O -std=460 ${GLSL} -o ${SPIRV} -I "../../shaders/include" # relative to build directory - DEPENDS ${GLSL}) - list(APPEND SPIRV_BINARY_FILES ${SPIRV}) -endforeach(GLSL) - -add_custom_target( - shaders - DEPENDS ${SPIRV_BINARY_FILES} -) - -add_dependencies(path-tracer shaders) -add_dependencies(api-test shaders) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt deleted file mode 100644 index d482ddf..0000000 --- a/src/CMakeLists.txt +++ /dev/null @@ -1,82 +0,0 @@ -set(LIBRARIES imgui::imgui) - -set(DEFINES -DNOMINMAX -D_USE_MATH_DEFINES -DVK_NO_PROTOTYPES TRACY_ENABLE) - -if(UNIX AND NOT APPLE) - set(DEFINES ${DEFINES} -DLINUX -DVK_USE_PLATFORM_XCB_KHR) -elseif(WIN32) - set(DEFINES ${DEFINES} -DWINDOWS -DVK_USE_PLATFORM_WIN32_KHR) -elseif(APPLE) - set(DEFINES ${DEFINES} -DMACOS -DVK_USE_PLATFORM_METAL_EXT) -endif() - - -add_executable( - path-tracer - main.cpp - vec3.cpp - color.cpp - camera.cpp - vulkan-loader.cpp - utils.cpp - vk-renderer.cpp - vk-context.cpp - vk-api.cpp - window.cpp - scene.cpp - gltf.cpp - compute-renderpass.cpp - primitive-renderpass.cpp - bvh.cpp - mesh.cpp - resource-manager.cpp - - ${CMAKE_SOURCE_DIR}/tracy/public/TracyClient.cpp -) - -if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - target_compile_options( - path-tracer - PRIVATE - # -fsanitize=address TODO: enable once compiling with the flag works - -fcolor-diagnostics -fansi-escape-codes # colored output when using ninja - -ftime-trace - -msse4.1 - # https://github.com/cpp-best-practices/cppbestpractices/blob/master/02-Use_the_Tools_Available.md#gcc--clang - -Wall - -Wextra - -Wshadow - -Wcast-align - -Wnon-virtual-dtor - -Wpedantic - -Wunused - ) - -# target_link_options(path-tracer PRIVATE -fsanitize=address) -endif() - -target_link_directories(path-tracer PRIVATE "C:\\Program Files\\LLVM\\lib\\clang\\14.0.6\\lib\\windows") - -target_compile_definitions(path-tracer PUBLIC ${DEFINES}) - -target_include_directories(path-tracer - SYSTEM PUBLIC - - ${CMAKE_SOURCE_DIR}/thirdparty - ${CMAKE_SOURCE_DIR}/tracy/public - ${Vulkan_INCLUDE_DIRS} - - PUBLIC - - ${CMAKE_SOURCE_DIR}/include -) - -if(UNIX AND NOT APPLE) - target_include_directories(path-tracer PUBLIC ${X11_xcb_INCLUDE_PATH}) -endif() - -if(UNIX AND NOT APPLE) - list(APPEND LIBRARIES ${CMAKE_DL_LIBS} ${X11_xcb_LIB} ${X11_xkbcommon_LIB} ${X11_xkbcommon_X11_LIB}) -endif() - -target_link_libraries(path-tracer PRIVATE ${LIBRARIES}) diff --git a/vcpkg b/vcpkg deleted file mode 160000 index 6166e75..0000000 --- a/vcpkg +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6166e754fc5ea77805914afb9273eaff3e5136f1 diff --git a/vcpkg.json b/vcpkg.json deleted file mode 100644 index 712cb6f..0000000 --- a/vcpkg.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "path-tracer", - "version-string": "0.0.1", - "dependencies": [ - "imgui", - "nlohmann-json" - ] -} -- cgit v1.3