Skip to content

Commit

Permalink
Rework build system
Browse files Browse the repository at this point in the history
  • Loading branch information
yeetari committed Jun 9, 2024
1 parent d5660fe commit dcaa1a8
Show file tree
Hide file tree
Showing 5 changed files with 217 additions and 158 deletions.
65 changes: 49 additions & 16 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,56 @@ project(vull VERSION 0.1.0 LANGUAGES ASM CXX)
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(CMakeDependentOption)
include(FetchContent)
include(VullModule)
include(VullVpak)

option(VULL_BUILD_GLTF "Build the vpak tool with glTF support" OFF)
option(VULL_BUILD_PNG "Build the vpak tool with PNG support" OFF)
option(VULL_BUILD_SANDBOX "Build sandbox" ON)
option(VULL_BUILD_TESTS "Build tests" OFF)
set(VULL_ALL_COMPONENTS "graphics;physics;script;ui;x11-window")
set(VULL_ENABLE_COMPONENTS "${VULL_ALL_COMPONENTS}" CACHE STRING "")

if(VULL_BUILD_TESTS)
enable_testing()
endif()
# Ensure enabled components are valid.
foreach(component ${VULL_ENABLE_COMPONENTS})
if(NOT "${component}" IN_LIST VULL_ALL_COMPONENTS)
message(FATAL_ERROR "Unknown vull component ${component}")
endif()
endforeach()

# Create variables for enabled components.
foreach(component ${VULL_ALL_COMPONENTS})
string(TOUPPER "${component}" upper_component)
string(REGEX REPLACE "-" "_" upper_component "${upper_component}")
if("${component}" IN_LIST VULL_ENABLE_COMPONENTS)
set(VULL_BUILD_${upper_component} TRUE)
else()
set(VULL_BUILD_${upper_component} FALSE)
endif()
endforeach()

# TODO: Make vpak tool not require graphics component.
cmake_dependent_option(VULL_BUILD_VPAK "Build the vpak tool" ON "VULL_BUILD_GRAPHICS" OFF)
cmake_dependent_option(VULL_BUILD_SANDBOX "Build the vull sandbox" ${PROJECT_IS_TOP_LEVEL}
"VULL_BUILD_GRAPHICS;VULL_BUILD_PHYSICS;VULL_BUILD_UI;VULL_BUILD_X11_WINDOW" OFF)
option(VULL_BUILD_TESTS "Build the vull tests" ${PROJECT_IS_TOP_LEVEL})

find_package(Freetype)
find_package(harfbuzz)
find_package(X11)
find_package(xxHash REQUIRED)
find_package(Zstd REQUIRED)
find_program(GLSLC glslc REQUIRED)

if(VULL_BUILD_UI)
find_package(Freetype REQUIRED)
find_package(harfbuzz REQUIRED)
endif()

if(VULL_BUILD_X11_WINDOW)
find_package(X11 REQUIRED)
endif()

# TODO
if(VULL_BUILD_TESTS)
enable_testing()
endif()

function(add_shader name)
set(source ${CMAKE_CURRENT_SOURCE_DIR}/${name})
set(binary ${CMAKE_CURRENT_BINARY_DIR}/${name}.spv)
Expand All @@ -52,12 +83,14 @@ function(add_shader name)
endif()

# TODO: This shouldn't be needed.
set_property(TARGET vull-vulkan APPEND PROPERTY SOURCES ${binary})
set_property(TARGET vull APPEND PROPERTY SOURCES ${binary})
endfunction()

add_subdirectory(docs)
add_subdirectory(engine)
if(VULL_BUILD_SANDBOX)
add_subdirectory(sandbox)
endif()
add_subdirectory(tools)

#add_subdirectory(docs)
#add_subdirectory(engine)
#if(VULL_BUILD_SANDBOX)
# add_subdirectory(sandbox)
#endif()
#add_subdirectory(tools)
161 changes: 86 additions & 75 deletions engine/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,81 +1,92 @@
vull_module(core xxHash::xxHash Zstd::Zstd)
vull_module(graphics vull::core vull::vulkan)
vull_module(json vull::core)
vull_module(physics vull::core)
vull_module(script vull::core)
vull_module(shaderc vull::core)
vull_module(ui vull::core vull::vulkan PRIVATE Freetype::Freetype harfbuzz::harfbuzz)
vull_module(vulkan vull::core)
vull_module(x11-window vull::core PRIVATE X11::xcb X11::xcb_randr X11::xcb_util X11::xcb_xkb)
add_library(vull)
target_compile_features(vull PRIVATE cxx_std_20)
target_include_directories(vull PUBLIC include)
target_link_libraries(vull PRIVATE xxHash::xxHash Zstd::Zstd)

