From 73a2e96c932138cc9069050a45240eda064775b1 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Tue, 8 Mar 2016 13:57:23 +0800 Subject: [PATCH 1/2] Use CMake on Linux The suggested way to build RenderDoc on Linux is now $ mkdir build $ cd build $ cmake .. $ make It will print an error when used on other platforms. --- .gitignore | 4 + CMakeLists.txt | 52 ++++ Makefile | 13 - qrenderdoc/CMakeLists.txt | 59 ++++ renderdoc/CMakeLists.txt | 267 ++++++++++++++++++ renderdoc/Makefile | 151 ---------- renderdoc/driver/gl/CMakeLists.txt | 50 ++++ renderdoc/driver/gl/Makefile | 58 ---- renderdoc/driver/shaders/spirv/CMakeLists.txt | 84 ++++++ renderdoc/driver/shaders/spirv/Makefile | 76 ----- renderdoc/driver/vulkan/CMakeLists.txt | 71 +++++ renderdoc/driver/vulkan/Makefile | 65 ----- renderdoccmd/CMakeLists.txt | 23 ++ renderdoccmd/Makefile | 36 --- 14 files changed, 610 insertions(+), 399 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 Makefile create mode 100644 qrenderdoc/CMakeLists.txt create mode 100644 renderdoc/CMakeLists.txt delete mode 100644 renderdoc/Makefile create mode 100644 renderdoc/driver/gl/CMakeLists.txt delete mode 100644 renderdoc/driver/gl/Makefile create mode 100644 renderdoc/driver/shaders/spirv/CMakeLists.txt delete mode 100644 renderdoc/driver/shaders/spirv/Makefile create mode 100644 renderdoc/driver/vulkan/CMakeLists.txt delete mode 100644 renderdoc/driver/vulkan/Makefile create mode 100644 renderdoccmd/CMakeLists.txt delete mode 100644 renderdoccmd/Makefile diff --git a/.gitignore b/.gitignore index 6091199e3..70c383e96 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,11 @@ Development32/ Development64/ Release32/ Release64/ +build/ dist/ +CMakeFiles/ +Makefile +cmake_install.cmake Resources/*.png qrenderdoc/Makefile* *.exe diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..a4c9009a7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,52 @@ +cmake_minimum_required(VERSION 2.8.12) + +project(RenderDoc CXX C) + +if(WIN32) + message(FATAL_ERROR "No Win32 support") +endif() + +option(ENABLE_GL "Enable GL driver" ON) +option(ENABLE_VULKAN "Enable Vulkan driver" ON) +option(ENABLE_RENDERDOCCMD "Enable renderdoccmd" ON) +option(ENABLE_QRENDERDOC "Enable qrenderdoc" ON) + +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") + +if(${CMAKE_VERSION} VERSION_GREATER 3.0) + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED ON) +else() + if(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + endif() +endif() + +if(CMAKE_COMPILER_IS_GNUCXX) + set(warning_flags + -Wall + -Wextra + -Wno-unknown-pragmas + -Wno-reorder + -Wno-ignored-qualifiers + -Wno-unused-parameter + -Wno-unused-variable + -Wno-missing-field-initializers + -Wunused-but-set-variable + -Wno-type-limits + -Wno-unused-but-set-variable + -Wno-unused-function) + string(REPLACE ";" " " warning_flags "${warning_flags}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${warning_flags}") +endif() + +add_subdirectory(renderdoc) + +if(ENABLE_RENDERDOCCMD) + add_subdirectory(renderdoccmd) +endif() + +if(ENABLE_QRENDERDOC) + add_subdirectory(qrenderdoc) +endif() diff --git a/Makefile b/Makefile deleted file mode 100644 index 6ed76e0ee..000000000 --- a/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -.PHONY: all -all: - mkdir -p bin/ - cd renderdoc && $(MAKE) librenderdoc.so - cd renderdoccmd && $(MAKE) bin/renderdoccmd - cd qrenderdoc && qmake "CONFIG+=debug" && $(MAKE) - cp renderdoc/librenderdoc.so renderdoc/driver/vulkan/renderdoc_capture.json renderdoccmd/bin/renderdoccmd bin/ - -.PHONY: clean -clean: - cd renderdoc && $(MAKE) clean - cd renderdoccmd && $(MAKE) clean - cd qrenderdoc && rm -rf .obj Makefile* diff --git a/qrenderdoc/CMakeLists.txt b/qrenderdoc/CMakeLists.txt new file mode 100644 index 000000000..c173c00c2 --- /dev/null +++ b/qrenderdoc/CMakeLists.txt @@ -0,0 +1,59 @@ +set(CMAKE_AUTOMOC ON) + +find_package(Qt5Widgets) + +set(sources + Code/Core.cpp + Code/Core.h + Code/main.cpp + Code/RenderManager.cpp + Code/RenderManager.h + Widgets/CustomPaintWidget.cpp + Widgets/CustomPaintWidget.h + Widgets/LineEditFocusWidget.cpp + Widgets/LineEditFocusWidget.h + Windows/EventBrowser.cpp + Windows/EventBrowser.h + Windows/MainWindow.cpp + Windows/MainWindow.h + Windows/TextureViewer.cpp + Windows/TextureViewer.h + 3rdparty/flowlayout/FlowLayout.cpp + 3rdparty/flowlayout/FlowLayout.h + 3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp + 3rdparty/toolwindowmanager/ToolWindowManagerArea.h + 3rdparty/toolwindowmanager/ToolWindowManager.cpp + 3rdparty/toolwindowmanager/ToolWindowManager.h + 3rdparty/toolwindowmanager/ToolWindowManagerWrapper.cpp + 3rdparty/toolwindowmanager/ToolWindowManagerWrapper.h) + +set(forms + Windows/MainWindow.ui + Windows/EventBrowser.ui + Windows/TextureViewer.ui) + +set(resources resources.qrc) + +set(includes + PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE ${CMAKE_CURRENT_BINARY_DIR} + PRIVATE ${CMAKE_SOURCE_DIR}/renderdoc/api/replay + PRIVATE 3rdparty/toolwindowmanager + PRIVATE 3rdparty/flowlayout) + +set(libraries + PRIVATE renderdoc + PRIVATE Qt5::Widgets) + +if(UNIX) + find_package(Qt5X11Extras) + list(APPEND libraries PRIVATE Qt5::X11Extras) +endif() + +qt5_wrap_ui(form_sources ${forms}) +qt5_add_resources(resource_sources ${resources}) +list(APPEND sources ${form_sources} ${resource_sources}) + +add_executable(qrenderdoc ${sources}) +target_include_directories(qrenderdoc ${includes}) +target_link_libraries(qrenderdoc ${libraries}) diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt new file mode 100644 index 000000000..58f4fc04d --- /dev/null +++ b/renderdoc/CMakeLists.txt @@ -0,0 +1,267 @@ +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +if(CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") +endif() + +set(RDOC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) +set(RDOC_DEFINITIONS PRIVATE -DRENDERDOC_EXPORTS) +set(RDOC_INCLUDES + PRIVATE ${RDOC_SOURCE_DIR} + PRIVATE ${RDOC_SOURCE_DIR}/3rdparty) +set(RDOC_LIBRARIES) + +# get git commit hash +execute_process(COMMAND sh ${CMAKE_SOURCE_DIR}/calc_hash.sh + OUTPUT_VARIABLE GIT_COMMIT_HASH) +string(STRIP ${GIT_COMMIT_HASH} GIT_COMMIT_HASH) +list(APPEND RDOC_DEFINITIONS + PRIVATE -DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}") + +if(WIN32) + list(APPEND RDOC_DEFINITIONS + PUBLIC -DRENDERDOC_PLATFORM=win32 + PRIVATE -DWIN32) +elseif(UNIX) + find_package(PkgConfig REQUIRED) + find_package(Threads REQUIRED) + find_package(X11 REQUIRED) + + # This should be fixed and moved to FindXcb.cmake + pkg_check_modules(PC_XCB REQUIRED xcb xcb-keysyms) + set(XCB_INCLUDE_DIRS) + set(XCB_LIBRARIES xcb xcb-keysyms) + + list(APPEND RDOC_DEFINITIONS + PUBLIC -DRENDERDOC_PLATFORM=linux + PRIVATE -DLINUX) + + list(APPEND RDOC_INCLUDES + PRIVATE ${X11_X11_INCLUDE_PATH} + PRIVATE ${XCB_INCLUDE_DIRS}) + + list(APPEND RDOC_LIBRARIES + PRIVATE m + PRIVATE dl + PRIVATE ${CMAKE_THREAD_LIBS_INIT} + PRIVATE ${X11_X11_LIB} + PRIVATE ${XCB_LIBRARIES}) +endif() + +set(sources + api/app/renderdoc_app.h + api/replay/basic_types.h + api/replay/capture_options.h + api/replay/control_types.h + api/replay/d3d11_pipestate.h + api/replay/data_types.h + api/replay/gl_pipestate.h + api/replay/renderdoc_replay.h + api/replay/replay_enums.h + api/replay/shader_types.h + api/replay/vk_pipestate.h + common/common.cpp + common/common.h + common/custom_assert.h + common/dds_readwrite.cpp + common/dds_readwrite.h + common/globalconfig.h + common/shader_cache.h + common/threading.h + common/timing.h + common/wrapped_pool.h + core/core.cpp + core/core.h + core/crash_handler.h + core/remote_access.cpp + core/remote_replay.cpp + core/replay_proxy.cpp + core/replay_proxy.h + core/resource_manager.cpp + core/resource_manager.h + core/socket_helpers.h + data/glsl/debuguniforms.h + data/glsl/texsample.h + data/hlsl/debugcbuffers.h + data/spv/debuguniforms.h + data/spv/texsample.h + data/version.h + hooks/hooks.cpp + hooks/hooks.h + maths/camera.cpp + maths/camera.h + maths/formatpacking.h + maths/half_convert.h + maths/matrix.cpp + maths/matrix.h + maths/quat.h + maths/vec.h + os/os_specific.cpp + os/os_specific.h + replay/app_api.cpp + replay/capture_options.cpp + replay/entry_points.cpp + replay/replay_driver.h + replay/replay_output.cpp + replay/replay_renderer.cpp + replay/replay_renderer.h + replay/type_helpers.cpp + replay/type_helpers.h + serialise/grisu2.cpp + serialise/serialiser.cpp + serialise/serialiser.h + serialise/string_utils.cpp + serialise/string_utils.h + serialise/utf8printf.cpp + 3rdparty/jpeg-compressor/jpgd.cpp + 3rdparty/jpeg-compressor/jpgd.h + 3rdparty/jpeg-compressor/jpge.cpp + 3rdparty/jpeg-compressor/jpge.h + 3rdparty/lz4/lz4.c + 3rdparty/lz4/lz4.h + 3rdparty/stb/stb_image.h + 3rdparty/stb/stb_image_write.h + 3rdparty/stb/stb_impl.c + 3rdparty/stb/stb_truetype.h + 3rdparty/tinyexr/tinyexr.cpp + 3rdparty/tinyexr/tinyexr.h) + +if(WIN32) + list(APPEND sources + core/image_viewer.cpp + data/resource.h + os/win32_specific.h + os/win32/sys_win32_hooks.cpp + os/win32/win32_callstack.cpp + os/win32/win32_hook.cpp + os/win32/win32_hook.h + os/win32/win32_libentry.cpp + os/win32/win32_network.cpp + os/win32/win32_process.cpp + os/win32/win32_shellext.cpp + os/win32/win32_stringio.cpp + os/win32/win32_threading.cpp) +elseif(UNIX) + list(APPEND sources + data/embedded_files.h + os/linux/linux_callstack.cpp + os/linux/linux_hook.cpp + os/linux/linux_hook.h + os/linux/linux_network.cpp + os/linux/linux_process.cpp + os/linux/linux_stringio.cpp + os/linux/linux_threading.cpp + os/linux_specific.h) + # linux_libentry must be the last so that library_loaded is called after + # static objects are constructed. + list(APPEND sources os/linux/linux_libentry.cpp) +endif() + +if(CMAKE_COMPILER_IS_GNUCXX) + set_source_files_properties(3rdparty/tinyexr/tinyexr.cpp + PROPERTIES COMPILE_FLAGS "-Wno-extra") +endif() + +add_library(rdoc OBJECT ${sources}) +target_compile_definitions(rdoc ${RDOC_DEFINITIONS}) +target_include_directories(rdoc ${RDOC_INCLUDES}) + +set(data + data/glsl/arraymscopy.comp + data/glsl/blit.frag + data/glsl/blit.vert + data/glsl/checkerboard.frag + data/glsl/debuguniforms.h + data/glsl/generic.frag + data/glsl/generic.vert + data/glsl/histogram.comp + data/glsl/mesh.comp + data/glsl/mesh.frag + data/glsl/mesh.geom + data/glsl/mesh.vert + data/glsl/outline.frag + data/glsl/quadoverdraw.frag + data/glsl/texdisplay.frag + data/glsl/texsample.h + data/glsl/text.frag + data/glsl/text.vert + data/spv/blit.vert + data/spv/checkerboard.frag + data/spv/debuguniforms.h + data/spv/fixedcol.frag + data/spv/histogram.comp + data/spv/mesh.frag + data/spv/mesh.geom + data/spv/mesh.vert + data/spv/minmaxresult.comp + data/spv/minmaxtile.comp + data/spv/outline.frag + data/spv/quadresolve.frag + data/spv/quadwrite.frag + data/spv/texdisplay.frag + data/spv/texsample.h + data/spv/text.frag + data/spv/text.vert + data/sourcecodepro.ttf) + +set(data_objects) +if(WIN32) + set_source_files_properties(${data} PROPERTIES LANGUAGE RC) + set(data_objects ${data}) +else(UNIX) + # this is fragile... + if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") + set(bfdarch "i386") + set(bfdtarget "elf64-x86-64") + elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "i686") + set(bfdarch "i386") + set(bfdtarget "elf32-i386") + else() + message(FATAL_ERROR "Unknown target architecture") + endif() + + set(data_command ${CMAKE_OBJCOPY} -I binary -O ${bfdtarget} -B ${bfdarch}) + + foreach(res ${data}) + # strip "data/" + string(SUBSTRING ${res} 5 -1 in) + set(working_dir ${CMAKE_CURRENT_SOURCE_DIR}/data) + + set(out ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_FILES_DIRECTORY}/data.obj/${in}.o) + get_filename_component(out_dir ${out} DIRECTORY) + + add_custom_command(OUTPUT ${out} + COMMAND ${CMAKE_COMMAND} -E make_directory ${out_dir} + COMMAND ${data_command} ${in} ${out} + WORKING_DIRECTORY ${working_dir} + DEPENDS ${res}) + list(APPEND data_objects ${out}) + endforeach() +endif() + +set(renderdoc_objects) + +if(ENABLE_GL) + add_subdirectory(driver/gl) + list(APPEND renderdoc_objects $) +endif() + +if(ENABLE_VULKAN) + add_subdirectory(driver/vulkan) + list(APPEND renderdoc_objects $) +endif() + +if(ENABLE_GL OR ENABLE_VULKAN) + add_subdirectory(driver/shaders/spirv) + list(APPEND renderdoc_objects $) +endif() + +# rdoc must be after its drivers +list(APPEND renderdoc_objects + $ + ${data_objects}) + +add_library(renderdoc SHARED ${renderdoc_objects}) +target_compile_definitions(renderdoc ${RDOC_DEFINITIONS}) +target_include_directories(renderdoc ${RDOC_INCLUDES}) +target_link_libraries(renderdoc ${RDOC_LIBRARIES}) diff --git a/renderdoc/Makefile b/renderdoc/Makefile deleted file mode 100644 index 3c5da50a6..000000000 --- a/renderdoc/Makefile +++ /dev/null @@ -1,151 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DRENDERDOC_EXPORTS \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unused -Wno-unknown-pragmas -fPIC $(MACROS) -I. -I3rdparty/ -CPPFLAGS=-std=c++11 -g -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden -LDFLAGS=-lpthread -lrt -shared -ldl -lX11 -lxcb-keysyms -LIBS=driver/gl/rdoc_gl.a driver/vulkan/rdoc_vulkan.a driver/shaders/spirv/rdoc_spirv.a -OBJDIR=.obj -OBJECTS=replay/replay_output.o \ -replay/replay_renderer.o \ -replay/entry_points.o \ -replay/type_helpers.o \ -replay/app_api.o \ -replay/capture_options.o \ -hooks/hooks.o \ -serialise/serialiser.o \ -serialise/grisu2.o \ -serialise/utf8printf.o \ -serialise/string_utils.o \ -common/common.o \ -common/dds_readwrite.o \ -core/remote_access.o \ -core/replay_proxy.o \ -core/remote_replay.o \ -core/resource_manager.o \ -core/core.o \ -maths/camera.o \ -maths/matrix.o \ -os/os_specific.o \ -3rdparty/jpeg-compressor/jpgd.o \ -3rdparty/jpeg-compressor/jpge.o \ -3rdparty/lz4/lz4.o \ -3rdparty/stb/stb_impl.o \ -3rdparty/tinyexr/tinyexr.o \ -os/linux/linux_callstack.o \ -os/linux/linux_hook.o \ -os/linux/linux_network.o \ -os/linux/linux_process.o \ -os/linux/linux_stringio.o \ -os/linux/linux_threading.o \ -os/linux/linux_libentry.o -# linux_libentry must be the last object file - -DATA=data/glsl/debuguniforms.ho \ -data/glsl/texsample.ho \ -data/glsl/blit.frago \ -data/glsl/blit.verto \ -data/glsl/texdisplay.frago \ -data/glsl/checkerboard.frago \ -data/glsl/generic.frago \ -data/glsl/generic.verto \ -data/glsl/mesh.verto \ -data/glsl/mesh.frago \ -data/glsl/mesh.geomo \ -data/glsl/mesh.compo \ -data/glsl/text.verto \ -data/glsl/text.frago \ -data/glsl/quadoverdraw.frago \ -data/glsl/histogram.compo \ -data/glsl/arraymscopy.compo \ -data/glsl/outline.frago \ -data/spv/blit.verto \ -data/spv/checkerboard.frago \ -data/spv/texdisplay.frago \ -data/spv/text.verto \ -data/spv/text.frago \ -data/spv/fixedcol.frago \ -data/spv/mesh.verto \ -data/spv/mesh.geomo \ -data/spv/mesh.frago \ -data/spv/histogram.compo \ -data/spv/minmaxtile.compo \ -data/spv/minmaxresult.compo \ -data/spv/outline.frago \ -data/spv/debuguniforms.ho \ -data/spv/texsample.ho \ -data/spv/quadwrite.frago \ -data/spv/quadresolve.frago \ -data/sourcecodepro.ttfo - -.PHONY: all -all: librenderdoc.so - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -# objcopy needs to be run in with paths in current directory -# to produce the right symbol names -OBJGEN = \ -mkdir -p $$(dirname $@); \ -cd data/; \ -objcopy --input binary --output elf64-x86-64 --binary-architecture i386 $$(echo $< | sed -e '{s/data\///g}') $$(basename $@); \ -cd - > /dev/null 2>&1; \ -mv data/$$(basename $@) $@; - -$(OBJDIR)/%.verto: %.vert - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.frago: %.frag - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.geomo: %.geom - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.compo: %.comp - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.ttfo: %.ttf - @echo Object building $@ - @$(OBJGEN) -$(OBJDIR)/%.ho: %.h - @echo Object building $@ - @$(OBJGEN) - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) -OBJDIR_DATA=$(addprefix $(OBJDIR)/, $(DATA)) - --include $(OBJDIR_OBJECTS:.o=.d) - -driver/gl/rdoc_gl.a: force_look - cd driver/gl && $(MAKE) rdoc_gl.a - -driver/vulkan/rdoc_vulkan.a: force_look - cd driver/vulkan && $(MAKE) rdoc_vulkan.a - -driver/shaders/spirv/rdoc_spirv.a: force_look - cd driver/shaders/spirv && $(MAKE) rdoc_spirv.a - -force_look: - true - -librenderdoc.so: $(OBJDIR_OBJECTS) $(OBJDIR_DATA) $(LIBS) - $(CPP) -o librenderdoc.so $(OBJDIR_DATA) -Wl,--whole-archive $(LIBS) -Wl,--no-whole-archive $(OBJDIR_OBJECTS) $(LDFLAGS) - -.PHONY: clean -clean: - rm -rf librenderdoc.so $(OBJDIR) - cd driver/gl && $(MAKE) clean - cd driver/vulkan && $(MAKE) clean - cd driver/shaders/spirv && $(MAKE) clean diff --git a/renderdoc/driver/gl/CMakeLists.txt b/renderdoc/driver/gl/CMakeLists.txt new file mode 100644 index 000000000..46380b586 --- /dev/null +++ b/renderdoc/driver/gl/CMakeLists.txt @@ -0,0 +1,50 @@ +set(sources + gl_common.cpp + gl_common.h + gl_counters.cpp + gl_debug.cpp + gl_driver.cpp + gl_driver.h + gl_enum.h + gl_hookset_defs.h + gl_hookset.h + gl_manager.cpp + gl_manager.h + gl_renderstate.cpp + gl_renderstate.h + gl_replay.cpp + gl_replay.h + gl_resources.cpp + gl_resources.h + gl_shader_refl.cpp + gl_shader_refl.h + official/glcorearb.h + official/glext.h + official/glxext.h + official/wglext.h + wrappers/gl_buffer_funcs.cpp + wrappers/gl_debug_funcs.cpp + wrappers/gl_draw_funcs.cpp + wrappers/gl_emulated.cpp + wrappers/gl_framebuffer_funcs.cpp + wrappers/gl_get_funcs.cpp + wrappers/gl_query_funcs.cpp + wrappers/gl_sampler_funcs.cpp + wrappers/gl_shader_funcs.cpp + wrappers/gl_state_funcs.cpp + wrappers/gl_texture_funcs.cpp + wrappers/gl_uniform_funcs.cpp) + +if(WIN32) + list(APPEND sources + gl_replay_win32.cpp + gl_hooks_win32.cpp) +elseif(UNIX) + list(APPEND sources + gl_replay_linux.cpp + gl_hooks_linux.cpp) +endif() + +add_library(rdoc_gl OBJECT ${sources}) +target_compile_definitions(rdoc_gl ${RDOC_DEFINITIONS}) +target_include_directories(rdoc_gl ${RDOC_INCLUDES}) diff --git a/renderdoc/driver/gl/Makefile b/renderdoc/driver/gl/Makefile deleted file mode 100644 index abc1209e9..000000000 --- a/renderdoc/driver/gl/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../../../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DRENDERDOC_EXPORTS \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unused -Wno-unknown-pragmas -fPIC $(MACROS) -I../../ -I../../3rdparty/ -CPPFLAGS=-std=c++11 -g -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden -LDFLAGS=-lpthread -lrt -shared -ldl -lX11 -OBJDIR=.obj -OBJECTS=gl_common.o \ -gl_driver.o \ -gl_manager.o \ -gl_debug.o \ -gl_counters.o \ -gl_replay.o \ -gl_replay_linux.o \ -gl_hooks_linux.o \ -gl_shader_refl.o \ -gl_resources.o \ -gl_renderstate.o \ -wrappers/gl_buffer_funcs.o \ -wrappers/gl_debug_funcs.o \ -wrappers/gl_draw_funcs.o \ -wrappers/gl_emulated.o \ -wrappers/gl_framebuffer_funcs.o \ -wrappers/gl_get_funcs.o \ -wrappers/gl_query_funcs.o \ -wrappers/gl_sampler_funcs.o \ -wrappers/gl_shader_funcs.o \ -wrappers/gl_state_funcs.o \ -wrappers/gl_texture_funcs.o \ -wrappers/gl_uniform_funcs.o - -.PHONY: all -all: rdoc_gl.a - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) - --include $(OBJDIR_OBJECTS:.o=.d) - -rdoc_gl.a: $(OBJDIR_OBJECTS) - ar rcs rdoc_gl.a $(OBJDIR_OBJECTS) - -.PHONY: clean -clean: - rm -rf rdoc_gl.a $(OBJDIR) diff --git a/renderdoc/driver/shaders/spirv/CMakeLists.txt b/renderdoc/driver/shaders/spirv/CMakeLists.txt new file mode 100644 index 000000000..762c401be --- /dev/null +++ b/renderdoc/driver/shaders/spirv/CMakeLists.txt @@ -0,0 +1,84 @@ +set(glslang_dir ${RDOC_SOURCE_DIR}/3rdparty/glslang) +set(glslang_sources + ${glslang_dir}/OGLCompilersDLL/InitializeDll.cpp + ${glslang_dir}/OGLCompilersDLL/InitializeDll.h + ${glslang_dir}/SPIRV/GlslangToSpv.cpp + ${glslang_dir}/SPIRV/GlslangToSpv.h + ${glslang_dir}/SPIRV/GLSL.std.450.h + ${glslang_dir}/SPIRV/InReadableOrder.cpp + ${glslang_dir}/SPIRV/SpvBuilder.cpp + ${glslang_dir}/SPIRV/SpvBuilder.h + ${glslang_dir}/SPIRV/spvIR.h + ${glslang_dir}/glslang/GenericCodeGen/CodeGen.cpp + ${glslang_dir}/glslang/GenericCodeGen/Link.cpp + ${glslang_dir}/glslang/Include/arrays.h + ${glslang_dir}/glslang/Include/BaseTypes.h + ${glslang_dir}/glslang/Include/Common.h + ${glslang_dir}/glslang/Include/ConstantUnion.h + ${glslang_dir}/glslang/Include/InfoSink.h + ${glslang_dir}/glslang/Include/InitializeGlobals.h + ${glslang_dir}/glslang/Include/intermediate.h + ${glslang_dir}/glslang/Include/PoolAlloc.h + ${glslang_dir}/glslang/Include/ResourceLimits.h + ${glslang_dir}/glslang/Include/revision.h + ${glslang_dir}/glslang/Include/ShHandle.h + ${glslang_dir}/glslang/Include/Types.h + ${glslang_dir}/glslang/MachineIndependent/Constant.cpp + ${glslang_dir}/glslang/MachineIndependent/glslang_tab.cpp + ${glslang_dir}/glslang/MachineIndependent/glslang_tab.cpp.h + ${glslang_dir}/glslang/MachineIndependent/gl_types.h + ${glslang_dir}/glslang/MachineIndependent/InfoSink.cpp + ${glslang_dir}/glslang/MachineIndependent/Initialize.cpp + ${glslang_dir}/glslang/MachineIndependent/Initialize.h + ${glslang_dir}/glslang/MachineIndependent/Intermediate.cpp + ${glslang_dir}/glslang/MachineIndependent/intermOut.cpp + ${glslang_dir}/glslang/MachineIndependent/IntermTraverse.cpp + ${glslang_dir}/glslang/MachineIndependent/limits.cpp + ${glslang_dir}/glslang/MachineIndependent/linkValidate.cpp + ${glslang_dir}/glslang/MachineIndependent/localintermediate.h + ${glslang_dir}/glslang/MachineIndependent/parseConst.cpp + ${glslang_dir}/glslang/MachineIndependent/ParseHelper.cpp + ${glslang_dir}/glslang/MachineIndependent/ParseHelper.h + ${glslang_dir}/glslang/MachineIndependent/PoolAlloc.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpAtom.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpContext.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpContext.h + ${glslang_dir}/glslang/MachineIndependent/preprocessor/Pp.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpMemory.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpScanner.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpSymbols.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpTokens.cpp + ${glslang_dir}/glslang/MachineIndependent/preprocessor/PpTokens.h + ${glslang_dir}/glslang/MachineIndependent/reflection.cpp + ${glslang_dir}/glslang/MachineIndependent/reflection.h + ${glslang_dir}/glslang/MachineIndependent/RemoveTree.cpp + ${glslang_dir}/glslang/MachineIndependent/RemoveTree.h + ${glslang_dir}/glslang/MachineIndependent/ScanContext.h + ${glslang_dir}/glslang/MachineIndependent/Scan.cpp + ${glslang_dir}/glslang/MachineIndependent/Scan.h + ${glslang_dir}/glslang/MachineIndependent/ShaderLang.cpp + ${glslang_dir}/glslang/MachineIndependent/SymbolTable.cpp + ${glslang_dir}/glslang/MachineIndependent/SymbolTable.h + ${glslang_dir}/glslang/MachineIndependent/Versions.cpp + ${glslang_dir}/glslang/MachineIndependent/Versions.h + ${glslang_dir}/glslang/OSDependent/osinclude.h + ${glslang_dir}/glslang/Public/ShaderLang.h) + +if(WIN32) + list(APPEND glslang_sources + ${glslang_dir}/glslang/OSDependent/Windows/ossource.cpp) +elseif(UNIX) + list(APPEND glslang_sources + ${glslang_dir}/glslang/OSDependent/Unix/ossource.cpp) +endif() + +set(sources + spirv_common.cpp + spirv_common.h + spirv_compile.cpp + spirv_disassemble.cpp + ${glslang_sources}) + +add_library(rdoc_spirv OBJECT ${sources}) +target_compile_definitions(rdoc_spirv ${RDOC_DEFINITIONS}) +target_include_directories(rdoc_spirv ${RDOC_INCLUDES}) diff --git a/renderdoc/driver/shaders/spirv/Makefile b/renderdoc/driver/shaders/spirv/Makefile deleted file mode 100644 index ea61c0921..000000000 --- a/renderdoc/driver/shaders/spirv/Makefile +++ /dev/null @@ -1,76 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../../../../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DRENDERDOC_EXPORTS \ - -DGLSLANG_OSINCLUDE_UNIX \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unused -Wno-unknown-pragmas -fPIC $(MACROS) -I../../../ -I../../../3rdparty/ -CPPFLAGS=-std=c++11 -g -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden -LDFLAGS=-lpthread -lrt -shared -ldl -lX11 -OBJDIR=.obj - -VPATH=../../../3rdparty - -# VPATH above takes care of finding the glslang files within the 3rdparty directory -OBJECTS=spirv_common.o \ -spirv_compile.o \ -spirv_disassemble.o \ -glslang/OGLCompilersDLL/InitializeDll.o \ -glslang/SPIRV/GlslangToSpv.o \ -glslang/SPIRV/InReadableOrder.o \ -glslang/SPIRV/SpvBuilder.o \ -glslang/glslang/GenericCodeGen/CodeGen.o \ -glslang/glslang/GenericCodeGen/Link.o \ -glslang/glslang/MachineIndependent/Constant.o \ -glslang/glslang/MachineIndependent/glslang_tab.o \ -glslang/glslang/MachineIndependent/InfoSink.o \ -glslang/glslang/MachineIndependent/Initialize.o \ -glslang/glslang/MachineIndependent/Intermediate.o \ -glslang/glslang/MachineIndependent/intermOut.o \ -glslang/glslang/MachineIndependent/IntermTraverse.o \ -glslang/glslang/MachineIndependent/limits.o \ -glslang/glslang/MachineIndependent/linkValidate.o \ -glslang/glslang/MachineIndependent/parseConst.o \ -glslang/glslang/MachineIndependent/ParseHelper.o \ -glslang/glslang/MachineIndependent/PoolAlloc.o \ -glslang/glslang/MachineIndependent/reflection.o \ -glslang/glslang/MachineIndependent/RemoveTree.o \ -glslang/glslang/MachineIndependent/Scan.o \ -glslang/glslang/MachineIndependent/ShaderLang.o \ -glslang/glslang/MachineIndependent/SymbolTable.o \ -glslang/glslang/MachineIndependent/Versions.o \ -glslang/glslang/MachineIndependent/preprocessor/Pp.o \ -glslang/glslang/MachineIndependent/preprocessor/PpAtom.o \ -glslang/glslang/MachineIndependent/preprocessor/PpContext.o \ -glslang/glslang/MachineIndependent/preprocessor/PpMemory.o \ -glslang/glslang/MachineIndependent/preprocessor/PpScanner.o \ -glslang/glslang/MachineIndependent/preprocessor/PpSymbols.o \ -glslang/glslang/MachineIndependent/preprocessor/PpTokens.o \ -glslang/glslang/OSDependent/Unix/ossource.o - - -.PHONY: all -all: rdoc_spirv.a - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) - --include $(OBJDIR_OBJECTS:.o=.d) - -rdoc_spirv.a: $(OBJDIR_OBJECTS) - ar rcs rdoc_spirv.a $(OBJDIR_OBJECTS) - -.PHONY: clean -clean: - rm -rf rdoc_spirv.a $(OBJDIR) diff --git a/renderdoc/driver/vulkan/CMakeLists.txt b/renderdoc/driver/vulkan/CMakeLists.txt new file mode 100644 index 000000000..7bd5dbe20 --- /dev/null +++ b/renderdoc/driver/vulkan/CMakeLists.txt @@ -0,0 +1,71 @@ +set(sources + vk_common.cpp + vk_common.h + vk_core.cpp + vk_core.h + vk_counters.cpp + vk_debug.cpp + vk_debug.h + vk_dispatchtables.cpp + vk_dispatchtables.h + vk_hookset_defs.h + vk_info.cpp + vk_info.h + vk_initstate.cpp + vk_manager.cpp + vk_manager.h + vk_memory.cpp + vk_replay.cpp + vk_replay.h + vk_resources.cpp + vk_resources.h + vk_state.cpp + vk_state.h + vk_tracelayer.cpp + official/vk_layer.h + official/vk_lunarg_debug_marker.h + official/vk_platform.h + official/vulkan.h + wrappers/vk_cmd_funcs.cpp + wrappers/vk_descriptor_funcs.cpp + wrappers/vk_device_funcs.cpp + wrappers/vk_draw_funcs.cpp + wrappers/vk_dynamic_funcs.cpp + wrappers/vk_get_funcs.cpp + wrappers/vk_misc_funcs.cpp + wrappers/vk_queue_funcs.cpp + wrappers/vk_resource_funcs.cpp + wrappers/vk_shader_funcs.cpp + wrappers/vk_sync_funcs.cpp + wrappers/vk_wsi_funcs.cpp) + +set(definitions ${RDOC_DEFINITIONS}) + +if(WIN32) + list(APPEND sources vk_win32.cpp) + list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_WIN32_KHR) + + set(json_in ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc.json) + set(json_out ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/renderdoc.json) + add_custom_command(OUTPUT ${json_out} + COMMAND ${CMAKE_COMMAND} -E copy ${json_in} ${json_out} + DEPENDS ${json_in}) + add_custom_target(generate-json ALL DEPENDS ${json_out}) +elseif(UNIX) + list(APPEND sources vk_linux.cpp) + + list(APPEND definitions + PRIVATE -DVK_USE_PLATFORM_XCB_KHR + PRIVATE -DVK_USE_PLATFORM_XLIB_KHR) + + set(json_in ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc.json) + set(json_out ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/renderdoc_capture.json) + add_custom_command(OUTPUT ${json_out} + COMMAND sed '{s%...renderdoc.dll%./librenderdoc.so%}' < ${json_in} > ${json_out} + DEPENDS ${json_in}) + add_custom_target(generate-json ALL DEPENDS ${json_out}) +endif() + +add_library(rdoc_vulkan OBJECT ${sources}) +target_compile_definitions(rdoc_vulkan ${definitions}) +target_include_directories(rdoc_vulkan ${RDOC_INCLUDES}) diff --git a/renderdoc/driver/vulkan/Makefile b/renderdoc/driver/vulkan/Makefile deleted file mode 100644 index 3f2c42615..000000000 --- a/renderdoc/driver/vulkan/Makefile +++ /dev/null @@ -1,65 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../../../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DRENDERDOC_EXPORTS \ - -DVK_USE_PLATFORM_XCB_KHR \ - -DVK_USE_PLATFORM_XLIB_KHR \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -Wno-unused -Wno-unknown-pragmas -fPIC $(MACROS) -I../../ -I../../3rdparty/ -CPPFLAGS=-std=c++11 -g -Wno-reorder -fvisibility=hidden -fvisibility-inlines-hidden -OBJDIR=.obj -OBJECTS=vk_dispatchtables.o \ -vk_tracelayer.o \ -vk_core.o \ -vk_initstate.o \ -vk_memory.o \ -vk_common.o \ -vk_manager.o \ -vk_resources.o \ -vk_debug.o \ -vk_replay.o \ -vk_counters.o \ -vk_info.o \ -vk_state.o \ -vk_linux.o \ -wrappers/vk_cmd_funcs.o \ -wrappers/vk_dynamic_funcs.o \ -wrappers/vk_descriptor_funcs.o \ -wrappers/vk_device_funcs.o \ -wrappers/vk_draw_funcs.o \ -wrappers/vk_get_funcs.o \ -wrappers/vk_misc_funcs.o \ -wrappers/vk_queue_funcs.o \ -wrappers/vk_sync_funcs.o \ -wrappers/vk_resource_funcs.o \ -wrappers/vk_shader_funcs.o \ -wrappers/vk_wsi_funcs.o - -.PHONY: all -all: rdoc_vulkan.a - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $< > $(OBJDIR)/$*.d - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) - --include $(OBJDIR_OBJECTS:.o=.d) - -renderdoc_capture.json: renderdoc.json - sed '{s%...renderdoc.dll%./librenderdoc.so%}' < renderdoc.json > renderdoc_capture.json - -rdoc_vulkan.a: $(OBJDIR_OBJECTS) renderdoc_capture.json - ar rcs rdoc_vulkan.a $(OBJDIR_OBJECTS) - -.PHONY: clean -clean: - rm -rf rdoc_vulkan.a $(OBJDIR) diff --git a/renderdoccmd/CMakeLists.txt b/renderdoccmd/CMakeLists.txt new file mode 100644 index 000000000..4f79f6d85 --- /dev/null +++ b/renderdoccmd/CMakeLists.txt @@ -0,0 +1,23 @@ +set(sources renderdoccmd.cpp) +set(definitions) +set(includes PRIVATE ${CMAKE_SOURCE_DIR}/renderdoc/api) +set(libraries PRIVATE renderdoc) + +if(WIN32) + list(APPEND sources renderdoccmd_win32.cpp) + list(APPEND definitions PRIVATE -DWIN32) +elseif(UNIX) + list(APPEND sources renderdoccmd_linux.cpp) + list(APPEND definitions PRIVATE -DLINUX) + + list(APPEND libraries PRIVATE -lxcb) + + find_package(OpenGL REQUIRED) + list(APPEND includes PRIVATE ${OPENGL_INCLUDE_DIR}) + list(APPEND libraries PRIVATE ${OPENGL_gl_LIBRARY}) +endif() + +add_executable(renderdoccmd ${sources}) +target_compile_definitions(renderdoccmd ${definitions}) +target_include_directories(renderdoccmd ${includes}) +target_link_libraries(renderdoccmd ${libraries}) diff --git a/renderdoccmd/Makefile b/renderdoccmd/Makefile deleted file mode 100644 index 88d110081..000000000 --- a/renderdoccmd/Makefile +++ /dev/null @@ -1,36 +0,0 @@ -CC=gcc -CPP=g++ -COMMIT=`sh ../calc_hash.sh` -MACROS=-DLINUX \ - -DRENDERDOC_PLATFORM=linux \ - -DGIT_COMMIT_HASH="\"$(COMMIT)\"" -CFLAGS=-c -Wall -Werror -fPIC $(MACROS) -I../renderdoc/api/ -CPPFLAGS=-std=c++11 -g -Wno-unused -Wno-unknown-pragmas -Wno-reorder -LDFLAGS=-L../renderdoc/ -lrenderdoc -lGL -lxcb -Wl,-rpath,'$$ORIGIN/' -OBJDIR=.obj -OBJECTS=renderdoccmd.o renderdoccmd_linux.o - -.PHONY: all -all: bin/renderdoccmd - -$(OBJDIR)/%.o: %.cpp - @mkdir -p $$(dirname $@) - $(CPP) $(CFLAGS) $(CPPFLAGS) -c -o $@ $< - @$(CPP) $(CFLAGS) $(CPPFLAGS) -MM -MT $(OBJDIR)/$*.o $*.cpp > $(OBJDIR)/$*.d - -$(OBJDIR)/%.o: %.c - @mkdir -p $$(dirname $@) - $(CC) $(CFLAGS) -c -o $@ $< - @$(CC) $(CFLAGS) -MM -MT $(OBJDIR)/$*.o $*.c > $(OBJDIR)/$*.d - -OBJDIR_OBJECTS=$(addprefix $(OBJDIR)/, $(OBJECTS)) - --include $(OBJDIR_OBJECTS:.o=.d) - -bin/renderdoccmd: $(OBJDIR_OBJECTS) ../renderdoc/librenderdoc.so - mkdir -p bin/ - $(CPP) -o bin/renderdoccmd $(OBJDIR_OBJECTS) $(LDFLAGS) - -.PHONY: clean -clean: - rm -rf bin/ $(OBJDIR) From cb9449230a17d92d6be9c0c8c37a2a1f01676391 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 11 Mar 2016 06:30:46 +0800 Subject: [PATCH 2/2] Update CMake rules * Suggest users to use VS on Windows * Add a top-level wrapper Makefile and disallow in-source builds * Support clang * Centralize compiler flags * Remove all occurrences of "if(WIN32)..." * Make qrenderdoc an external project --- .gitignore | 5 +- CMakeLists.txt | 36 ++++------- Makefile | 20 ++++++ qrenderdoc/CMakeLists.txt | 64 ++----------------- qrenderdoc/qrenderdoc.pro | 7 +- renderdoc/CMakeLists.txt | 43 ++----------- renderdoc/driver/gl/CMakeLists.txt | 6 +- renderdoc/driver/shaders/spirv/CMakeLists.txt | 5 +- renderdoc/driver/vulkan/CMakeLists.txt | 12 +--- renderdoccmd/CMakeLists.txt | 9 +-- 10 files changed, 58 insertions(+), 149 deletions(-) create mode 100644 Makefile diff --git a/.gitignore b/.gitignore index 70c383e96..87f63298e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,9 +8,6 @@ Release32/ Release64/ build/ dist/ -CMakeFiles/ -Makefile -cmake_install.cmake Resources/*.png qrenderdoc/Makefile* *.exe @@ -18,7 +15,7 @@ qrenderdoc/Makefile* *.ilk *.manifest *.user -bin/ +bin obj/ .obj/ *.opensdf diff --git a/CMakeLists.txt b/CMakeLists.txt index a4c9009a7..dbe1c92dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,16 @@ cmake_minimum_required(VERSION 2.8.12) -project(RenderDoc CXX C) - if(WIN32) - message(FATAL_ERROR "No Win32 support") + message(FATAL_ERROR "CMake is not needed on Windows, just open and build renderdoc.sln") endif() +# disallow in-source builds because we have a top-level wrapper Makefile +if(CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR) + message(FATAL_ERROR "In-source builds not allowed") +endif() + +project(RenderDoc CXX C) + option(ENABLE_GL "Enable GL driver" ON) option(ENABLE_VULKAN "Enable Vulkan driver" ON) option(ENABLE_RENDERDOCCMD "Enable renderdoccmd" ON) @@ -14,29 +19,16 @@ option(ENABLE_QRENDERDOC "Enable qrenderdoc" ON) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") -if(${CMAKE_VERSION} VERSION_GREATER 3.0) - set(CMAKE_CXX_STANDARD 11) - set(CMAKE_CXX_STANDARD_REQUIRED ON) -else() - if(CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") - endif() -endif() +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") -if(CMAKE_COMPILER_IS_GNUCXX) set(warning_flags -Wall - -Wextra + -Werror + -Wno-unused -Wno-unknown-pragmas - -Wno-reorder - -Wno-ignored-qualifiers - -Wno-unused-parameter - -Wno-unused-variable - -Wno-missing-field-initializers - -Wunused-but-set-variable - -Wno-type-limits - -Wno-unused-but-set-variable - -Wno-unused-function) + -Wno-reorder) string(REPLACE ";" " " warning_flags "${warning_flags}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${warning_flags}") endif() diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..0ff7a4a35 --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +SRC_DIR := $(shell pwd) +DST_DIR := $(SRC_DIR)/build + +.PHONY: all clean renderdoc qrenderdoc + +all: renderdoc qrenderdoc + @ln -sf "$(DST_DIR)/bin" + +renderdoc: + @mkdir -p "$(DST_DIR)" && cd "$(DST_DIR)" && \ + cmake -DENABLE_QRENDERDOC=OFF "$(SRC_DIR)" && \ + $(MAKE) + +qrenderdoc: renderdoc + @mkdir -p "$(DST_DIR)"/qrenderdoc && cd "$(DST_DIR)"/qrenderdoc && \ + qmake "CONFIG+=debug" "DESTDIR=$(DST_DIR)/bin" "$(SRC_DIR)"/qrenderdoc && \ + $(MAKE) + +clean: + @rm -rf "$(DST_DIR)" bin diff --git a/qrenderdoc/CMakeLists.txt b/qrenderdoc/CMakeLists.txt index c173c00c2..390be0f06 100644 --- a/qrenderdoc/CMakeLists.txt +++ b/qrenderdoc/CMakeLists.txt @@ -1,59 +1,7 @@ -set(CMAKE_AUTOMOC ON) +set(output_dir ${CMAKE_BINARY_DIR}/bin) -find_package(Qt5Widgets) - -set(sources - Code/Core.cpp - Code/Core.h - Code/main.cpp - Code/RenderManager.cpp - Code/RenderManager.h - Widgets/CustomPaintWidget.cpp - Widgets/CustomPaintWidget.h - Widgets/LineEditFocusWidget.cpp - Widgets/LineEditFocusWidget.h - Windows/EventBrowser.cpp - Windows/EventBrowser.h - Windows/MainWindow.cpp - Windows/MainWindow.h - Windows/TextureViewer.cpp - Windows/TextureViewer.h - 3rdparty/flowlayout/FlowLayout.cpp - 3rdparty/flowlayout/FlowLayout.h - 3rdparty/toolwindowmanager/ToolWindowManagerArea.cpp - 3rdparty/toolwindowmanager/ToolWindowManagerArea.h - 3rdparty/toolwindowmanager/ToolWindowManager.cpp - 3rdparty/toolwindowmanager/ToolWindowManager.h - 3rdparty/toolwindowmanager/ToolWindowManagerWrapper.cpp - 3rdparty/toolwindowmanager/ToolWindowManagerWrapper.h) - -set(forms - Windows/MainWindow.ui - Windows/EventBrowser.ui - Windows/TextureViewer.ui) - -set(resources resources.qrc) - -set(includes - PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} - PRIVATE ${CMAKE_SOURCE_DIR}/renderdoc/api/replay - PRIVATE 3rdparty/toolwindowmanager - PRIVATE 3rdparty/flowlayout) - -set(libraries - PRIVATE renderdoc - PRIVATE Qt5::Widgets) - -if(UNIX) - find_package(Qt5X11Extras) - list(APPEND libraries PRIVATE Qt5::X11Extras) -endif() - -qt5_wrap_ui(form_sources ${forms}) -qt5_add_resources(resource_sources ${resources}) -list(APPEND sources ${form_sources} ${resource_sources}) - -add_executable(qrenderdoc ${sources}) -target_include_directories(qrenderdoc ${includes}) -target_link_libraries(qrenderdoc ${libraries}) +include(ExternalProject) +ExternalProject_Add(qrenderdoc + DEPENDS renderdoc + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} + CONFIGURE_COMMAND qmake "CONFIG+=debug" "DESTDIR=${output_dir}" ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/qrenderdoc/qrenderdoc.pro b/qrenderdoc/qrenderdoc.pro index d6bc30d3e..ec2b0a14d 100644 --- a/qrenderdoc/qrenderdoc.pro +++ b/qrenderdoc/qrenderdoc.pro @@ -46,11 +46,12 @@ win32 { QMAKE_CXXFLAGS_WARN_ON -= -w34100 } else { - - DESTDIR = $$_PRO_FILE_PWD_/../bin + isEmpty(DESTDIR) { + DESTDIR = $$_PRO_FILE_PWD_/../bin + } # Link against the core library - LIBS += -L$$_PRO_FILE_PWD_/../renderdoc -lrenderdoc + LIBS += -L$$DESTDIR -lrenderdoc QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN\'' QMAKE_CXXFLAGS += -std=c++11 -Wno-unused-parameter -Wno-reorder diff --git a/renderdoc/CMakeLists.txt b/renderdoc/CMakeLists.txt index 58f4fc04d..15f2d3b88 100644 --- a/renderdoc/CMakeLists.txt +++ b/renderdoc/CMakeLists.txt @@ -1,9 +1,5 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) -if(CMAKE_COMPILER_IS_GNUCXX) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fvisibility-inlines-hidden") -endif() - set(RDOC_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(RDOC_DEFINITIONS PRIVATE -DRENDERDOC_EXPORTS) set(RDOC_INCLUDES @@ -18,16 +14,12 @@ string(STRIP ${GIT_COMMIT_HASH} GIT_COMMIT_HASH) list(APPEND RDOC_DEFINITIONS PRIVATE -DGIT_COMMIT_HASH="${GIT_COMMIT_HASH}") -if(WIN32) - list(APPEND RDOC_DEFINITIONS - PUBLIC -DRENDERDOC_PLATFORM=win32 - PRIVATE -DWIN32) -elseif(UNIX) +if(UNIX) find_package(PkgConfig REQUIRED) find_package(Threads REQUIRED) find_package(X11 REQUIRED) - # This should be fixed and moved to FindXcb.cmake + # This should be fixed and moved to FindXCB.cmake pkg_check_modules(PC_XCB REQUIRED xcb xcb-keysyms) set(XCB_INCLUDE_DIRS) set(XCB_LIBRARIES xcb xcb-keysyms) @@ -126,22 +118,7 @@ set(sources 3rdparty/tinyexr/tinyexr.cpp 3rdparty/tinyexr/tinyexr.h) -if(WIN32) - list(APPEND sources - core/image_viewer.cpp - data/resource.h - os/win32_specific.h - os/win32/sys_win32_hooks.cpp - os/win32/win32_callstack.cpp - os/win32/win32_hook.cpp - os/win32/win32_hook.h - os/win32/win32_libentry.cpp - os/win32/win32_network.cpp - os/win32/win32_process.cpp - os/win32/win32_shellext.cpp - os/win32/win32_stringio.cpp - os/win32/win32_threading.cpp) -elseif(UNIX) +if(UNIX) list(APPEND sources data/embedded_files.h os/linux/linux_callstack.cpp @@ -157,11 +134,6 @@ elseif(UNIX) list(APPEND sources os/linux/linux_libentry.cpp) endif() -if(CMAKE_COMPILER_IS_GNUCXX) - set_source_files_properties(3rdparty/tinyexr/tinyexr.cpp - PROPERTIES COMPILE_FLAGS "-Wno-extra") -endif() - add_library(rdoc OBJECT ${sources}) target_compile_definitions(rdoc ${RDOC_DEFINITIONS}) target_include_directories(rdoc ${RDOC_INCLUDES}) @@ -205,10 +177,8 @@ set(data data/sourcecodepro.ttf) set(data_objects) -if(WIN32) - set_source_files_properties(${data} PROPERTIES LANGUAGE RC) - set(data_objects ${data}) -else(UNIX) + +if(UNIX) # this is fragile... if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") set(bfdarch "i386") @@ -235,6 +205,7 @@ else(UNIX) COMMAND ${data_command} ${in} ${out} WORKING_DIRECTORY ${working_dir} DEPENDS ${res}) + list(APPEND data_objects ${out}) endforeach() endif() @@ -256,7 +227,7 @@ if(ENABLE_GL OR ENABLE_VULKAN) list(APPEND renderdoc_objects $) endif() -# rdoc must be after its drivers +# rdoc must be after its drivers because of linux_libentry.cpp list(APPEND renderdoc_objects $ ${data_objects}) diff --git a/renderdoc/driver/gl/CMakeLists.txt b/renderdoc/driver/gl/CMakeLists.txt index 46380b586..0fe62e714 100644 --- a/renderdoc/driver/gl/CMakeLists.txt +++ b/renderdoc/driver/gl/CMakeLists.txt @@ -35,11 +35,7 @@ set(sources wrappers/gl_texture_funcs.cpp wrappers/gl_uniform_funcs.cpp) -if(WIN32) - list(APPEND sources - gl_replay_win32.cpp - gl_hooks_win32.cpp) -elseif(UNIX) +if(UNIX) list(APPEND sources gl_replay_linux.cpp gl_hooks_linux.cpp) diff --git a/renderdoc/driver/shaders/spirv/CMakeLists.txt b/renderdoc/driver/shaders/spirv/CMakeLists.txt index 762c401be..3f4ddf145 100644 --- a/renderdoc/driver/shaders/spirv/CMakeLists.txt +++ b/renderdoc/driver/shaders/spirv/CMakeLists.txt @@ -64,10 +64,7 @@ set(glslang_sources ${glslang_dir}/glslang/OSDependent/osinclude.h ${glslang_dir}/glslang/Public/ShaderLang.h) -if(WIN32) - list(APPEND glslang_sources - ${glslang_dir}/glslang/OSDependent/Windows/ossource.cpp) -elseif(UNIX) +if(UNIX) list(APPEND glslang_sources ${glslang_dir}/glslang/OSDependent/Unix/ossource.cpp) endif() diff --git a/renderdoc/driver/vulkan/CMakeLists.txt b/renderdoc/driver/vulkan/CMakeLists.txt index 7bd5dbe20..1053b31cf 100644 --- a/renderdoc/driver/vulkan/CMakeLists.txt +++ b/renderdoc/driver/vulkan/CMakeLists.txt @@ -41,17 +41,7 @@ set(sources set(definitions ${RDOC_DEFINITIONS}) -if(WIN32) - list(APPEND sources vk_win32.cpp) - list(APPEND definitions PRIVATE -DVK_USE_PLATFORM_WIN32_KHR) - - set(json_in ${CMAKE_CURRENT_SOURCE_DIR}/renderdoc.json) - set(json_out ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/renderdoc.json) - add_custom_command(OUTPUT ${json_out} - COMMAND ${CMAKE_COMMAND} -E copy ${json_in} ${json_out} - DEPENDS ${json_in}) - add_custom_target(generate-json ALL DEPENDS ${json_out}) -elseif(UNIX) +if(UNIX) list(APPEND sources vk_linux.cpp) list(APPEND definitions diff --git a/renderdoccmd/CMakeLists.txt b/renderdoccmd/CMakeLists.txt index 4f79f6d85..5c48eff66 100644 --- a/renderdoccmd/CMakeLists.txt +++ b/renderdoccmd/CMakeLists.txt @@ -3,18 +3,15 @@ set(definitions) set(includes PRIVATE ${CMAKE_SOURCE_DIR}/renderdoc/api) set(libraries PRIVATE renderdoc) -if(WIN32) - list(APPEND sources renderdoccmd_win32.cpp) - list(APPEND definitions PRIVATE -DWIN32) -elseif(UNIX) +if(UNIX) list(APPEND sources renderdoccmd_linux.cpp) list(APPEND definitions PRIVATE -DLINUX) - list(APPEND libraries PRIVATE -lxcb) - find_package(OpenGL REQUIRED) list(APPEND includes PRIVATE ${OPENGL_INCLUDE_DIR}) list(APPEND libraries PRIVATE ${OPENGL_gl_LIBRARY}) + + list(APPEND libraries PRIVATE -lxcb) endif() add_executable(renderdoccmd ${sources})