summaryrefslogtreecommitdiffstats
path: root/Projects/Asteroids/CMakeLists.txt
blob: 0995dbbe95f90dd420467161232734657d81c72d (plain)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
cmake_minimum_required (VERSION 3.10)

project(Asteroids CXX)

set(SOURCE
    src/asteroids_d3d11.cpp
    src/asteroids_d3d12.cpp
    src/asteroids_DE.cpp
    src/camera.cpp
    src/DDSTextureLoader.cpp
    src/mesh.cpp
    src/simplexnoise1234.c
    src/simulation.cpp
    src/texture.cpp
    src/WinWrapper.cpp
)

set(INCLUDE
    src/asteroids_d3d11.h
    src/asteroids_d3d12.h
    src/asteroids_DE.h
    src/camera.h
    src/dds.h
    src/DDSTextureLoader.h
    src/descriptor.h
    src/mesh.h
    src/noise.h
    src/settings.h
    src/simplexnoise1234.h
    src/simulation.h
    src/subset_d3d12.h
    src/texture.h
    src/upload_heap.h
    src/util.h
)

set(PIXEL_SHADERS
    src/asteroid_ps.hlsl
    src/asteroid_ps_d3d11.hlsl
    src/asteroid_ps_diligent.hlsl
    src/font_ps.hlsl
    src/skybox_ps.hlsl
    src/sprite_ps.hlsl
)

set(VERTEX_SHADERS
    src/asteroid_vs.hlsl
    src/asteroid_vs_diligent.hlsl
    src/skybox_vs.hlsl
    src/sprite_vs.hlsl
)

set(SHADERS ${PIXEL_SHADERS} ${VERTEX_SHADERS})

set(COMPILED_SHADERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/CompiledShaders)
file(MAKE_DIRECTORY "${COMPILED_SHADERS_DIR}")
set_source_files_properties(${SHADERS} PROPERTIES
    VS_SHADER_ENTRYPOINT "%(Filename)"
    VS_SHADER_MODEL 5.0
    VS_SHADER_VARIABLE_NAME "g_%(Filename)"
    VS_SHADER_OUTPUT_HEADER_FILE "${COMPILED_SHADERS_DIR}/%(Filename).h"
)
set_source_files_properties(${PIXEL_SHADERS} PROPERTIES VS_SHADER_TYPE Pixel)
set_source_files_properties(${VERTEX_SHADERS} PROPERTIES VS_SHADER_TYPE Vertex)
set_source_files_properties(src/asteroid_ps.hlsl PROPERTIES VS_SHADER_MODEL 5.1)

set(GUI
    src/font.h
    src/gui.h
    src/intel_clear_bd_50_usascii.inl
    src/sprite.h
    src/stb_font_consolas_bold_50_usascii.inl
)

set(MEDIA
    DiligentD3D11.dds
    DiligentD3D12.dds
    DiligentGL.dds
    directx11.dds
    directx12.dds
    starbox_1024.dds
)

if(WIN32)
    add_executable(Asteroids WIN32 
        ${SOURCE} 
        ${INCLUDE} 
        ${SHADERS}
        ${GUI}
        ${MEDIA}
        SDK/Include/d3dx12.h
        src/common_defines.h
        src/shader_common.h
        readme.md
    )
    set_target_properties(Asteroids PROPERTIES 
        LINK_FLAGS "/SUBSYSTEM:CONSOLE"
        VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
    )
    copy_required_dlls(Asteroids)

else()
    message(FATAL_ERROR "Unsupported platform")
endif()

target_include_directories(Asteroids
PRIVATE
    Src
    SDK/Include
    ${CMAKE_CURRENT_BINARY_DIR}/CompiledShaders
)

get_supported_backends(ENGINE_LIBRARIES)

target_link_libraries(Asteroids
PRIVATE
    Diligent-BuildSettings
    Diligent-TargetPlatform
    Diligent-TextureLoader
    Diligent-Common
    Diligent-GraphicsTools
    ${ENGINE_LIBRARIES}
    d3d11.lib
    d3d12.lib
    ninput.lib
    winmm.lib
    dxgi.lib
    shcore.lib
)

set_common_target_properties(Asteroids)

if(MSVC)
    target_compile_definitions(Asteroids PRIVATE NOMINMAX)
    # Disable MSVC-specific warnings
    # - w4201: nonstandard extension used: nameless struct/union
    # - w4324: structure was padded due to alignment specifier
    # - w4238: nonstandard extension used: class rvalue used as lvalue
    target_compile_options(Asteroids PRIVATE /wd4201 /wd4324 /wd4238)
endif()

source_group("src" FILES ${SOURCE})
source_group("include" FILES ${INCLUDE})
source_group("shaders" FILES 
    ${SHADERS}
    src/common_defines.h
    src/shader_common.h
)
source_group("SDK" FILES SDK/Include/d3dx12.h)
source_group("GUI" FILES ${GUI})
source_group("media" FILES ${MEDIA})