diff --git a/CMakeLists.txt b/CMakeLists.txt index aa60b27..3d6beda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ # You should have received a copy of the CC0 Public Domain Dedication along with # this software. If not, see . -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.6) project(bgfx) cmake_policy(SET CMP0054 NEW) @@ -104,10 +104,6 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/cmake/bx) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/cmake/bimg) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/cmake/bgfx) -if(BGFX_BUILD_TOOLS) - include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/tools.cmake) -endif() - if(BGFX_INSTALL) include(GNUInstallDirs) diff --git a/cmake/3rdparty/fcpp.cmake b/cmake/3rdparty/fcpp.cmake deleted file mode 100755 index a5a0ff0..0000000 --- a/cmake/3rdparty/fcpp.cmake +++ /dev/null @@ -1,26 +0,0 @@ -# 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 fcpp) - return() -endif() - -file(GLOB FCPP_SOURCES ${BGFX_DIR}/3rdparty/fcpp/*.c ${BGFX_DIR}/3rdparty/fcpp/*.h) - -add_library(fcpp STATIC ${FCPP_SOURCES}) -target_include_directories(fcpp PUBLIC ${BGFX_DIR}/3rdparty/fcpp) -target_compile_definitions(fcpp PRIVATE NINCLUDE=64 NWORK=65536 NBUFF=65536 OLD_PREPROCESSOR=0) - -if(MSVC) - set_target_properties(fcpp PROPERTIES COMPILE_FLAGS "/W0") -endif() - -set_target_properties(fcpp PROPERTIES FOLDER "bgfx/3rdparty" PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}bgfx-") -set_source_files_properties(${BGFX_DIR}/3rdparty/fcpp/usecpp.c PROPERTIES HEADER_FILE_ONLY ON) diff --git a/cmake/3rdparty/glsl-optimizer.cmake b/cmake/3rdparty/glsl-optimizer.cmake deleted file mode 100755 index 1e7b41a..0000000 --- a/cmake/3rdparty/glsl-optimizer.cmake +++ /dev/null @@ -1,80 +0,0 @@ -# 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 glsl-optimizer) - return() -endif() - -set(GLSL-OPTIMIZER_INCLUDES - ${BGFX_DIR}/3rdparty/glsl-optimizer/include ${BGFX_DIR}/3rdparty/glsl-optimizer/src/mesa - ${BGFX_DIR}/3rdparty/glsl-optimizer/src/mapi ${BGFX_DIR}/3rdparty/glsl-optimizer/src/glsl - ${BGFX_DIR}/3rdparty/glsl-optimizer/src -) - -# glsl-optimizer makes UBSan segfault for whatever reason -# We already know that it's full of UB anyway... so just don't build it with UBSan -string(REPLACE "-fsanitize=undefined" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") -string(REPLACE "-fsanitize=undefined" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - -# glcpp -file(GLOB GLCPP_SOURCES ${BGFX_DIR}/3rdparty/glsl-optimizer/src/glsl/glcpp/*.c - ${BGFX_DIR}/3rdparty/glsl-optimizer/src/util/*.c -) -# Library must be static because hash_table_ctor referenced in function glcpp_parser_create -add_library(glcpp STATIC ${GLCPP_SOURCES}) -target_include_directories(glcpp PUBLIC ${GLSL-OPTIMIZER_INCLUDES}) -if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") - target_compile_options(glcpp PRIVATE "-fno-strict-aliasing") -endif() -if(MSVC) - set_target_properties(glcpp PROPERTIES COMPILE_FLAGS "/W0") -endif() -set_target_properties(glcpp PROPERTIES FOLDER "bgfx/3rdparty") - -# mesa -file(GLOB MESA_SOURCES ${BGFX_DIR}/3rdparty/glsl-optimizer/src/mesa/program/*.c - ${BGFX_DIR}/3rdparty/glsl-optimizer/src/mesa/main/*.c -) -# Library must be static because mesa/program/prog_hash_table.c uses _mesa_error_no_memory which is in glsl/standalone_scaffolding.cpp of glsl-optimizer -add_library(mesa STATIC ${MESA_SOURCES}) -target_include_directories(mesa PUBLIC ${GLSL-OPTIMIZER_INCLUDES}) -if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID MATCHES "Clang") - target_compile_options(mesa PRIVATE "-fno-strict-aliasing") -endif() -if(MSVC) - set_target_properties(mesa PROPERTIES COMPILE_FLAGS "/W0") -endif() -set_target_properties(mesa PROPERTIES FOLDER "bgfx/3rdparty") - -# glsl-optimizer -file(GLOB GLSL-OPTIMIZER_SOURCES ${BGFX_DIR}/3rdparty/glsl-optimizer/src/glsl/*.cpp - ${BGFX_DIR}/3rdparty/glsl-optimizer/src/glsl/*.c -) -file(GLOB GLSL-OPTIMIZER_SOURCES_REMOVE ${BGFX_DIR}/3rdparty/glsl-optimizer/src/glsl/main.cpp - ${BGFX_DIR}/3rdparty/glsl-optimizer/src/glsl/builtin_stubs.cpp -) -list(REMOVE_ITEM GLSL-OPTIMIZER_SOURCES ${GLSL-OPTIMIZER_SOURCES_REMOVE}) -add_library(glsl-optimizer STATIC ${GLSL-OPTIMIZER_SOURCES}) -target_link_libraries(glsl-optimizer glcpp mesa) -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - target_compile_options( - glsl-optimizer PRIVATE -fno-strict-aliasing -Wno-implicit-fallthrough -Wno-parentheses -Wno-sign-compare - -Wno-unused-function -Wno-unused-parameter - ) -endif() -if(MSVC) - set_target_properties(glsl-optimizer PROPERTIES COMPILE_FLAGS "/W0") - target_compile_definitions( - glsl-optimizer PRIVATE __STDC__ __STDC_VERSION__=199901L strdup=_strdup alloca=_alloca isascii=__isascii - ) -elseif(APPLE) - target_compile_options(glsl-optimizer PRIVATE -Wno-deprecated-register) -endif() -set_target_properties(glsl-optimizer PROPERTIES FOLDER "bgfx/3rdparty" PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}bgfx-") diff --git a/cmake/3rdparty/glslang.cmake b/cmake/3rdparty/glslang.cmake deleted file mode 100644 index d46c3fb..0000000 --- a/cmake/3rdparty/glslang.cmake +++ /dev/null @@ -1,91 +0,0 @@ -# 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 glslang) - return() -endif() - -file( - GLOB - GLSLANG_SOURCES - ${BGFX_DIR}/3rdparty/glslang/glslang/GenericCodeGen/*.cpp - ${BGFX_DIR}/3rdparty/glslang/glslang/MachineIndependent/*.cpp - ${BGFX_DIR}/3rdparty/glslang/glslang/MachineIndependent/preprocessor/*.cpp - ${BGFX_DIR}/3rdparty/glslang/glslang/HLSL/*.cpp - ${BGFX_DIR}/3rdparty/glslang/hlsl/*.cpp - ${BGFX_DIR}/3rdparty/glslang/SPIRV/*.cpp - ${BGFX_DIR}/3rdparty/glslang/OGLCompilersDLL/*.cpp -) - -if(WIN32) - list(APPEND GLSLANG_SOURCES ${BGFX_DIR}/3rdparty/glslang/glslang/OSDependent/Windows/ossource.cpp) -else() - list(APPEND GLSLANG_SOURCES ${BGFX_DIR}/3rdparty/glslang/glslang/OSDependent/Unix/ossource.cpp) -endif() - -add_library(glslang STATIC EXCLUDE_FROM_ALL ${GLSLANG_SOURCES}) -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 - PRIVATE ${BGFX_DIR}/3rdparty -) - -set_target_properties(glslang PROPERTIES FOLDER "bgfx/3rdparty" PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}bgfx-") - -if(MSVC) - target_compile_options( - glslang - PRIVATE "/wd4005" - "/wd4065" - "/wd4100" - "/wd4127" - "/wd4189" - "/wd4244" - "/wd4310" - "/wd4389" - "/wd4456" - "/wd4457" - "/wd4458" - "/wd4702" - "/wd4715" - "/wd4838" - ) -else() - target_compile_options( - glslang - PRIVATE "-Wno-ignored-qualifiers" - "-Wno-implicit-fallthrough" - "-Wno-missing-field-initializers" - "-Wno-reorder" - "-Wno-return-type" - "-Wno-shadow" - "-Wno-sign-compare" - "-Wno-switch" - "-Wno-undef" - "-Wno-unknown-pragmas" - "-Wno-unused-function" - "-Wno-unused-parameter" - "-Wno-unused-variable" - "-fno-strict-aliasing" - ) -endif() - -if(APPLE) - target_compile_options( - glslang PRIVATE "-Wno-c++11-extensions" "-Wno-unused-const-variable" "-Wno-deprecated-register" - ) -endif() - -if(UNIX AND NOT APPLE) - target_compile_options(glslang PRIVATE "-Wno-unused-but-set-variable") -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 deleted file mode 100644 index d571e55..0000000 --- a/cmake/3rdparty/spirv-cross.cmake +++ /dev/null @@ -1,25 +0,0 @@ -# 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" PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}bgfx-") diff --git a/cmake/3rdparty/spirv-tools.cmake b/cmake/3rdparty/spirv-tools.cmake deleted file mode 100644 index 15b2237..0000000 --- a/cmake/3rdparty/spirv-tools.cmake +++ /dev/null @@ -1,48 +0,0 @@ -# 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" PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}bgfx-") diff --git a/cmake/bgfx/3rdparty/fcpp.cmake b/cmake/bgfx/3rdparty/fcpp.cmake new file mode 100644 index 0000000..8e35c1a --- /dev/null +++ b/cmake/bgfx/3rdparty/fcpp.cmake @@ -0,0 +1,66 @@ +# 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 . + +# Ensure the directory exists +if(NOT IS_DIRECTORY ${BGFX_DIR}) + message(SEND_ERROR "Could not load bgfx, directory does not exist. ${BGFX_DIR}") + return() +endif() + +set(FCPP_DIR ${BGFX_DIR}/3rdparty/fcpp) + +add_library(fcpp STATIC) + +target_compile_definitions( + fcpp + PRIVATE "NINCLUDE=64" # + "NWORK=65536" # + "NBUFF=65536" # + "OLD_PREPROCESSOR=0" # + # "MSG_PREFIX=\"Preprocessor: \"" # +) + +# Put in a "bgfx" folder in Visual Studio +set_target_properties(fcpp PROPERTIES FOLDER "bgfx") + +target_include_directories(fcpp PUBLIC ${FCPP_DIR}) + +file( + GLOB + FCPP_SOURCES + ${FCPP_DIR}/*.h + ${FCPP_DIR}/cpp1.c + ${FCPP_DIR}/cpp2.c + ${FCPP_DIR}/cpp3.c + ${FCPP_DIR}/cpp4.c + ${FCPP_DIR}/cpp5.c + ${FCPP_DIR}/cpp6.c + ${FCPP_DIR}/cpp6.c +) + +target_sources(fcpp PRIVATE ${FCPP_SOURCES}) + +if(MSVC) + target_compile_options( + fcpp + PRIVATE + "/wd4055" # warning C4055: 'type cast': from data pointer 'void *' to function pointer 'void (__cdecl *)(char *,void *)' + "/wd4244" # warning C4244: '=': conversion from 'const flex_int32_t' to 'YY_CHAR', possible loss of data + "/wd4701" # warning C4701: potentially uninitialized local variable 'lower' used + "/wd4706" # warning C4706: assignment within conditional expression + ) +else() + target_compile_options( + fcpp + PRIVATE -Wno-implicit-fallthrough # + -Wno-incompatible-pointer-types # + -Wno-parentheses-equality # + ) +endif() diff --git a/cmake/bgfx/3rdparty/glsl-optimizer.cmake b/cmake/bgfx/3rdparty/glsl-optimizer.cmake new file mode 100644 index 0000000..be34f80 --- /dev/null +++ b/cmake/bgfx/3rdparty/glsl-optimizer.cmake @@ -0,0 +1,248 @@ +# 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 . + +# Ensure the directory exists +if(NOT IS_DIRECTORY ${BGFX_DIR}) + message(SEND_ERROR "Could not load bgfx, directory does not exist. ${BGFX_DIR}") + return() +endif() + +set(GLSL_OPTIMIZER ${BGFX_DIR}/3rdparty/glsl-optimizer) + +add_library(glsl-optimizer STATIC) + +# Put in a "bgfx" folder in Visual Studio +set_target_properties(glsl-optimizer PROPERTIES FOLDER "bgfx") + +target_include_directories( + glsl-optimizer + PUBLIC ${GLSL_OPTIMIZER}/include # + ${GLSL_OPTIMIZER}/src/glsl # + PRIVATE ${GLSL_OPTIMIZER}/src # + ${GLSL_OPTIMIZER}/src/mesa # + ${GLSL_OPTIMIZER}/src/mapi # +) + +file( + GLOB + GLSL_OPTIMIZER_SOURCES + ${GLSL_OPTIMIZER}/src/glsl/glcpp/glcpp.h + ${GLSL_OPTIMIZER}/src/glsl/glcpp/glcpp-lex.c + ${GLSL_OPTIMIZER}/src/glsl/glcpp/glcpp-parse.c + ${GLSL_OPTIMIZER}/src/glsl/glcpp/glcpp-parse.h + ${GLSL_OPTIMIZER}/src/glsl/glcpp/pp.c + ${GLSL_OPTIMIZER}/src/glsl/ast.h + ${GLSL_OPTIMIZER}/src/glsl/ast_array_index.cpp + ${GLSL_OPTIMIZER}/src/glsl/ast_expr.cpp + ${GLSL_OPTIMIZER}/src/glsl/ast_function.cpp + ${GLSL_OPTIMIZER}/src/glsl/ast_to_hir.cpp + ${GLSL_OPTIMIZER}/src/glsl/ast_type.cpp + ${GLSL_OPTIMIZER}/src/glsl/builtin_functions.cpp + ${GLSL_OPTIMIZER}/src/glsl/builtin_type_macros.h + ${GLSL_OPTIMIZER}/src/glsl/builtin_types.cpp + ${GLSL_OPTIMIZER}/src/glsl/builtin_variables.cpp + ${GLSL_OPTIMIZER}/src/glsl/glsl_lexer.cpp + ${GLSL_OPTIMIZER}/src/glsl/glsl_optimizer.cpp + ${GLSL_OPTIMIZER}/src/glsl/glsl_optimizer.h + ${GLSL_OPTIMIZER}/src/glsl/glsl_parser.cpp + ${GLSL_OPTIMIZER}/src/glsl/glsl_parser.h + ${GLSL_OPTIMIZER}/src/glsl/glsl_parser_extras.cpp + ${GLSL_OPTIMIZER}/src/glsl/glsl_parser_extras.h + ${GLSL_OPTIMIZER}/src/glsl/glsl_symbol_table.cpp + ${GLSL_OPTIMIZER}/src/glsl/glsl_symbol_table.h + ${GLSL_OPTIMIZER}/src/glsl/glsl_types.cpp + ${GLSL_OPTIMIZER}/src/glsl/glsl_types.h + ${GLSL_OPTIMIZER}/src/glsl/hir_field_selection.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir.h + ${GLSL_OPTIMIZER}/src/glsl/ir_basic_block.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_basic_block.h + ${GLSL_OPTIMIZER}/src/glsl/ir_builder.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_builder.h + ${GLSL_OPTIMIZER}/src/glsl/ir_clone.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_constant_expression.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_equals.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_expression_flattening.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_expression_flattening.h + ${GLSL_OPTIMIZER}/src/glsl/ir_function.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_function_can_inline.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_function_detect_recursion.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_function_inlining.h + ${GLSL_OPTIMIZER}/src/glsl/ir_hierarchical_visitor.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_hierarchical_visitor.h + ${GLSL_OPTIMIZER}/src/glsl/ir_hv_accept.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_import_prototypes.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_optimization.h + ${GLSL_OPTIMIZER}/src/glsl/ir_print_glsl_visitor.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_print_glsl_visitor.h + ${GLSL_OPTIMIZER}/src/glsl/ir_print_metal_visitor.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_print_metal_visitor.h + ${GLSL_OPTIMIZER}/src/glsl/ir_print_visitor.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_print_visitor.h + ${GLSL_OPTIMIZER}/src/glsl/ir_rvalue_visitor.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_rvalue_visitor.h + ${GLSL_OPTIMIZER}/src/glsl/ir_stats.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_stats.h + ${GLSL_OPTIMIZER}/src/glsl/ir_uniform.h + ${GLSL_OPTIMIZER}/src/glsl/ir_unused_structs.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_unused_structs.h + ${GLSL_OPTIMIZER}/src/glsl/ir_validate.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_variable_refcount.cpp + ${GLSL_OPTIMIZER}/src/glsl/ir_variable_refcount.h + ${GLSL_OPTIMIZER}/src/glsl/ir_visitor.h + ${GLSL_OPTIMIZER}/src/glsl/link_atomics.cpp + ${GLSL_OPTIMIZER}/src/glsl/link_functions.cpp + ${GLSL_OPTIMIZER}/src/glsl/link_interface_blocks.cpp + ${GLSL_OPTIMIZER}/src/glsl/link_uniform_block_active_visitor.cpp + ${GLSL_OPTIMIZER}/src/glsl/link_uniform_block_active_visitor.h + ${GLSL_OPTIMIZER}/src/glsl/link_uniform_blocks.cpp + ${GLSL_OPTIMIZER}/src/glsl/link_uniform_initializers.cpp + ${GLSL_OPTIMIZER}/src/glsl/link_uniforms.cpp + ${GLSL_OPTIMIZER}/src/glsl/link_varyings.cpp + ${GLSL_OPTIMIZER}/src/glsl/link_varyings.h + ${GLSL_OPTIMIZER}/src/glsl/linker.cpp + ${GLSL_OPTIMIZER}/src/glsl/linker.h + ${GLSL_OPTIMIZER}/src/glsl/list.h + ${GLSL_OPTIMIZER}/src/glsl/loop_analysis.cpp + ${GLSL_OPTIMIZER}/src/glsl/loop_analysis.h + ${GLSL_OPTIMIZER}/src/glsl/loop_controls.cpp + ${GLSL_OPTIMIZER}/src/glsl/loop_unroll.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_clip_distance.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_discard.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_discard_flow.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_if_to_cond_assign.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_instructions.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_jumps.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_mat_op_to_vec.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_named_interface_blocks.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_noise.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_offset_array.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_output_reads.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_packed_varyings.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_packing_builtins.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_ubo_reference.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_variable_index_to_cond_assign.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_vec_index_to_cond_assign.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_vec_index_to_swizzle.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_vector.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_vector_insert.cpp + ${GLSL_OPTIMIZER}/src/glsl/lower_vertex_id.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_algebraic.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_array_splitting.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_constant_folding.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_constant_propagation.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_constant_variable.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_copy_propagation.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_copy_propagation_elements.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_cse.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_dead_builtin_variables.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_dead_builtin_varyings.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_dead_code.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_dead_code_local.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_dead_functions.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_flatten_nested_if_blocks.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_flip_matrices.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_function_inlining.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_if_simplification.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_minmax.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_noop_swizzle.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_rebalance_tree.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_redundant_jumps.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_structure_splitting.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_swizzle_swizzle.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_tree_grafting.cpp + ${GLSL_OPTIMIZER}/src/glsl/opt_vectorize.cpp + ${GLSL_OPTIMIZER}/src/glsl/program.h + ${GLSL_OPTIMIZER}/src/glsl/s_expression.cpp + ${GLSL_OPTIMIZER}/src/glsl/s_expression.h + ${GLSL_OPTIMIZER}/src/glsl/standalone_scaffolding.cpp + ${GLSL_OPTIMIZER}/src/glsl/standalone_scaffolding.h + ${GLSL_OPTIMIZER}/src/glsl/strtod.c + ${GLSL_OPTIMIZER}/src/glsl/strtod.h + ${GLSL_OPTIMIZER}/src/mesa/main/compiler.h + ${GLSL_OPTIMIZER}/src/mesa/main/config.h + ${GLSL_OPTIMIZER}/src/mesa/main/context.h + ${GLSL_OPTIMIZER}/src/mesa/main/core.h + ${GLSL_OPTIMIZER}/src/mesa/main/dd.h + ${GLSL_OPTIMIZER}/src/mesa/main/errors.h + ${GLSL_OPTIMIZER}/src/mesa/main/glheader.h + ${GLSL_OPTIMIZER}/src/mesa/main/glminimal.h + ${GLSL_OPTIMIZER}/src/mesa/main/imports.c + ${GLSL_OPTIMIZER}/src/mesa/main/imports.h + ${GLSL_OPTIMIZER}/src/mesa/main/macros.h + ${GLSL_OPTIMIZER}/src/mesa/main/mtypes.h + ${GLSL_OPTIMIZER}/src/mesa/main/simple_list.h + ${GLSL_OPTIMIZER}/src/mesa/program/hash_table.h + ${GLSL_OPTIMIZER}/src/mesa/program/prog_hash_table.c + ${GLSL_OPTIMIZER}/src/mesa/program/prog_instruction.h + ${GLSL_OPTIMIZER}/src/mesa/program/prog_parameter.h + ${GLSL_OPTIMIZER}/src/mesa/program/prog_statevars.h + ${GLSL_OPTIMIZER}/src/mesa/program/symbol_table.c + ${GLSL_OPTIMIZER}/src/mesa/program/symbol_table.h + ${GLSL_OPTIMIZER}/src/util/hash_table.c + ${GLSL_OPTIMIZER}/src/util/hash_table.h + ${GLSL_OPTIMIZER}/src/util/macros.h + ${GLSL_OPTIMIZER}/src/util/ralloc.c + ${GLSL_OPTIMIZER}/src/util/ralloc.h +) + +target_sources(glsl-optimizer PRIVATE ${GLSL_OPTIMIZER_SOURCES}) + +if(MSVC) + target_compile_definitions( + glsl-optimizer + PRIVATE "__STDC__" # + "__STDC_VERSION__=199901L" # + "strdup=_strdup" # + "alloca=_alloca" # + "isascii=__isascii" # + ) + target_compile_options( + glsl-optimizer + PRIVATE + "/wd4100" # error C4100: '' : unreferenced formal parameter + "/wd4127" # warning C4127: conditional expression is constant + "/wd4132" # warning C4132: 'deleted_key_value': const object should be initialized + "/wd4189" # warning C4189: 'interface_type': local variable is initialized but not referenced + "/wd4204" # warning C4204: nonstandard extension used: non-constant aggregate initializer + "/wd4244" # warning C4244: '=': conversion from 'const flex_int32_t' to 'YY_CHAR', possible loss of data + "/wd4389" # warning C4389: '!=': signed/unsigned mismatch + "/wd4245" # warning C4245: 'return': conversion from 'int' to 'unsigned int', signed/unsigned mismatch + "/wd4701" # warning C4701: potentially uninitialized local variable 'lower' used + "/wd4702" # warning C4702: unreachable code + "/wd4706" # warning C4706: assignment within conditional expression + "/wd4996" # warning C4996: 'strdup': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _strdup. + ) +else() + target_compile_options( + glsl-optimizer + PRIVATE "-fno-strict-aliasing" # glsl-optimizer has bugs if strict aliasing is used. + # + "-Wno-implicit-fallthrough" # + "-Wno-parentheses" # + "-Wno-sign-compare" # + "-Wno-unused-function" # + "-Wno-unused-parameter" # + ) +endif() + +if(XCODE) + target_compile_options( + glsl-optimizer PRIVATE # + "-Wno-deprecated-register" # + ) +endif() + +if(MINGW) + target_compile_options( + glsl-optimizer PRIVATE # + "-Wno-misleading-indentation" # + ) +endif() diff --git a/cmake/bgfx/3rdparty/glslang.cmake b/cmake/bgfx/3rdparty/glslang.cmake new file mode 100644 index 0000000..36eec04 --- /dev/null +++ b/cmake/bgfx/3rdparty/glslang.cmake @@ -0,0 +1,65 @@ +# 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 . + +# Ensure the directory exists +if(NOT IS_DIRECTORY ${BGFX_DIR}) + message(SEND_ERROR "Could not load bgfx, directory does not exist. ${BGFX_DIR}") + return() +endif() + +set(GLSLANG ${BGFX_DIR}/3rdparty/glslang) +set(SPIRV_TOOLS ${BGFX_DIR}/3rdparty/spirv-tools) + +add_library(glslang STATIC) + +target_compile_definitions( + glslang + PRIVATE # + ENABLE_OPT=1 # spriv-tools + ENABLE_HLSL=1 # +) + +# Put in a "bgfx" folder in Visual Studio +set_target_properties(glslang PROPERTIES FOLDER "bgfx") + +target_include_directories( + glslang + PUBLIC ${GLSLANG} # + ${GLSLANG}/glslang/Public # + PRIVATE ${GLSLANG}/.. # + ${SPIRV_TOOLS}/include # + ${SPIRV_TOOLS}/source # +) + +file( + GLOB_RECURSE + GLSLANG_SOURCES + ${GLSLANG}/glslang/*.cpp + ${GLSLANG}/glslang/*.h + # + ${GLSLANG}/hlsl/*.cpp + ${GLSLANG}/hlsl/*.h + # + ${GLSLANG}/SPIRV/*.cpp + ${GLSLANG}/SPIRV/*.h + # + ${GLSLANG}/OGLCompilersDLL/*.cpp + ${GLSLANG}/OGLCompilersDLL/*.h +) + +if(WIN32) + list(FILTER GLSLANG_SOURCES EXCLUDE REGEX "glslang/OSDependent/Unix/.*.cpp") + list(FILTER GLSLANG_SOURCES EXCLUDE REGEX "glslang/OSDependent/Unix/.*.h") +else() + list(FILTER GLSLANG_SOURCES EXCLUDE REGEX "glslang/OSDependent/Windows/.*.cpp") + list(FILTER GLSLANG_SOURCES EXCLUDE REGEX "glslang/OSDependent/Windows/.*.h") +endif() + +target_sources(glslang PRIVATE ${GLSLANG_SOURCES}) diff --git a/cmake/bgfx/3rdparty/spirv-cross.cmake b/cmake/bgfx/3rdparty/spirv-cross.cmake new file mode 100644 index 0000000..560bbc0 --- /dev/null +++ b/cmake/bgfx/3rdparty/spirv-cross.cmake @@ -0,0 +1,62 @@ +# 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 . + +# Ensure the directory exists +if(NOT IS_DIRECTORY ${BGFX_DIR}) + message(SEND_ERROR "Could not load bgfx, directory does not exist. ${BGFX_DIR}") + return() +endif() + +set(SPIRV_CROSS ${BGFX_DIR}/3rdparty/spirv-cross) + +add_library(spirv-cross STATIC) + +target_compile_definitions(spirv-cross PRIVATE SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS) + +# Put in a "bgfx" folder in Visual Studio +set_target_properties(spirv-cross PROPERTIES FOLDER "bgfx") + +target_include_directories( + spirv-cross # + PUBLIC # + ${SPIRV_CROSS} # + PRIVATE # + ${SPIRV_CROSS}/include # +) + +file( + GLOB + SPIRV_CROSS_SOURCES + # + ${SPIRV_CROSS}/spirv.hpp + ${SPIRV_CROSS}/spirv_cfg.cpp + ${SPIRV_CROSS}/spirv_cfg.hpp + ${SPIRV_CROSS}/spirv_common.hpp + ${SPIRV_CROSS}/spirv_cpp.cpp + ${SPIRV_CROSS}/spirv_cpp.hpp + ${SPIRV_CROSS}/spirv_cross.cpp + ${SPIRV_CROSS}/spirv_cross.hpp + ${SPIRV_CROSS}/spirv_cross_parsed_ir.cpp + ${SPIRV_CROSS}/spirv_cross_parsed_ir.hpp + ${SPIRV_CROSS}/spirv_cross_util.cpp + ${SPIRV_CROSS}/spirv_cross_util.hpp + ${SPIRV_CROSS}/spirv_glsl.cpp + ${SPIRV_CROSS}/spirv_glsl.hpp + ${SPIRV_CROSS}/spirv_hlsl.cpp + ${SPIRV_CROSS}/spirv_hlsl.hpp + ${SPIRV_CROSS}/spirv_msl.cpp + ${SPIRV_CROSS}/spirv_msl.hpp + ${SPIRV_CROSS}/spirv_parser.cpp + ${SPIRV_CROSS}/spirv_parser.hpp + ${SPIRV_CROSS}/spirv_reflect.cpp + ${SPIRV_CROSS}/spirv_reflect.hpp +) + +target_sources(spirv-cross PRIVATE ${SPIRV_CROSS_SOURCES}) diff --git a/cmake/bgfx/3rdparty/spirv-opt.cmake b/cmake/bgfx/3rdparty/spirv-opt.cmake new file mode 100644 index 0000000..70d2df6 --- /dev/null +++ b/cmake/bgfx/3rdparty/spirv-opt.cmake @@ -0,0 +1,147 @@ +# 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 . + +# Ensure the directory exists +if(NOT IS_DIRECTORY ${BGFX_DIR}) + message(SEND_ERROR "Could not load bgfx, directory does not exist. ${BGFX_DIR}") + return() +endif() + +set(SPIRV_HEADERS ${BGFX_DIR}/3rdparty/spirv-headers) +set(SPIRV_TOOLS ${BGFX_DIR}/3rdparty/spirv-tools) + +add_library(spirv-opt STATIC) + +# Put in a "bgfx" folder in Visual Studio +set_target_properties(spirv-opt PROPERTIES FOLDER "bgfx") + +target_include_directories( + spirv-opt + PUBLIC ${SPIRV_TOOLS}/include # + PRIVATE ${SPIRV_TOOLS} # + ${SPIRV_TOOLS}/include/generated # + ${SPIRV_TOOLS}/source # + ${SPIRV_HEADERS}/include # +) + +file( + GLOB + SPIRV_OPT_SOURCES + # libspirv + ${SPIRV_TOOLS}/source/opt/*.cpp + ${SPIRV_TOOLS}/source/opt/*.h + ${SPIRV_TOOLS}/source/reduce/*.cpp + ${SPIRV_TOOLS}/source/reduce/*.h + ${SPIRV_TOOLS}/source/assembly_grammar.cpp + ${SPIRV_TOOLS}/source/assembly_grammar.h + ${SPIRV_TOOLS}/source/binary.cpp + ${SPIRV_TOOLS}/source/binary.h + ${SPIRV_TOOLS}/source/cfa.h + ${SPIRV_TOOLS}/source/diagnostic.cpp + ${SPIRV_TOOLS}/source/diagnostic.h + ${SPIRV_TOOLS}/source/disassemble.cpp + ${SPIRV_TOOLS}/source/disassemble.h + ${SPIRV_TOOLS}/source/enum_set.h + ${SPIRV_TOOLS}/source/enum_string_mapping.cpp + ${SPIRV_TOOLS}/source/enum_string_mapping.h + ${SPIRV_TOOLS}/source/ext_inst.cpp + ${SPIRV_TOOLS}/source/ext_inst.h + ${SPIRV_TOOLS}/source/extensions.cpp + ${SPIRV_TOOLS}/source/extensions.h + ${SPIRV_TOOLS}/source/instruction.h + ${SPIRV_TOOLS}/source/latest_version_glsl_std_450_header.h + ${SPIRV_TOOLS}/source/latest_version_opencl_std_header.h + ${SPIRV_TOOLS}/source/latest_version_spirv_header.h + ${SPIRV_TOOLS}/source/libspirv.cpp + ${SPIRV_TOOLS}/source/macro.h + ${SPIRV_TOOLS}/source/name_mapper.cpp + ${SPIRV_TOOLS}/source/name_mapper.h + ${SPIRV_TOOLS}/source/opcode.cpp + ${SPIRV_TOOLS}/source/opcode.h + ${SPIRV_TOOLS}/source/operand.cpp + ${SPIRV_TOOLS}/source/operand.h + ${SPIRV_TOOLS}/source/parsed_operand.cpp + ${SPIRV_TOOLS}/source/parsed_operand.h + ${SPIRV_TOOLS}/source/print.cpp + ${SPIRV_TOOLS}/source/print.h + ${SPIRV_TOOLS}/source/software_version.cpp + ${SPIRV_TOOLS}/source/spirv_constant.h + ${SPIRV_TOOLS}/source/spirv_definition.h + ${SPIRV_TOOLS}/source/spirv_endian.cpp + ${SPIRV_TOOLS}/source/spirv_endian.h + ${SPIRV_TOOLS}/source/spirv_optimizer_options.cpp + ${SPIRV_TOOLS}/source/spirv_reducer_options.cpp + ${SPIRV_TOOLS}/source/spirv_target_env.cpp + ${SPIRV_TOOLS}/source/spirv_target_env.h + ${SPIRV_TOOLS}/source/spirv_validator_options.cpp + ${SPIRV_TOOLS}/source/spirv_validator_options.h + ${SPIRV_TOOLS}/source/table.cpp + ${SPIRV_TOOLS}/source/table.h + ${SPIRV_TOOLS}/source/text.cpp + ${SPIRV_TOOLS}/source/text.h + ${SPIRV_TOOLS}/source/text_handler.cpp + ${SPIRV_TOOLS}/source/text_handler.h + ${SPIRV_TOOLS}/source/util/bit_vector.cpp + ${SPIRV_TOOLS}/source/util/bit_vector.h + ${SPIRV_TOOLS}/source/util/bitutils.h + ${SPIRV_TOOLS}/source/util/hex_float.h + ${SPIRV_TOOLS}/source/util/parse_number.cpp + ${SPIRV_TOOLS}/source/util/parse_number.h + ${SPIRV_TOOLS}/source/util/string_utils.cpp + ${SPIRV_TOOLS}/source/util/string_utils.h + ${SPIRV_TOOLS}/source/util/timer.h + ${SPIRV_TOOLS}/source/val/basic_block.cpp + ${SPIRV_TOOLS}/source/val/construct.cpp + ${SPIRV_TOOLS}/source/val/decoration.h + ${SPIRV_TOOLS}/source/val/function.cpp + ${SPIRV_TOOLS}/source/val/instruction.cpp + ${SPIRV_TOOLS}/source/val/validate.cpp + ${SPIRV_TOOLS}/source/val/validate.h + ${SPIRV_TOOLS}/source/val/validate_adjacency.cpp + ${SPIRV_TOOLS}/source/val/validate_annotation.cpp + ${SPIRV_TOOLS}/source/val/validate_arithmetics.cpp + ${SPIRV_TOOLS}/source/val/validate_atomics.cpp + ${SPIRV_TOOLS}/source/val/validate_barriers.cpp + ${SPIRV_TOOLS}/source/val/validate_bitwise.cpp + ${SPIRV_TOOLS}/source/val/validate_builtins.cpp + ${SPIRV_TOOLS}/source/val/validate_capability.cpp + ${SPIRV_TOOLS}/source/val/validate_cfg.cpp + ${SPIRV_TOOLS}/source/val/validate_composites.cpp + ${SPIRV_TOOLS}/source/val/validate_constants.cpp + ${SPIRV_TOOLS}/source/val/validate_conversion.cpp + ${SPIRV_TOOLS}/source/val/validate_debug.cpp + ${SPIRV_TOOLS}/source/val/validate_decorations.cpp + ${SPIRV_TOOLS}/source/val/validate_derivatives.cpp + ${SPIRV_TOOLS}/source/val/validate_execution_limitations.cpp + ${SPIRV_TOOLS}/source/val/validate_extensions.cpp + ${SPIRV_TOOLS}/source/val/validate_function.cpp + ${SPIRV_TOOLS}/source/val/validate_id.cpp + ${SPIRV_TOOLS}/source/val/validate_image.cpp + ${SPIRV_TOOLS}/source/val/validate_instruction.cpp + ${SPIRV_TOOLS}/source/val/validate_interfaces.cpp + ${SPIRV_TOOLS}/source/val/validate_layout.cpp + ${SPIRV_TOOLS}/source/val/validate_literals.cpp + ${SPIRV_TOOLS}/source/val/validate_logicals.cpp + ${SPIRV_TOOLS}/source/val/validate_memory.cpp + ${SPIRV_TOOLS}/source/val/validate_memory_semantics.cpp + ${SPIRV_TOOLS}/source/val/validate_mesh_shading.cpp + ${SPIRV_TOOLS}/source/val/validate_misc.cpp + ${SPIRV_TOOLS}/source/val/validate_mode_setting.cpp + ${SPIRV_TOOLS}/source/val/validate_non_uniform.cpp + ${SPIRV_TOOLS}/source/val/validate_primitives.cpp + ${SPIRV_TOOLS}/source/val/validate_ray_query.cpp + ${SPIRV_TOOLS}/source/val/validate_ray_tracing.cpp + ${SPIRV_TOOLS}/source/val/validate_scopes.cpp + ${SPIRV_TOOLS}/source/val/validate_small_type_uses.cpp + ${SPIRV_TOOLS}/source/val/validate_type.cpp + ${SPIRV_TOOLS}/source/val/validation_state.cpp +) + +target_sources(spirv-opt PRIVATE ${SPIRV_OPT_SOURCES}) diff --git a/cmake/3rdparty/webgpu.cmake b/cmake/bgfx/3rdparty/webgpu.cmake similarity index 100% rename from cmake/3rdparty/webgpu.cmake rename to cmake/bgfx/3rdparty/webgpu.cmake diff --git a/cmake/bgfx/CMakeLists.txt b/cmake/bgfx/CMakeLists.txt index 56f857d..2af54c8 100644 --- a/cmake/bgfx/CMakeLists.txt +++ b/cmake/bgfx/CMakeLists.txt @@ -21,3 +21,12 @@ if(BGFX_BUILD_TOOLS_GEOMETRY) include(geometryc.cmake) include(geometryv.cmake) endif() +if(BGFX_BUILD_TOOLS_SHADER) + include(3rdparty/spirv-opt.cmake) + include(3rdparty/spirv-cross.cmake) + include(3rdparty/glslang.cmake) + include(3rdparty/glsl-optimizer.cmake) + include(3rdparty/fcpp.cmake) + include(3rdparty/webgpu.cmake) + include(shaderc.cmake) +endif() diff --git a/cmake/bgfx/geometryc.cmake b/cmake/bgfx/geometryc.cmake index 02fdcd5..2f2a431 100644 --- a/cmake/bgfx/geometryc.cmake +++ b/cmake/bgfx/geometryc.cmake @@ -10,7 +10,7 @@ add_executable(geometryc) -# Grab the texturec source files +# Grab the geometryc source files file( GLOB_RECURSE GEOMETRYC_SOURCES # diff --git a/cmake/bgfx/shaderc.cmake b/cmake/bgfx/shaderc.cmake new file mode 100644 index 0000000..f8e46a1 --- /dev/null +++ b/cmake/bgfx/shaderc.cmake @@ -0,0 +1,70 @@ +# 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 . + +add_executable(shaderc) + +#target_include_directories( +# shaderc +# PRIVATE +# ${BIMG_DIR}/include # +# ${GLSL_OPTIMIZER}/include # +# ${GLSL_OPTIMIZER}/src/mesa # +# ${GLSL_OPTIMIZER}/src/mapi # +# ${GLSL_OPTIMIZER}/src/glsl # +#) + +target_link_libraries( + shaderc + PRIVATE bx + bgfx-vertexlayout + fcpp + glslang + glsl-optimizer + spirv-opt + spirv-cross +) +target_link_libraries( + shaderc + PRIVATE bx + bimg + bgfx-vertexlayout + fcpp + glslang + glsl-optimizer + spirv-opt + spirv-cross + webgpu +) +if(BGFX_AMALGAMATED) + target_link_libraries(shaderc PRIVATE bgfx-shader) +endif() + +# Grab the shaderc source files +file( + GLOB + SHADERC_SOURCES # + ${BGFX_DIR}/tools/shaderc/*.cpp # + ${BGFX_DIR}/tools/shaderc/*.h # + ${BGFX_DIR}/src/shader* # +) + +target_sources(shaderc PRIVATE ${SHADERC_SOURCES}) + +set_target_properties(geometryc PROPERTIES FOLDER "bgfx/tools") + +if(BGFX_BUILD_TOOLS AND BGFX_CUSTOM_TARGETS) + add_dependencies(tools shaderc) +endif() + +if(ANDROID) + target_link_libraries(shaderc PRIVATE log) +elseif(IOS) + set_target_properties(shaderc PROPERTIES MACOSX_BUNDLE ON MACOSX_BUNDLE_GUI_IDENTIFIER shaderc) +endif() diff --git a/cmake/tools.cmake b/cmake/tools.cmake deleted file mode 100644 index 41c7e4a..0000000 --- a/cmake/tools.cmake +++ /dev/null @@ -1,13 +0,0 @@ -# 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(BGFX_BUILD_TOOLS_SHADER) - include(${CMAKE_CURRENT_LIST_DIR}/tools/shaderc.cmake) -endif() diff --git a/cmake/tools/shaderc.cmake b/cmake/tools/shaderc.cmake deleted file mode 100644 index 1d0a407..0000000 --- a/cmake/tools/shaderc.cmake +++ /dev/null @@ -1,54 +0,0 @@ -# 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 . - -include(CMakeParseArguments) - -include(${CMAKE_CURRENT_LIST_DIR}/../3rdparty/fcpp.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/../3rdparty/glsl-optimizer.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/../3rdparty/glslang.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/../3rdparty/spirv-cross.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/../3rdparty/spirv-tools.cmake) -include(${CMAKE_CURRENT_LIST_DIR}/../3rdparty/webgpu.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 - ${BGFX_DIR}/tools/shaderc/shaderc_metal.cpp -) -target_compile_definitions(shaderc PRIVATE "-D_CRT_SECURE_NO_WARNINGS") -set_target_properties(shaderc PROPERTIES FOLDER "bgfx/tools") -target_link_libraries( - shaderc - PRIVATE bx - bimg - bgfx-vertexlayout - bgfx-shader - fcpp - glsl-optimizer - glslang - spirv-cross - spirv-tools - webgpu -) - -if(BGFX_CUSTOM_TARGETS) - add_dependencies(tools shaderc) -endif() - -if(ANDROID) - target_link_libraries(shaderc PRIVATE log) -elseif(IOS) - set_target_properties(shaderc PROPERTIES MACOSX_BUNDLE ON MACOSX_BUNDLE_GUI_IDENTIFIER shaderc) -endif()