This repository was archived by the owner on Apr 7, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathApplicationTools.cmake
63 lines (56 loc) · 2.63 KB
/
ApplicationTools.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
include_guard(GLOBAL)
file(RELATIVE_PATH REL_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_LIST_DIR})
include_directories(${CMAKE_CURRENT_BINARY_DIR}/${REL_PATH})
unset(HECL_APPLICATION_REPS_TARGETS_LIST CACHE)
unset(HECL_APPLICATION_REPS_INCLUDES_LIST CACHE)
unset(HECL_APPLICATION_PIPELINE_REPS_UNIVERSAL CACHE)
unset(HECL_APPLICATION_PIPELINE_REPS CACHE)
unset(HECL_APPLICATION_STAGE_REPS CACHE)
# add_pipeline_rep(my::fully::qualified::class my_class_header.hpp [UNIVERSAL])
function(add_pipeline_rep name header)
if(IS_ABSOLUTE ${header})
set(theHeader ${header})
else()
set(theHeader ${CMAKE_CURRENT_SOURCE_DIR}/${header})
endif()
if (NOT ${theHeader} IN_LIST HECL_APPLICATION_REPS_INCLUDES_LIST)
set(HECL_APPLICATION_REPS_INCLUDES_LIST "${HECL_APPLICATION_REPS_INCLUDES_LIST};${theHeader}" CACHE INTERNAL "")
endif()
if ("${ARGV2}" STREQUAL "UNIVERSAL")
set(HECL_APPLICATION_PIPELINE_REPS_UNIVERSAL "${HECL_APPLICATION_PIPELINE_REPS_UNIVERSAL};${name}" CACHE INTERNAL "")
else()
set(HECL_APPLICATION_PIPELINE_REPS "${HECL_APPLICATION_PIPELINE_REPS};${name}" CACHE INTERNAL "")
endif()
endfunction()
# add_stage_rep(my::fully::qualified::class my_class_header.hpp)
function(add_stage_rep name header)
if(IS_ABSOLUTE ${header})
set(theHeader ${header})
else()
set(theHeader ${CMAKE_CURRENT_SOURCE_DIR}/${header})
endif()
if (NOT ${theHeader} IN_LIST HECL_APPLICATION_REPS_INCLUDES_LIST)
set(HECL_APPLICATION_REPS_INCLUDES_LIST "${HECL_APPLICATION_REPS_INCLUDES_LIST};${theHeader}" CACHE INTERNAL "")
endif()
set(HECL_APPLICATION_STAGE_REPS "${HECL_APPLICATION_STAGE_REPS};${name}" CACHE INTERNAL "")
endfunction()
function(add_shader_target target)
if (NOT ${target} IN_LIST HECL_APPLICATION_REPS_TARGETS_LIST)
set(HECL_APPLICATION_REPS_TARGETS_LIST "${HECL_APPLICATION_REPS_TARGETS_LIST};${target}" CACHE INTERNAL "")
endif()
endfunction()
function(add_shader file)
get_filename_component(name ${file} NAME)
get_filename_component(dir ${file} DIRECTORY)
shaderc(${CMAKE_CURRENT_BINARY_DIR}/${dir}/shader_${name} ${file}.shader)
add_stage_rep(shader_${name} ${CMAKE_CURRENT_BINARY_DIR}/${dir}/shader_${name}.hpp)
add_pipeline_rep(shader_${name} ${CMAKE_CURRENT_BINARY_DIR}/${dir}/shader_${name}.hpp UNIVERSAL)
add_library(shader_${name} ${CMAKE_CURRENT_BINARY_DIR}/${dir}/shader_${name}.hpp ${CMAKE_CURRENT_BINARY_DIR}/${dir}/shader_${name}.cpp)
add_shader_target(shader_${name})
endfunction()
function(add_special_shader name)
add_stage_rep(${name} ${name}.hpp)
add_pipeline_rep(${name} ${name}.hpp UNIVERSAL)
add_library(${name} ${name}.hpp ${ARGN})
add_shader_target(${name})
endfunction()