add_subdirectory(sources)
target_include_directories(vull-core PUBLIC include)
target_include_directories(vull-script PRIVATE sources)
if(VULL_BUILD_UI)
target_link_libraries(vull PRIVATE Freetype::Freetype harfbuzz::harfbuzz)
endif()

add_shader(shaders/blit_tonemap.frag)
add_shader(shaders/default.frag)
add_shader(shaders/default.vert)
add_shader(shaders/deferred.comp)
add_shader(shaders/depth_reduce.comp)
add_shader(shaders/draw_cull.comp)
add_shader(shaders/fst.vert)
add_shader(shaders/light_cull.comp)
add_shader(shaders/object.vsl)
add_shader(shaders/shadow.vert)
add_shader(shaders/skybox.frag)
add_shader(shaders/skybox.vert)
add_shader(shaders/ui.frag)
add_shader(shaders/ui.vert)
if(VULL_BUILD_X11_WINDOW)
target_link_libraries(vull PRIVATE X11::xcb X11::xcb_randr X11::xcb_util X11::xcb_xkb)
endif()

function(vull_depend_builtin target)
target_add_vpak(${target} builtin.vpak
${CMAKE_SOURCE_DIR}/engine/fonts/Inter-Medium.otf /fonts/Inter-Medium
${CMAKE_SOURCE_DIR}/engine/fonts/RobotoMono-Regular.ttf /fonts/RobotoMono-Regular
${CMAKE_BINARY_DIR}/engine/shaders/blit_tonemap.frag.spv /shaders/blit_tonemap.frag
${CMAKE_BINARY_DIR}/engine/shaders/default.frag.spv /shaders/default.frag
${CMAKE_BINARY_DIR}/engine/shaders/default.vert.spv /shaders/default.vert
${CMAKE_BINARY_DIR}/engine/shaders/deferred.comp.spv /shaders/deferred.comp
${CMAKE_BINARY_DIR}/engine/shaders/depth_reduce.comp.spv /shaders/depth_reduce.comp
${CMAKE_BINARY_DIR}/engine/shaders/draw_cull.comp.spv /shaders/draw_cull.comp
${CMAKE_BINARY_DIR}/engine/shaders/fst.vert.spv /shaders/fst.vert
${CMAKE_BINARY_DIR}/engine/shaders/light_cull.comp.spv /shaders/light_cull.comp
${CMAKE_BINARY_DIR}/engine/shaders/object.vsl.spv /shaders/object
${CMAKE_BINARY_DIR}/engine/shaders/shadow.vert.spv /shaders/shadow.vert
${CMAKE_BINARY_DIR}/engine/shaders/skybox.frag.spv /shaders/skybox.frag
${CMAKE_BINARY_DIR}/engine/shaders/skybox.vert.spv /shaders/skybox.vert
${CMAKE_BINARY_DIR}/engine/shaders/ui.frag.spv /shaders/ui.frag
${CMAKE_BINARY_DIR}/engine/shaders/ui.vert.spv /shaders/ui.vert)
endfunction()
add_library(vull-shaderc)
target_compile_features(vull-shaderc PRIVATE cxx_std_20)
target_link_libraries(vull-shaderc PRIVATE vull)

set_target_properties(vull-vulkan PROPERTIES
UNITY_BUILD ON
UNITY_BUILD_MODE GROUP)
set_source_files_properties(
sources/vulkan/buffer.cc
sources/vulkan/command_buffer.cc
sources/vulkan/descriptor_builder.cc
sources/vulkan/fence.cc
sources/vulkan/image.cc
sources/vulkan/pipeline.cc
sources/vulkan/query_pool.cc
sources/vulkan/queue.cc
sources/vulkan/semaphore.cc
sources/vulkan/shader.cc
sources/vulkan/swapchain.cc
PROPERTIES UNITY_GROUP "vulkan-wrappers"
)
# Add alias targets.
add_library(vull::vull ALIAS vull)
add_library(vull::shaderc ALIAS vull-shaderc)

if(VULL_BUILD_TESTS)
add_executable(vull-tests)
add_subdirectory(tests)
target_compile_features(vull-tests PRIVATE cxx_std_20)
target_link_libraries(vull-tests PRIVATE vull::core vull::json vull::script vull::shaderc)
add_subdirectory(sources)

