From ffbe1dff0bf3e55968bdf3d3315e2d295610e54a Mon Sep 17 00:00:00 2001 From: "Robert D. Blanchet Jr" Date: Sat, 6 Apr 2019 14:24:09 -0700 Subject: [PATCH] Add spirv-tools and spirv-cross --- cmake/3rdparty/glslang.cmake | 10 +++++- cmake/3rdparty/spirv-cross.cmake | 38 +++++++++++++++++++++ cmake/3rdparty/spirv-tools.cmake | 58 ++++++++++++++++++++++++++++++++ cmake/tools/shaderc.cmake | 4 ++- 4 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 cmake/3rdparty/spirv-cross.cmake create mode 100644 cmake/3rdparty/spirv-tools.cmake diff --git a/cmake/3rdparty/glslang.cmake b/cmake/3rdparty/glslang.cmake index e216d39..d0537d7 100644 --- a/cmake/3rdparty/glslang.cmake +++ b/cmake/3rdparty/glslang.cmake @@ -28,7 +28,14 @@ else() endif() add_library( glslang STATIC EXCLUDE_FROM_ALL ${GLSLANG_SOURCES} ) -target_include_directories( glslang PUBLIC ${BGFX_DIR}/3rdparty/glslang ${BGFX_DIR}/3rdparty/glslang/glslang/Include ${BGFX_DIR}/3rdparty/glslang/glslang/Public ) +target_include_directories( glslang PUBLIC + ${BGFX_DIR}/3rdparty/spirv-tools/include + ${BGFX_DIR}/3rdparty/spirv-tools/source + ${BGFX_DIR}/3rdparty/glslang + ${BGFX_DIR}/3rdparty/glslang/glslang/Include + ${BGFX_DIR}/3rdparty/glslang/glslang/Public +) + set_target_properties( glslang PROPERTIES FOLDER "bgfx/3rdparty" ) if( MSVC ) @@ -73,5 +80,6 @@ if( UNIX AND NOT APPLE ) endif() target_compile_definitions( glslang PRIVATE + "ENABLE_OPT=1" "ENABLE_HLSL=1" ) diff --git a/cmake/3rdparty/spirv-cross.cmake b/cmake/3rdparty/spirv-cross.cmake new file mode 100644 index 0000000..a5768ae --- /dev/null +++ b/cmake/3rdparty/spirv-cross.cmake @@ -0,0 +1,38 @@ +# bgfx.cmake - bgfx building in cmake +# Written in 2017 by Joshua Brookover + +# To the extent possible under law, the author(s) have dedicated all copyright +# and related and neighboring rights to this software to the public domain +# worldwide. This software is distributed without any warranty. + +# You should have received a copy of the CC0 Public Domain Dedication along with +# this software. If not, see . + +if( TARGET spirv-cross ) + return() +endif() + +file( + GLOB + SPIRV_CROSS_SOURCES + ${BGFX_DIR}/3rdparty/spirv-cross/*.cpp + ${BGFX_DIR}/3rdparty/spirv-cross/*.h +) + +add_library( spirv-cross STATIC ${SPIRV_CROSS_SOURCES} ) +target_compile_definitions( spirv-cross PRIVATE SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS ) +target_include_directories( spirv-cross PUBLIC + ${BGFX_DIR}/3rdparty/spirv-cross + ${BGFX_DIR}/3rdparty/spirv-cross/include +) + +if( MSVC ) + target_compile_options( spirv-cross PRIVATE + "/wd4018" + "/wd4245" + "/wd4706" + "/wd4715" + ) +endif() + +set_target_properties( spirv-cross PROPERTIES FOLDER "bgfx/3rdparty" ) diff --git a/cmake/3rdparty/spirv-tools.cmake b/cmake/3rdparty/spirv-tools.cmake new file mode 100644 index 0000000..f8a3618 --- /dev/null +++ b/cmake/3rdparty/spirv-tools.cmake @@ -0,0 +1,58 @@ +# bgfx.cmake - bgfx building in cmake +# Written in 2017 by Joshua Brookover + +# To the extent possible under law, the author(s) have dedicated all copyright +# and related and neighboring rights to this software to the public domain +# worldwide. This software is distributed without any warranty. + +# You should have received a copy of the CC0 Public Domain Dedication along with +# this software. If not, see . + +if( TARGET spirv-tools ) + return() +endif() + +file( + GLOB + SPIRV_TOOLS_SOURCES + ${BGFX_DIR}/3rdparty/spirv-tools/source/*.cpp + ${BGFX_DIR}/3rdparty/spirv-tools/source/*.h + ${BGFX_DIR}/3rdparty/spirv-tools/source/opt/*.cpp + ${BGFX_DIR}/3rdparty/spirv-tools/source/opt/*.h + ${BGFX_DIR}/3rdparty/spirv-tools/source/reduce/*.cpp + ${BGFX_DIR}/3rdparty/spirv-tools/source/reduce/*.h + ${BGFX_DIR}/3rdparty/spirv-tools/source/util/*.cpp + ${BGFX_DIR}/3rdparty/spirv-tools/source/util/*.h + ${BGFX_DIR}/3rdparty/spirv-tools/source/val/*.cpp + ${BGFX_DIR}/3rdparty/spirv-tools/source/val/*.h +) + +add_library( spirv-tools STATIC ${SPIRV_TOOLS_SOURCES} ) +target_include_directories( spirv-tools PUBLIC + ${BGFX_DIR}/3rdparty/spirv-headers/include + ${BGFX_DIR}/3rdparty/spirv-tools + ${BGFX_DIR}/3rdparty/spirv-tools/include + ${BGFX_DIR}/3rdparty/spirv-tools/include/generated + ${BGFX_DIR}/3rdparty/spirv-tools/source +) + +if( MSVC ) + target_compile_options( spirv-tools PRIVATE + "/wd4127" + "/wd4389" + "/wd4702" + "/wd4706" + ) +else() + target_compile_options( spirv-tools PRIVATE + "-Wno-switch" + ) + + if(MINGW OR ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") + target_compile_options( spirv-tools PRIVATE + "-Wno-misleading-indentation" + ) + endif() +endif() + +set_target_properties( spirv-tools PROPERTIES FOLDER "bgfx/3rdparty" ) diff --git a/cmake/tools/shaderc.cmake b/cmake/tools/shaderc.cmake index 7436667..9c38ab6 100644 --- a/cmake/tools/shaderc.cmake +++ b/cmake/tools/shaderc.cmake @@ -13,11 +13,13 @@ include( CMakeParseArguments ) include( cmake/3rdparty/fcpp.cmake ) include( cmake/3rdparty/glsl-optimizer.cmake ) include( cmake/3rdparty/glslang.cmake ) +include( cmake/3rdparty/spirv-cross.cmake ) +include( cmake/3rdparty/spirv-tools.cmake ) add_executable( shaderc ${BGFX_DIR}/tools/shaderc/shaderc.cpp ${BGFX_DIR}/tools/shaderc/shaderc.h ${BGFX_DIR}/tools/shaderc/shaderc_glsl.cpp ${BGFX_DIR}/tools/shaderc/shaderc_hlsl.cpp ${BGFX_DIR}/tools/shaderc/shaderc_pssl.cpp ${BGFX_DIR}/tools/shaderc/shaderc_spirv.cpp ) target_compile_definitions( shaderc PRIVATE "-D_CRT_SECURE_NO_WARNINGS" ) set_target_properties( shaderc PROPERTIES FOLDER "bgfx/tools" ) -target_link_libraries( shaderc bx bimg bgfx-vertexdecl bgfx-shader-spirv fcpp glsl-optimizer glslang ) +target_link_libraries( shaderc bx bimg bgfx-vertexdecl bgfx-shader-spirv fcpp glsl-optimizer glslang spirv-cross spirv-tools ) if( BGFX_CUSTOM_TARGETS ) add_dependencies( tools shaderc ) endif()