File: CMakeLists.txt

package info (click to toggle)
lager 0.1.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,888 kB
  • sloc: cpp: 10,602; javascript: 10,433; makefile: 214; python: 100; sh: 98
file content (190 lines) | stat: -rw-r--r-- 6,546 bytes parent folder | download | duplicates (2)
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190

add_custom_target(examples COMMENT "Build all examples")
if (lager_BUILD_TESTS)
  add_dependencies(check examples)
endif()

# std  examples
# ====================

add_executable(counter-std EXCLUDE_FROM_ALL
  counter/std/main.cpp)
target_link_libraries(counter-std lager-example)
add_dependencies(examples counter-std)

# ncurses examples
# ================

set(CURSES_NEED_WIDE true)

find_package(Curses)

if(Curses_FOUND)
  if (lager_BUILD_DEBUGGER_EXAMPLES)
    set(counter_ncurses_sources
      counter/ncurses/main.cpp
      counter/ncurses/terminal.cpp)
    set(counter_ncurses_include_directories
      ${CURSES_INCLUDE_DIR})
    set(counter_ncurses_link_libraries
      lager-debugger-example
      ${CURSES_LIBRARIES})

    add_executable(counter-ncurses EXCLUDE_FROM_ALL ${counter_ncurses_sources})
    target_include_directories(counter-ncurses SYSTEM PUBLIC ${counter_ncurses_include_directories})
    target_link_libraries(counter-ncurses ${counter_ncurses_link_libraries})
    target_compile_definitions(counter-ncurses PUBLIC DEBUGGER)
    add_dependencies(examples counter-ncurses)

    add_executable(counter-ncurses-tree EXCLUDE_FROM_ALL ${counter_ncurses_sources})
    target_include_directories(counter-ncurses-tree SYSTEM PUBLIC ${counter_ncurses_include_directories})
    target_link_libraries(counter-ncurses-tree ${counter_ncurses_link_libraries})
    target_compile_definitions(counter-ncurses-tree PUBLIC TREE_DEBUGGER)
    add_dependencies(examples counter-ncurses-tree)

    add_executable(counter-ncurses-meta EXCLUDE_FROM_ALL ${counter_ncurses_sources})
    target_include_directories(counter-ncurses-meta SYSTEM PUBLIC ${counter_ncurses_include_directories})
    target_link_libraries(counter-ncurses-meta ${counter_ncurses_link_libraries})
    target_compile_definitions(counter-ncurses-meta PUBLIC DEBUGGER META_DEBUGGER)
    add_dependencies(examples counter-ncurses-meta)
  endif()
else()
  message(STATUS "Disabling Curses based examples")
endif()

# sdl examples
# ===========

find_package(SDL2)
find_package(SDL2_ttf)

if (SDL2_FOUND AND SDL2_ttf_FOUND)
  if(lager_BUILD_DEBUGGER_EXAMPLES)
    add_executable(counter-sdl2 EXCLUDE_FROM_ALL
      counter/sdl2/main.cpp)
    target_include_directories(counter-sdl2 SYSTEM PUBLIC
      ${SDL2_INCLUDE_DIRS}
      ${SDL2_TTF_INCLUDE_DIR})
    target_link_libraries(counter-sdl2
      lager-debugger-example
      ${SDL2_LIBRARIES}
      ${SDL2_TTF_LIBRARIES})
    add_dependencies(examples counter-sdl2)

    add_executable(autopong EXCLUDE_FROM_ALL
      autopong/autopong.cpp
      autopong/sdl2/main.cpp)
    target_include_directories(autopong SYSTEM PUBLIC
      ${SDL2_INCLUDE_DIRS}
      ${SDL2_TTF_INCLUDE_DIR})
    target_link_libraries(autopong
      lager-debugger-example
      ${SDL2_LIBRARIES}
      ${SDL2_TTF_LIBRARIES})
    add_dependencies(examples autopong)

    add_executable(autopong-debug EXCLUDE_FROM_ALL
      autopong/autopong.cpp
      autopong/sdl2/main.cpp)
    target_compile_definitions(autopong-debug PUBLIC DEBUGGER)
    target_include_directories(autopong-debug SYSTEM PUBLIC
      ${SDL2_INCLUDE_DIRS}
      ${SDL2_TTF_INCLUDE_DIR})
    target_link_libraries(autopong-debug
      lager-debugger-example
      ${SDL2_LIBRARIES}
      ${SDL2_TTF_LIBRARIES})
    add_dependencies(examples autopong-debug)
  endif()
