mirror of
https://git.lynn.is/Gwen/pretty-automata.git
synced 2024-05-05 01:11:09 +02:00
137 lines
4.1 KiB
CMake
137 lines
4.1 KiB
CMake
cmake_minimum_required(VERSION 3.25)
|
|
project(shader-automaton)
|
|
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set(VERBOSE yes)
|
|
find_package(OpenGL REQUIRED)
|
|
find_package(GLEW REQUIRED)
|
|
find_package(glfw3 3.3 REQUIRED)
|
|
|
|
include(FetchContent)
|
|
|
|
include(EmbedResources.cmake)
|
|
|
|
FetchContent_Declare(
|
|
perlin
|
|
GIT_REPOSITORY https://github.com/Reputeless/PerlinNoise.git
|
|
GIT_TAG bdf39fe92b2a585cdef485bcec2bca8ab5614095
|
|
)
|
|
|
|
FetchContent_Declare(
|
|
imgui
|
|
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
|
GIT_TAG 70cca1eac07aa3809bdd3717253c3754a5b7cfcc
|
|
)
|
|
|
|
FetchContent_Declare(
|
|
gtest
|
|
GIT_REPOSITORY https://github.com/google/googletest.git
|
|
GIT_TAG bc860af08783b8113005ca7697da5f5d49a8056f
|
|
)
|
|
|
|
FetchContent_Declare(
|
|
dejavufonts
|
|
URL https://github.com/dejavu-fonts/dejavu-fonts/releases/download/version_2_37/dejavu-fonts-ttf-2.37.tar.bz2
|
|
URL_HASH SHA1=7fa15e7b9676fc3915338c41e76ad454c344fff5
|
|
)
|
|
|
|
FetchContent_MakeAvailable(perlin)
|
|
FetchContent_MakeAvailable(imgui)
|
|
|
|
|
|
add_executable(shader-automaton
|
|
src/main.cpp
|
|
src/options.cpp
|
|
src/colormaps/viridis.cpp
|
|
src/rule_presets.cpp
|
|
src/argparser.h
|
|
|
|
src/rule_presets.h
|
|
src/options.h
|
|
src/shader-helper.cpp
|
|
src/shader-helper.h
|
|
src/color.cpp
|
|
src/color.h
|
|
src/colormaps/colormaps.cpp
|
|
src/colormaps/dualcolor.cpp
|
|
src/colormaps/viridis.cpp
|
|
src/colormaps/rainbow.cpp
|
|
src/program.cpp
|
|
src/program.h
|
|
)
|
|
|
|
target_compile_definitions(shader-automaton PRIVATE PROGRAM_NAME="${CMAKE_PROJECT_NAME}" PROGRAM_VERSION="${CMAKE_PROJECT_VERSION}")
|
|
|
|
function(preprocess_shader name)
|
|
add_custom_command(
|
|
OUTPUT "preprocessed-shaders/${name}"
|
|
COMMAND ./preprocess-shader.sh "${name}"
|
|
DEPENDS "shaders/${name}"
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
|
PRE_BUILD
|
|
VERBATIM
|
|
)
|
|
endfunction()
|
|
|
|
|
|
preprocess_shader("automaton.comp")
|
|
preprocess_shader("automaton.vert")
|
|
preprocess_shader("automaton.frag")
|
|
|
|
# TODO: this whole shader preprocessing and embedding is just broken
|
|
# it happens half at configure time rather than build time so the preprocessed files are outdated
|
|
|
|
# TODO: maybe rewrite this tool to put multiple namespaces into one target
|
|
# and to maybe define the contents separately from the target, if possible
|
|
add_embedded_binary_resources(
|
|
shader-automaton-shaders
|
|
OUT_DIR embedded-resources
|
|
HEADER shaders.h
|
|
NAMESPACE resources::shaders
|
|
RESOURCE_NAMES automaton_comp automaton_vert automaton_frag
|
|
RESOURCES
|
|
"${PROJECT_SOURCE_DIR}/preprocessed-shaders/automaton.comp"
|
|
"${PROJECT_SOURCE_DIR}/preprocessed-shaders/automaton.vert"
|
|
"${PROJECT_SOURCE_DIR}/preprocessed-shaders/automaton.frag"
|
|
)
|
|
|
|
|
|
FetchContent_MakeAvailable(dejavufonts)
|
|
add_embedded_binary_resources(
|
|
shader-automaton-fonts
|
|
OUT_DIR embedded-resources
|
|
HEADER fonts.h
|
|
NAMESPACE resources::fonts
|
|
RESOURCE_NAMES DejaVuSansMono
|
|
RESOURCES
|
|
"${dejavufonts_SOURCE_DIR}/ttf/DejaVuSansMono.ttf"
|
|
)
|
|
|
|
|
|
|
|
target_link_libraries(shader-automaton OpenGL::GL GLEW::GLEW glfw shader-automaton-shaders shader-automaton-fonts)
|
|
|
|
file(COPY_FILE "${perlin_SOURCE_DIR}/PerlinNoise.hpp" "${perlin_BINARY_DIR}/PerlinNoise.hpp")
|
|
target_include_directories(shader-automaton PRIVATE ${perlin_BINARY_DIR})
|
|
|
|
target_include_directories(shader-automaton PRIVATE "${imgui_SOURCE_DIR}/backends" "${imgui_SOURCE_DIR}")
|
|
target_sources(shader-automaton PRIVATE
|
|
${imgui_SOURCE_DIR}/imgui.cpp
|
|
${imgui_SOURCE_DIR}/imgui_demo.cpp
|
|
${imgui_SOURCE_DIR}/imgui_draw.cpp
|
|
${imgui_SOURCE_DIR}/imgui_tables.cpp
|
|
${imgui_SOURCE_DIR}/imgui_widgets.cpp
|
|
${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp
|
|
${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp
|
|
)
|
|
|
|
|
|
enable_testing()
|
|
FetchContent_MakeAvailable(gtest)
|
|
|
|
include(GoogleTest)
|
|
|
|
add_executable(ColorTest tests/color.cpp src/color.cpp)
|
|
target_link_libraries(ColorTest GTest::gtest_main)
|
|
target_include_directories(ColorTest PRIVATE src)
|
|
gtest_discover_tests(ColorTest) |