add_custom_command(TARGET vull-tests
POST_BUILD
COMMAND "${CMAKE_COMMAND}"
-D "\"TEST_EXECUTABLE:FILEPATH=$<TARGET_FILE:vull-tests>\""
-P \"${CMAKE_SOURCE_DIR}/cmake/VullAddTests.cmake\"
BYPRODUCTS vull_tests.cmake)
set_property(DIRECTORY APPEND PROPERTY TEST_INCLUDE_FILES vull_tests.cmake)
endif()
#target_include_directories(vull-script PRIVATE sources)
#
#add_shader(shaders/blit_tonemap.frag)
#add_shader(shaders/default.frag)
#add_shader(shaders/default.vert)
#add_shader(shaders/deferred.comp)
#add_shader(shaders/depth_reduce.comp)
#add_shader(shaders/draw_cull.comp)
#add_shader(shaders/fst.vert)
#add_shader(shaders/light_cull.comp)
#add_shader(shaders/object.vsl)
#add_shader(shaders/shadow.vert)
#add_shader(shaders/skybox.frag)
#add_shader(shaders/skybox.vert)
#add_shader(shaders/ui.frag)
#add_shader(shaders/ui.vert)
#
#function(vull_depend_builtin target)
# target_add_vpak(${target} builtin.vpak
# ${CMAKE_SOURCE_DIR}/engine/fonts/Inter-Medium.otf /fonts/Inter-Medium
# ${CMAKE_SOURCE_DIR}/engine/fonts/RobotoMono-Regular.ttf /fonts/RobotoMono-Regular
# ${CMAKE_BINARY_DIR}/engine/shaders/blit_tonemap.frag.spv /shaders/blit_tonemap.frag
# ${CMAKE_BINARY_DIR}/engine/shaders/default.frag.spv /shaders/default.frag
# ${CMAKE_BINARY_DIR}/engine/shaders/default.vert.spv /shaders/default.vert
# ${CMAKE_BINARY_DIR}/engine/shaders/deferred.comp.spv /shaders/deferred.comp
# ${CMAKE_BINARY_DIR}/engine/shaders/depth_reduce.comp.spv /shaders/depth_reduce.comp
# ${CMAKE_BINARY_DIR}/engine/shaders/draw_cull.comp.spv /shaders/draw_cull.comp
# ${CMAKE_BINARY_DIR}/engine/shaders/fst.vert.spv /shaders/fst.vert
# ${CMAKE_BINARY_DIR}/engine/shaders/light_cull.comp.spv /shaders/light_cull.comp
# ${CMAKE_BINARY_DIR}/engine/shaders/object.vsl.spv /shaders/object
# ${CMAKE_BINARY_DIR}/engine/shaders/shadow.vert.spv /shaders/shadow.vert
# ${CMAKE_BINARY_DIR}/engine/shaders/skybox.frag.spv /shaders/skybox.frag
# ${CMAKE_BINARY_DIR}/engine/shaders/skybox.vert.spv /shaders/skybox.vert
# ${CMAKE_BINARY_DIR}/engine/shaders/ui.frag.spv /shaders/ui.frag
# ${CMAKE_BINARY_DIR}/engine/shaders/ui.vert.spv /shaders/ui.vert)
#endfunction()
#
#set_target_properties(vull-vulkan PROPERTIES
# UNITY_BUILD ON
# UNITY_BUILD_MODE GROUP)
#set_source_files_properties(
# sources/vulkan/buffer.cc
# sources/vulkan/command_buffer.cc
# sources/vulkan/descriptor_builder.cc
# sources/vulkan/fence.cc
# sources/vulkan/image.cc
# sources/vulkan/pipeline.cc
# sources/vulkan/query_pool.cc
# sources/vulkan/queue.cc
# sources/vulkan/semaphore.cc
# sources/vulkan/shader.cc
# sources/vulkan/swapchain.cc
# PROPERTIES UNITY_GROUP "vulkan-wrappers"
#)
#
#if(VULL_BUILD_TESTS)
# add_executable(vull-tests)
# add_subdirectory(tests)
# target_compile_features(vull-tests PRIVATE cxx_std_20)
# target_link_libraries(vull-tests PRIVATE vull::core vull::json vull::script vull::shaderc)
#
# add_custom_command(TARGET vull-tests
# POST_BUILD
# COMMAND "${CMAKE_COMMAND}"
# -D "\"TEST_EXECUTABLE:FILEPATH=$<TARGET_FILE:vull-tests>\""
# -P \"${CMAKE_SOURCE_DIR}/cmake/VullAddTests.cmake\"
# BYPRODUCTS vull_tests.cmake)
# set_property(DIRECTORY APPEND PROPERTY TEST_INCLUDE_FILES vull_tests.cmake)
#endif()
9 changes: 9 additions & 0 deletions engine/include/vull/test/test.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#pragma once

namespace vull {



} // namespace vull

#define VULL_TEST_CASE(suite, name)
Loading

0 comments on commit dcaa1a8

Please sign in to comment.