Initial commit, only tested in Visual Studio 2015.

Supports building bgfx, tools, & examples.
Detects shader modifications and automatically recompiles them for DirectX11.
This commit is contained in:
Joshua Brookover
2016-09-05 18:51:13 -05:00
commit b030cbac0c
14 changed files with 602 additions and 0 deletions

11
CMakeLists.txt Normal file
View File

@@ -0,0 +1,11 @@
# Copyright (c) 2016 Joshua Brookover
cmake_minimum_required( VERSION 3.0 )
project( bgfx )
set_property( GLOBAL PROPERTY USE_FOLDERS ON )
include( cmake/bx.cmake )
include( cmake/bgfx.cmake )
include( cmake/tools.cmake )
include( cmake/examples.cmake )

5
LICENSE Normal file
View File

@@ -0,0 +1,5 @@
Copyright (C) 2016 Joshua Brookover
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

9
cmake/3rdparty/fcpp.cmake vendored Normal file
View File

@@ -0,0 +1,9 @@
# Copyright (c) 2016 Joshua Brookover
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 )
set_target_properties( fcpp PROPERTIES COMPILE_FLAGS "/W0" )
set_target_properties( fcpp PROPERTIES FOLDER "3rdparty" )
set_source_files_properties( ${BGFX_DIR}/3rdparty/fcpp/usecpp.c PROPERTIES HEADER_FILE_ONLY ON )

32
cmake/3rdparty/glsl-optimizer.cmake vendored Normal file
View File