else()
  message(STATUS "Disabling SDL based examples")
endif()

# qt examples
# ===========

find_package(Qt5Core)
find_package(Qt5Concurrent)
find_package(Qt5Qml)
find_package(Qt5Gui)
find_package(Qt5Widgets)
find_package(Qt5QuickControls2)

find_package(Boost 1.56)

if (Qt5Core_FOUND AND Qt5Concurrent_FOUND AND Qt5Gui_FOUND AND Qt5Widgets_FOUND AND Qt5Qml_FOUND AND Qt5QuickControls2_FOUND AND Boost_FOUND)
  add_executable(todo-qml EXCLUDE_FROM_ALL
    todo/item.cpp
    todo/model.cpp
    todo/qml/main.cpp)
  set_target_properties(todo-qml PROPERTIES AUTOMOC YES)
  target_link_libraries(todo-qml lager-example Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Qml Qt5::QuickControls2)
  target_compile_definitions(todo-qml PRIVATE
    LAGER_TODO_QML_DIR="${CMAKE_CURRENT_SOURCE_DIR}/todo/qml")
  add_dependencies(examples todo-qml)

  add_executable(todo-qml-redux EXCLUDE_FROM_ALL
    todo/item.cpp
    todo/model.cpp
    todo/app.cpp
    todo/qml-redux/main.cpp)
  set_target_properties(todo-qml-redux PROPERTIES AUTOMOC YES)
  target_link_libraries(todo-qml-redux lager-example Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Qml Qt5::QuickControls2)
  target_compile_definitions(todo-qml-redux PRIVATE
    LAGER_TODO_QML_DIR="${CMAKE_CURRENT_SOURCE_DIR}/todo/qml-redux")
  add_dependencies(examples todo-qml-redux)

  add_executable(snake-qml EXCLUDE_FROM_ALL
    snake/model.cpp snake/qml/main.cpp snake/qml/qmodel.cpp)
  set_target_properties(snake-qml PROPERTIES AUTOMOC YES)
  target_link_libraries(snake-qml lager-example Qt5::Core Qt5::Concurrent Qt5::Gui Qt5::Widgets Qt5::Qml Qt5::QuickControls2)
  target_include_directories(snake-qml PRIVATE ${Boost_INCLUDE_DIRS})
  target_compile_definitions(snake-qml PRIVATE
    LAGER_SNAKE_QML_DIR="${CMAKE_CURRENT_SOURCE_DIR}/snake/qml")
  add_dependencies(examples snake-qml)
else()
  message(STATUS "Disabling Qt based examples")
endif()

# ImGui examples
# ==============

set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL)

set(imgui_source_dir "$ENV{IMGUI_SOURCE_DIR}")

set(imgui_sources
  "${imgui_source_dir}/imgui.cpp"
  "${imgui_source_dir}/imgui_draw.cpp"
  "${imgui_source_dir}/imgui_widgets.cpp"
  "${imgui_source_dir}/imgui_impl_sdl.cpp"
  "${imgui_source_dir}/imgui_impl_opengl3.cpp")

find_program(EMXX em++)

if (EMXX AND OPENGL_FOUND AND SDL2_FOUND AND EXISTS "${imgui_source_dir}/imgui.h")
  message(STATUS "ImGui found in ${imgui_source_dir}")

  set(extra_emcc_flags $ENV{NIX_CFLAGS_COMPILE})
  separate_arguments(extra_emcc_flags)

  add_custom_target(todo-imgui
    COMMAND ${EMXX} ${extra_emcc_flags}
      -Os
      -std=c++17 -I ${CMAKE_SOURCE_DIR}
      -I ${imgui_source_dir}
      ${imgui_sources}
      ${CMAKE_CURRENT_SOURCE_DIR}/todo/item.cpp
      ${CMAKE_CURRENT_SOURCE_DIR}/todo/model.cpp
      ${CMAKE_CURRENT_SOURCE_DIR}/todo/imgui/main.cpp
      -s USE_SDL=2 -s USE_WEBGL2=1 -s WASM=1 -s FULL_ES3=1
      -s ALLOW_MEMORY_GROWTH=1
      --emrun
      --shell-file ${CMAKE_SOURCE_DIR}/resources/emscripten_shell_minimal.html
      -o ${CMAKE_CURRENT_BINARY_DIR}/todo-imgui.html
    COMMENT "Build todo-imgui emscripten example")
  add_dependencies(examples todo-imgui)
else()
  message(STATUS "Disabling ImGui based examples")
endif()