mirror of
https://github.com/bkaradzic/bgfx.cmake.git
synced 2026-02-17 21:12:35 +01:00
Supports building bgfx, tools, & examples. Detects shader modifications and automatically recompiles them for DirectX11.
151 lines
4.6 KiB
CMake
151 lines
4.6 KiB
CMake
# 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()
|