@@ -0,0 +1,32 @@
# Copyright (c) 2016 Joshua Brookover
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
)
# glcpp
file( GLOB GLCPP_SOURCES ${BGFX_DIR}/3rdparty/glsl-optimizer/src/glsl/glcpp/*.c ${BGFX_DIR}/3rdparty/glsl-optimizer/src/util/*.c )
add_library( glcpp ${GLCPP_SOURCES} )
target_include_directories( glcpp PUBLIC ${GLSL-OPTIMIZER_INCLUDES} )
set_target_properties( glcpp PROPERTIES COMPILE_FLAGS "/W0" )
set_target_properties( glcpp PROPERTIES FOLDER "3rdparty" )
# mesa
file( GLOB MESA_SOURCES ${BGFX_DIR}/3rdparty/glsl-optimizer/src/mesa/program/*.c ${BGFX_DIR}/3rdparty/glsl-optimizer/src/mesa/main/*.c )
add_library( mesa ${MESA_SOURCES} )
target_include_directories( mesa PUBLIC ${GLSL-OPTIMIZER_INCLUDES} )
set_target_properties( mesa PROPERTIES COMPILE_FLAGS "/W0" )
set_target_properties( mesa PROPERTIES FOLDER "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 ${GLSL-OPTIMIZER_SOURCES} )
target_link_libraries( glsl-optimizer glcpp mesa )
set_target_properties( glsl-optimizer PROPERTIES COMPILE_FLAGS "/W0" )
set_target_properties( glsl-optimizer PROPERTIES FOLDER "3rdparty" )

7
cmake/3rdparty/ib-compress.cmake vendored Normal file
View File

@@ -0,0 +1,7 @@
# Copyright (c) 2016 Joshua Brookover
file( GLOB IB_COMPRESS_SOURCES ${BGFX_DIR}/3rdparty/ib-compress/*.cpp ${BGFX_DIR}/3rdparty/ib-compress/*.h )
add_library( ib-compress STATIC ${IB_COMPRESS_SOURCES} )
target_include_directories( ib-compress PUBLIC ${BGFX_DIR}/3rdparty )
set_target_properties( ib-compress PROPERTIES FOLDER "3rdparty" )

9
cmake/3rdparty/ocornut-imgui.cmake vendored Normal file
View File

@@ -0,0 +1,9 @@
# Copyright (c) 2016 Joshua Brookover
file( GLOB OCORNUT_IMGUI_SOURCES ${BGFX_DIR}/3rdparty/ocornut-imgui/*.cpp ${BGFX_DIR}/3rdparty/ocornut-imgui/*.h ${BGFX_DIR}/3rdparty/ocornut-imgui/*.inl )
add_library( ocornut-imgui STATIC ${OCORNUT_IMGUI_SOURCES} )
target_compile_definitions( ocornut-imgui PRIVATE "-D_CRT_SECURE_NO_WARNINGS" "-D__STDC_FORMAT_MACROS" )
target_include_directories( ocornut-imgui PUBLIC ${BGFX_DIR}/3rdparty )
target_link_libraries( ocornut-imgui PUBLIC bx )
set_target_properties( ocornut-imgui PROPERTIES FOLDER "3rdparty" )

27
cmake/bgfx.cmake Normal file
View File

@@ -0,0 +1,27 @@
# Copyright (c) 2016 Joshua Brookover
set( BGFX_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bgfx" )
file( GLOB BGFX_SOURCES ${BGFX_DIR}/src/*.cpp ${BGFX_DIR}/src/*.mm ${BGFX_DIR}/src/*.h )
add_library( bgfx STATIC ${BGFX_SOURCES} )
if( MSVC )
target_compile_definitions( bgfx PRIVATE "-D_CRT_SECURE_NO_WARNINGS" )
endif()
target_include_directories( bgfx PRIVATE ${BGFX_DIR}/3rdparty ${BGFX_DIR}/3rdparty/dxsdk/include ${BGFX_DIR}/3rdparty/khronos )
target_include_directories( bgfx PUBLIC ${BGFX_DIR}/include )
target_link_libraries( bgfx PUBLIC bx )
if( MSVC )
target_link_libraries( bgfx PUBLIC psapi )
endif()
set_source_files_properties( ${BGFX_DIR}/src/amalgamated.cpp PROPERTIES HEADER_FILE_ONLY ON )
set_source_files_properties( ${BGFX_DIR}/src/amalgamated.mm PROPERTIES HEADER_FILE_ONLY ON )
set_source_files_properties( ${BGFX_DIR}/src/hmd_ovr.cpp PROPERTIES HEADER_FILE_ONLY ON )
set_source_files_properties( ${BGFX_DIR}/src/glcontext_ppapi.cpp PROPERTIES HEADER_FILE_ONLY ON )
set_source_files_properties( ${BGFX_DIR}/src/glcontext_glx.cpp PROPERTIES HEADER_FILE_ONLY ON )
set_source_files_properties( ${BGFX_DIR}/src/glcontext_egl.cpp PROPERTIES HEADER_FILE_ONLY ON )
if( NOT APPLE )
set_source_files_properties( ${BGFX_DIR}/src/glcontext_eagl.mm PROPERTIES HEADER_FILE_ONLY ON )
set_source_files_properties( ${BGFX_DIR}/src/glcontext_nsgl.mm PROPERTIES HEADER_FILE_ONLY ON )
set_source_files_properties( ${BGFX_DIR}/src/renderer_mtl.mm PROPERTIES HEADER_FILE_ONLY ON )
endif()

15
cmake/bx.cmake Normal file
View File

@@ -0,0 +1,15 @@
# Copyright (c) 2016 Joshua Brookover
set( BX_DIR "${CMAKE_CURRENT_SOURCE_DIR}/bx" )
add_library( bx INTERFACE )
target_include_directories( bx INTERFACE ${BX_DIR}/include )
if( MSVC )
target_include_directories( bx INTERFACE ${BX_DIR}/include/compat/msvc )
elseif( MINGW )
target_include_directories( bx INTERFACE ${BX_DIR}/include/compat/mingw )
elseif( APPLE )
target_include_directories( bx INTERFACE ${BX_DIR}/include/compat/osx )
endif()

116
cmake/examples.cmake Normal file
View File

@@ -0,0 +1,116 @@
# Copyright (c) 2016 Joshua Brookover
include( CMakeParseArguments )
include( cmake/util/ConfigureDebugging.cmake )
include( cmake/3rdparty/ib-compress.cmake )
include( cmake/3rdparty/ocornut-imgui.cmake )
function( add_bgfx_shader FILE FOLDER )
get_filename_component( FILENAME "${FILE}" NAME_WE )
string( SUBSTRING "${FILENAME}" 0 2 TYPE )
if( "${TYPE}" STREQUAL "fs" )
set( TYPE "FRAGMENT" )
set( D3D_PREFIX "ps" )
elseif( "${TYPE}" STREQUAL "vs" )
set( TYPE "VERTEX" )
set( D3D_PREFIX "vs" )
else()
set( TYPE "" )
endif()
if( NOT "${TYPE}" STREQUAL "" )
set( COMMON FILE ${FILE} OUTPUT ${BGFX_DIR}/examples/runtime/shaders/dx11/${FILENAME}.bin ${TYPE} INCLUDES ${BGFX_DIR}/src )
shaderc( ${COMMON} WINDOWS PROFILE ${D3D_PREFIX}_4_0 )
#shaderc( ${COMMON} LINUX PROFILE 120 )
endif()
endfunction()
function( add_example ARG_NAME )
# Parse arguments
cmake_parse_arguments( ARG "COMMON" "" "DIRECTORIES;SOURCES" ${ARGN} )
# Get all source files
list( APPEND ARG_DIRECTORIES "${BGFX_DIR}/examples/${ARG_NAME}" )
set( SOURCES "" )
set( SHADERS "" )
foreach( DIR ${ARG_DIRECTORIES} )
file( GLOB GLOB_SOURCES ${DIR}/*.c ${DIR}/*.cpp ${DIR}/*.h ${DIR}/*.sc )
list( APPEND SOURCES ${GLOB_SOURCES} )
file( GLOB GLOB_SHADERS ${DIR}/*.sc )
list( APPEND SHADERS ${GLOB_SHADERS} )
endforeach()
# Add target
if( ARG_COMMON )
add_library( example-${ARG_NAME} STATIC ${SOURCES} )
target_compile_definitions( example-${ARG_NAME} PRIVATE "-D_CRT_SECURE_NO_WARNINGS" "-D__STDC_FORMAT_MACROS" )
target_include_directories( example-${ARG_NAME} PUBLIC ${BGFX_DIR}/examples/common )
target_link_libraries( example-${ARG_NAME} PUBLIC bgfx ib-compress ocornut-imgui )
else()
add_executable( example-${ARG_NAME} WIN32 ${SOURCES} )
target_compile_definitions( example-${ARG_NAME} PRIVATE "-D_CRT_SECURE_NO_WARNINGS" "-D__STDC_FORMAT_MACROS" )
target_link_libraries( example-${ARG_NAME} example-common )
configure_debugging( example-${ARG_NAME} WORKING_DIR ${BGFX_DIR}/examples/runtime )
if( MSVC )
set_target_properties( example-${ARG_NAME} PROPERTIES LINK_FLAGS "/ENTRY:\"mainCRTStartup\"" )
endif()
endif()
# Configure shaders
if( NOT ARG_COMMON )
foreach( SHADER ${SHADERS} )
add_bgfx_shader( ${SHADER} ${ARG_NAME} )
endforeach()
source_group( "Shader Files" FILES ${SHADERS})
endif()
# Directory name
set_target_properties( example-${ARG_NAME} PROPERTIES FOLDER "examples" )
endfunction()
# Add common library for examples
add_example(
common
COMMON
DIRECTORIES
${BGFX_DIR}/examples/common/debugdraw
${BGFX_DIR}/examples/common/entry
${BGFX_DIR}/examples/common/font
${BGFX_DIR}/examples/common/imgui
${BGFX_DIR}/examples/common/nanovg
)
# Add examples
add_example( 00-helloworld )
add_example( 01-cubes )
add_example( 02-metaballs )
add_example( 03-raymarch )
add_example( 04-mesh )
add_example( 05-instancing )
add_example( 06-bump )
add_example( 07-callback )
add_example( 08-update )
add_example( 09-hdr )
add_example( 10-font )
add_example( 11-fontsdf )
add_example( 12-lod )
add_example( 13-stencil )
add_example( 14-shadowvolumes )
add_example( 15-shadowmaps-simple )
add_example( 16-shadowmaps )
add_example( 17-drawstress )
add_example( 18-ibl )
add_example( 19-oit )
add_example( 20-nanovg )
add_example( 21-deferred )
add_example( 22-windows )
add_example( 23-vectordisplay )
add_example( 24-nbody )
add_example( 25-c99 )
add_example( 26-occlusion )
add_example( 27-terrain )
add_example( 28-wireframe )
add_example( 29-debugdraw )
add_example( 30-picking )
add_example( 31-rsm )

3
cmake/tools.cmake Normal file
View File

@@ -0,0 +1,3 @@
# Copyright (c) 2016 Joshua Brookover
include( cmake/tools/shaderc.cmake )

191
cmake/tools/shaderc.cmake Normal file
View File

@@ -0,0 +1,191 @@
# Copyright (c) 2016 Joshua Brookover
include( CMakeParseArguments )
include( cmake/3rdparty/fcpp.cmake )
include( cmake/3rdparty/glsl-optimizer.cmake )
add_executable( shaderc bgfx/tools/shaderc/shaderc.cpp bgfx/tools/shaderc/shaderc.h bgfx/tools/shaderc/shaderc_glsl.cpp bgfx/tools/shaderc/shaderc_hlsl.cpp )
target_compile_definitions( shaderc PRIVATE "-D_CRT_SECURE_NO_WARNINGS" )
set_target_properties( shaderc PROPERTIES FOLDER "tools" )
target_link_libraries( shaderc bx bgfx fcpp glsl-optimizer )
# shaderc( FILE file OUTPUT file ... )
# See shaderc_parse() below for inputs
function( shaderc )
cmake_parse_arguments( ARG "" "FILE;OUTPUT" "" ${ARGN} )
shaderc_parse( CLI ${ARGN} )
#add_custom_command( OUTPUT ${ARG_OUTPUT} COMMAND "C:/Users/Josh/Downloads/bgfx-examples/shaderc" ${CLI} MAIN_DEPENDENCY ${ARG_FILE} )
add_custom_command( OUTPUT ${ARG_OUTPUT} COMMAND "$<TARGET_FILE:shaderc>" ${CLI} MAIN_DEPENDENCY ${ARG_FILE} COMMENT "Compiling shader ${ARG_FILE}" )
endfunction()
# shaderc_parse(
# FILE filename
# OUTPUT filename
# FRAGMENT|VERTEX
# ANDROID|ASM_JS|IOS|LINUX|NACL|OSX|WINDOWS
# [PROFILE profile]
# [O 0|1|2|3]
# [VARYINGDEF filename]
# [BIN2C filename]
# [INCLUDES include;include]
# [DEFINES include;include]
# [DEPENDS]
# [PREPROCESS]
# [RAW]
# [VERBOSE]
# [DEBUG]
# [DISASM]
# [WERROR]
# )
function( shaderc_parse ARG_OUT )
cmake_parse_arguments( ARG "DEPENDS;ANDROID;ASM_JS;IOS;LINUX;NACL;OSX;WINDOWS;PREPROCESS;RAW;FRAGMENT;VERTEX;VERBOSE;DEBUG;DISASM;WERROR" "FILE;OUTPUT;VARYINGDEF;BIN2C;PROFILE;O" "INCLUDES;DEFINES" ${ARGN} )
set( CLI "" )
# -f
if( ARG_FILE )
list( APPEND CLI "-f" "${ARG_FILE}" )
endif()
# -i
if( ARG_INCLUDES )
list( APPEND CLI "-i" )
set( INCLUDES "" )
foreach( INCLUDE ${ARG_INCLUDES} )
if( NOT "${INCLUDES}" STREQUAL "" )
set( INCLUDES "${INCLUDES}\\\\;${INCLUDE}" )
else()
set( INCLUDES "${INCLUDE}" )
endif()
endforeach()
list( APPEND CLI "${INCLUDES}" )
endif()
# -o
if( ARG_OUTPUT )
list( APPEND CLI "-o" "${ARG_OUTPUT}" )
endif()
# --bin2c
if( ARG_BIN2C )
list( APPEND CLI "--bin2c" "${ARG_BIN2C}" )
endif()
# --depends
if( ARG_DEPENDS )
list( APPEND CLI "--depends" )
endif()
# --platform
set( PLATFORM "" )
set( PLATFORMS "ANDROID;ASM_JS;IOS;LINUX;NACL;OSX;WINDOWS" )
foreach( P ${PLATFORMS} )
if( ARG_${P} )
if( PLATFORM )
message( SEND_ERROR "Call to shaderc_parse() cannot have both flags ${PLATFORM} and ${P}." )
return()
endif()
set( PLATFORM "${P}" )
endif()
endforeach()
if( "${PLATFORM}" STREQUAL "" )
message( SEND_ERROR "Call to shaderc_parse() must have a platform flag: ${PLATFORMS}" )
return()
elseif( "${PLATFORM}" STREQUAL "ANDROID" )
list( APPEND CLI "--platform" "android" )
elseif( "${PLATFORM}" STREQUAL "ASM_JS" )
list( APPEND CLI "--platform" "asm.js" )
elseif( "${PLATFORM}" STREQUAL "IOS" )
list( APPEND CLI "--platform" "ios" )
elseif( "${PLATFORM}" STREQUAL "LINUX" )
list( APPEND CLI "--platform" "linux" )
elseif( "${PLATFORM}" STREQUAL "NACL" )
list( APPEND CLI "--platform" "nacl" )
elseif( "${PLATFORM}" STREQUAL "OSX" )
list( APPEND CLI "--platform" "osx" )
elseif( "${PLATFORM}" STREQUAL "WINDOWS" )
list( APPEND CLI "--platform" "windows" )
endif()
# --preprocess
if( ARG_PREPROCESS )
list( APPEND CLI "--preprocess" )
endif()
# --define
if( ARG_DEFINES )
list( APPEND CLI "--defines" )
set( DEFINES "" )
foreach( DEFINE ${ARG_DEFINES} )
if( NOT "${DEFINES}" STREQUAL "" )
set( DEFINES "${DEFINES}\\\\;${DEFINE}" )
else()
set( DEFINES "${DEFINE}" )
endif()
endforeach()
list( APPEND CLI "${DEFINES}" )
endif()
# --raw
if( ARG_RAW )
list( APPEND CLI "--raw" )
endif()
# --type
set( TYPE "" )
set( TYPES "FRAGMENT;VERTEX" )
foreach( T ${TYPES} )
if( ARG_${T} )
if( TYPE )
message( SEND_ERROR "Call to shaderc_parse() cannot have both flags ${TYPE} and ${T}." )
return()
endif()
set( TYPE "${T}" )
endif()
endforeach()
if( "${TYPE}" STREQUAL "" )
message( SEND_ERROR "Call to shaderc_parse() must have a type flag: ${TYPES}" )
return()
elseif( "${TYPE}" STREQUAL "FRAGMENT" )
list( APPEND CLI "--type" "fragment" )
elseif( "${TYPE}" STREQUAL "VERTEX" )
list( APPEND CLI "--type" "vertex" )
endif()
# --varyingdef
if( ARG_VARYINGDEF )
list( APPEND CLI "--varyingdef" "${ARG_VARYINGDEF}" )
endif()
# --verbose
if( ARG_VERBOSE )
list( APPEND CLI "--verbose" )
endif()
# --debug
if( ARG_DEBUG )
list( APPEND CLI "--debug" )
endif()
# --disasm
if( ARG_DISASM )
list( APPEND CLI "--disasm" )
endif()
# --profile
if( ARG_PROFILE )
list( APPEND CLI "--profile" "${ARG_PROFILE}" )
endif()
# -O
if( ARG_O )
list( APPEND CLI "-O" "${ARG_O}" )
endif()
# --Werror
if( ARG_WERROR )
list( APPEND CLI "--Werror" )
endif()
set( ${ARG_OUT} ${CLI} PARENT_SCOPE )
endfunction()

View File

@@ -0,0 +1,150 @@
# Copyright (c) 2016 Joshua Brookover
#
# configure_debugging( TARGET [OPTIONS...] )
#
# Configures the debugging settings in visual studio.
# Results in a no-op on non visual studio builds.
# Must be called in the same cmake file as the add_executable command.
#
# See OPTIONS variable in the function for supported user settings.
# See CONFIGS variable in the function for supported cmake configurations.
# See PROCESSORS variable in the function for supported architecture configurations.
#
# All variables can be set with one of the following formats:
#
# (OPTION)
# (OPTION)_(CONFIG)
# (OPTION)_(CONFIG)_(ARCH)
# (OPTION)_(ARCH)
#
# So, some examples (variables should be all caps):
#
# WORKING_DIR
# WORKING_DIR_X64
# WORKING_DIR_RELEASE_WIN32
# WORKING_DIR_X64
#
# An example of a full command:
#
# configure_debugging(target COMMAND "node.exe" COMMAND_X64 "node64.exe" WORKING_DIR ${CMAKE_SOURCE_DIR} DEBUGGER_ENV "PATH=%PATH%\\;$(ProjectDir)")
include( CMakeParseArguments )
function( configure_debugging ARG_TARGET )
if( MSVC )
# Visual Studio Options
set(
OPTIONS
WORKING_DIR LocalDebuggerWorkingDirectory
DEBUGGER_ENV LocalDebuggerEnvironment
COMMAND LocalDebuggerCommand
COMMAND_ARGS LocalDebuggerCommandArguments
)
# Valid Configurations
set(
CONFIGS
Debug
Release
MinSizeRel
RelWithDebInfo
)
# Processors
set(
PROCESSORS
Win32
x64
)
# Begin hackery
if( ${CMAKE_SIZEOF_VOID_P} EQUAL 8 )
set( ACTIVE_PROCESSOR "x64" )
else()
set( ACTIVE_PROCESSOR "Win32" )
endif()
# Fix issues with semicolons, thx cmake
foreach( ARG ${ARGN} )
string( REPLACE ";" "\\\\\\\\\\\\\\;" RES "${ARG}" )
list( APPEND ARGS "${RES}" )
endforeach()
# Build options for cmake_parse_arguments, result is ONE_ARG variable
set( ODD ON )
foreach( OPTION ${OPTIONS} )
if( ODD )
set( ARG ${OPTION} )
list( APPEND ONE_ARG ${ARG} )
foreach( CONFIG ${CONFIGS} )
string( TOUPPER ${CONFIG} CONFIG )
list( APPEND ONE_ARG ${ARG}_${CONFIG} )
foreach( PROCESSOR ${PROCESSORS} )
string( TOUPPER ${PROCESSOR} PROCESSOR )
list( APPEND ONE_ARG ${ARG}_${CONFIG}_${PROCESSOR} )
endforeach()
endforeach()
foreach( PROCESSOR ${PROCESSORS} )
string( TOUPPER ${PROCESSOR} PROCESSOR )
list( APPEND ONE_ARG ${ARG}_${PROCESSOR} )
endforeach()
set( ODD OFF )
else()
set( ODD ON )
endif()
endforeach()
cmake_parse_arguments( ARG "" "${ONE_ARG}" "" ${ARGS} )
# Parse options, fills in all variables of format ARG_(ARG)_(CONFIG)_(PROCESSOR), for example ARG_WORKING_DIR_DEBUG_X64
set( ODD ON )
foreach( OPTION ${OPTIONS} )
if( ODD )
set( ARG ${OPTION} )
foreach( CONFIG ${CONFIGS} )
string( TOUPPER ${CONFIG} CONFIG_CAP )
if( "${ARG_${ARG}_${CONFIG_CAP}}" STREQUAL "" )
set( ARG_${ARG}_${CONFIG_CAP} ${ARG_${ARG}} )
endif()
foreach( PROCESSOR ${PROCESSORS} )
string( TOUPPER ${PROCESSOR} PROCESSOR_CAP )
if( "${ARG_${ARG}_${CONFIG_CAP}_${PROCESSOR_CAP}}" STREQUAL "" )
if( "${ARG_${ARG}_${PROCESSOR_CAP}}" STREQUAL "" )
set( ARG_${ARG}_${CONFIG_CAP}_${PROCESSOR_CAP} ${ARG_${ARG}_${CONFIG_CAP}} )
else()
set( ARG_${ARG}_${CONFIG_CAP}_${PROCESSOR_CAP} ${ARG_${ARG}_${PROCESSOR_CAP}} )
endif()
endif()
if( NOT "${ARG_${ARG}_${CONFIG_CAP}_${PROCESSOR_CAP}}" STREQUAL "" )
endif()
endforeach()
endforeach()
set( ODD OFF )
else()
set( ODD ON )
endif()
endforeach()
# Create string to put in proj.vcxproj.user file
set( RESULT "" )
foreach( CONFIG ${CONFIGS} )
string( TOUPPER ${CONFIG} CONFIG_CAPS )
foreach( PROCESSOR ${PROCESSORS} )
if( "${PROCESSOR}" STREQUAL "${ACTIVE_PROCESSOR}" )
string( TOUPPER ${PROCESSOR} PROCESSOR_CAPS )
set( RESULT "${RESULT}\n <PropertyGroup Condition=\"'$(Configuration)|$(Platform)'=='${CONFIG}|${PROCESSOR}'\">" )
set( ODD ON )
foreach( OPTION ${OPTIONS} )
if( ODD )
set( ARG ${OPTION} )
set( ODD OFF )
else()
set( VALUE ${ARG_${ARG}_${CONFIG_CAPS}_${PROCESSOR_CAPS}} )
if( NOT "${VALUE}" STREQUAL "" )
set( RESULT "${RESULT}\n <${OPTION}>${VALUE}</${OPTION}>" )
endif()
set( ODD ON )
endif()
endforeach()
set( RESULT "${RESULT}\n </PropertyGroup>" )
endif()
endforeach()
endforeach()
configure_file( ${CMAKE_SOURCE_DIR}/cmake/util/vcxproj.user.in ${CMAKE_CURRENT_BINARY_DIR}/${ARG_TARGET}.vcxproj.user @ONLY )
endif()
endfunction()

View File

@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">@RESULT@
</Project>

24
readme.md Normal file
View File

@@ -0,0 +1,24 @@
bgfx.cmake
===================
This repo contains a bunch of cmake files that can be used to build bgfx with CMake. To get started, pull down the repo and run these commands from within the root directory of the repo:
```
git clone git@github.com:bkaradzic/bx.git
git clone git@github.com:bkaradzic/bgfx.git
mkdir build
cd build
cmake ..
```
Features
-------------
* No outside dependencies besides bx, bgfx, and CMake.
* Only tested in Visual Studio 2015 so far.
* Compiles bgfx, tools & examples.
* Detects shader modifications and automatically rebuilds them (DirectX11 shaders only for now).
* Uses CMake interface libraries (linking against bgfx is one line of cmake code via target_link_libraries).
License
-------------
The license is BSD with no clauses meaning you can use this software however you want but I cannot be held liable for damages.