diff --git a/3rdParty/CMakeLists.txt b/3rdParty/CMakeLists.txt index d345507..6808d83 100644 --- a/3rdParty/CMakeLists.txt +++ b/3rdParty/CMakeLists.txt @@ -22,6 +22,11 @@ add_subdirectory(rapidyaml) add_subdirectory(libarchive) add_subdirectory(boost) add_subdirectory(units) + +if(ENABLE_TEST) + add_subdirectory(catch2) +endif() + if (NOT IOS) add_subdirectory(libjpeg-turbo) add_subdirectory(curl) diff --git a/3rdParty/catch2/CMakeLists.txt b/3rdParty/catch2/CMakeLists.txt new file mode 100644 index 0000000..78de218 --- /dev/null +++ b/3rdParty/catch2/CMakeLists.txt @@ -0,0 +1,14 @@ +include (FetchContent) + +if(NOT DEFINED CATCH_REPO) + set(CATCH_REPO https://github.com/catchorg/Catch2.git) +endif () + +FetchContent_Declare( + Catch2 + GIT_REPOSITORY ${CATCH_REPO} + GIT_TAG v3.6.0 + GIT_SHALLOW TRUE +) + +FetchContent_MakeAvailable(Catch2) \ No newline at end of file diff --git a/3rdParty/curl/CMakeLists.txt b/3rdParty/curl/CMakeLists.txt index c3985a1..bdf9d1b 100644 --- a/3rdParty/curl/CMakeLists.txt +++ b/3rdParty/curl/CMakeLists.txt @@ -1,4 +1,4 @@ -include(../../cmake/Utils.cmake) +include(Utils) set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl) find_package(CURL QUIET) @@ -31,18 +31,18 @@ function(LinkCurl TARGET) find_package(CURL QUIET) if (NOT ${CURL_FOUND}) set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl) - target_include_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/include) - target_link_directories(${TARGET} PRIVATE ${CURL_DEPS_INSTALL}/INSTALL/lib) + target_include_directories(${TARGET} PUBLIC ${CURL_DEPS_INSTALL}/INSTALL/include) + target_link_directories(${TARGET} PUBLIC ${CURL_DEPS_INSTALL}/INSTALL/lib) if (APPLE) - target_link_libraries(${TARGET} PRIVATE curl) + target_link_libraries(${TARGET} PUBLIC curl) elseif (WIN32) - target_link_libraries(${TARGET} PRIVATE ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) + target_link_libraries(${TARGET} PUBLIC ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY}) else () - target_link_libraries(${TARGET} PRIVATE crypto ssl curl) + target_link_libraries(${TARGET} PUBLIC crypto ssl curl) endif () else () - target_include_directories(${TARGET} PRIVATE ${CURL_INCLUDE_DIR}) - target_link_libraries(${TARGET} PRIVATE CURL::libcurl) + target_include_directories(${TARGET} PUBLIC ${CURL_INCLUDE_DIR}) + target_link_libraries(${TARGET} PUBLIC CURL::libcurl) endif () endfunction() \ No newline at end of file diff --git a/3rdParty/imgui/CMakeLists.txt b/3rdParty/imgui/CMakeLists.txt index 832dd6d..c458b94 100644 --- a/3rdParty/imgui/CMakeLists.txt +++ b/3rdParty/imgui/CMakeLists.txt @@ -1,4 +1,5 @@ include(FetchContent) +include(SetupVulkan) if(NOT DEFINED IMGUI_REPO) set(IMGUI_REPO https://github.com/ocornut/imgui.git) diff --git a/3rdParty/libarchive/CMakeLists.txt b/3rdParty/libarchive/CMakeLists.txt index 8adff1e..fa68821 100644 --- a/3rdParty/libarchive/CMakeLists.txt +++ b/3rdParty/libarchive/CMakeLists.txt @@ -1,4 +1,4 @@ -include(../../cmake/Utils.cmake) +include(Utils) find_package(LibArchive QUIET) if (NOT DEFINED LibArchive_LIBRARIES) @@ -28,12 +28,12 @@ function(LinkLibArchive TARGET) find_package(zstd QUIET) find_package(BZip2 QUIET) find_package(LibLZMA QUIET) - target_include_directories(${TARGET} PRIVATE ${LibArchive_INCLUDE_DIR}) - target_link_libraries(${TARGET} PRIVATE ${LibArchive_LIBRARIES} ${ZLIB_LIBRARIES} ${zstd_LIBRARIES} ${LZ4_LIBRARIES}) + target_include_directories(${TARGET} PUBLIC ${LibArchive_INCLUDE_DIR}) + target_link_libraries(${TARGET} PUBLIC ${LibArchive_LIBRARIES} ${ZLIB_LIBRARIES} ${zstd_LIBRARIES} ${LZ4_LIBRARIES}) if (BZIP2_LIBRARIES) - target_link_libraries(${TARGET} PRIVATE ${BZIP2_LIBRARIES}) + target_link_libraries(${TARGET} PUBLIC ${BZIP2_LIBRARIES}) endif() if (LIBLZMA_LIBRARIES) - target_link_libraries(${TARGET} PRIVATE ${LIBLZMA_LIBRARIES}) + target_link_libraries(${TARGET} PUBLIC ${LIBLZMA_LIBRARIES}) endif() endfunction() \ No newline at end of file diff --git a/3rdParty/libjpeg-turbo/CMakeLists.txt b/3rdParty/libjpeg-turbo/CMakeLists.txt index 361be53..ce77077 100644 --- a/3rdParty/libjpeg-turbo/CMakeLists.txt +++ b/3rdParty/libjpeg-turbo/CMakeLists.txt @@ -1,4 +1,4 @@ -include(../../cmake/Utils.cmake) +include(Utils) if (NOT IOS) Find_Package(libjpeg-turbo QUIET) diff --git a/CMakeLists.txt b/CMakeLists.txt index 583bbfa..71e366b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,125 +1,47 @@ cmake_minimum_required(VERSION 3.28 FATAL_ERROR) -option(USE_ASSIMP "If assimp should be used" ON) - -include(cmake/VarsFromFile.cmake) -include(cmake/SetCompilerSettings.cmake) -include(cmake/SetupVulkan.cmake) -include(cmake/Filter.cmake) -include(cmake/AppleHelper.cmake) -include(cmake/SetShaderDependency.cmake) - -set(DEPENDENCY_MIRROR_FILE "DependencyMirrors.txt" CACHE STRING "Dependency mirror") -VarsFromFile("${DEPENDENCY_MIRROR_FILE}") # Load mirror list (for CICD) - set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) +set(CMAKE_CXX_STANDARD 20) if(LINUX) find_package(ECM REQUIRED NO_MODULE) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH}) endif() -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules" "${CMAKE_SOURCE_DIR}/cmake/functions") -option(TRACY_ENABLE "Enable Tracy Profiler" OFF) +include(VarsFromFile) +include(SetCompilerSettings) +include(SetupVulkan) +include(Filter) +include(AppleHelper) +include(SetShaderDependency) -add_subdirectory(3rdParty) +set(DEPENDENCY_MIRROR_FILE "DependencyMirrors.txt" CACHE STRING "Dependency mirror") +VarsFromFile("${DEPENDENCY_MIRROR_FILE}") # Load mirror list (for CICD) + +project (OpenVulkano VERSION 1.0 LANGUAGES C CXX) -project (openVulkanoCpp VERSION 1.0 LANGUAGES C CXX) -if(NOT IOS) - SetOutputDirs("${CMAKE_SOURCE_DIR}/bin") -endif() SetOptimisationSettings() -set(BASH_EXECUTABLE "" CACHE FILEPATH "Path to bash executable") -if ("${BASH_EXECUTABLE}" STREQUAL "") - find_program(BASH_PROGRAM bash NO_CACHE REQUIRED) - set(BASH_EXECUTABLE ${BASH_PROGRAM} CACHE FILEPATH "Path to bash executable" FORCE) -endif() -set(ROOT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR}) -set(SHADER_OUTPUT_DEST ${CMAKE_BINARY_DIR}/GeneratedShaderData) -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/TryCompileShaders.cmake.in ${CMAKE_BINARY_DIR}/TryCompileShaders.cmake @ONLY) -execute_process(COMMAND ${BASH_EXECUTABLE} CompileShaders.sh "${SHADER_OUTPUT_DEST}" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Scripts) -file(GLOB GENERATED_SHADER_SOURCES "${SHADER_OUTPUT_DEST}/*") +# ------------------------- CMAKE OPTIONS ------------------------- +option(USE_ASSIMP "If assimp should be used" ON) +option(TRACY_ENABLE "Enable Tracy Profiler" OFF) +option(ENABLE_TEST "Enable testing" OFF) +option(ENABLE_EXAMPLE "Enable examples" ON) +# ----------------------------------------------------------------- -if(IOS) - set(CMAKE_Swift_LANGUAGE_VERSION 5.0) - enable_language(Swift) - file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.mm" "openVulkanoCpp/*.m" "openVulkanoCpp/*.c" "openVulkanoCpp/*.cpp" "openVulkanoCpp/*.swift") +# First generate 3rdParty Libraries +add_subdirectory(3rdParty) - file(GLOB_RECURSE resources CONFIGURE_DEPENDS "openVulkanoCpp/*.storyboard" "openVulkanoCpp/*.xib") - add_executable(openVulkanoCpp examples/main.m ${resources}) -else() - file(GLOB_RECURSE sources CONFIGURE_DEPENDS "openVulkanoCpp/*.h" "openVulkanoCpp/*.c" "openVulkanoCpp/*.hpp" "openVulkanoCpp/*.cpp" "examples/*.hpp" "examples/*.cpp") - file(GLOB SHADER_SRC_FILES ${ROOT_FOLDER}/openVulkanoCpp/Shader/*) - list(FILTER SHADER_SRC_FILES EXCLUDE REGEX ".*\\.(hpp|cpp)$") - add_executable(openVulkanoCpp examples/main.cpp ${SHADER_SRC_FILES} ${GENERATED_SHADER_SOURCES}) - if (MSVC) - set_property(GLOBAL PROPERTY USE_FOLDERS ON) - source_group("Shaders" FILES ${SHADER_SRC_FILES}) - endif() +# Then generate the OpenVulkano Library +add_subdirectory(openVulkanoCpp) + +if(ENABLE_TEST) + enable_testing() + add_subdirectory(unitTest) endif() -FilterPlatformPaths(sources) -SetWarningSettings(openVulkanoCpp) -set_property(TARGET openVulkanoCpp PROPERTY CXX_STANDARD 20) - -target_sources(openVulkanoCpp PRIVATE ${sources}) -target_include_directories(openVulkanoCpp PUBLIC openVulkanoCpp ${SHADER_OUTPUT_DEST}) - -# Setup IOS -if(IOS) - set(APP_BUNDLE_IDENTIFIER "eu.georgh93.openVulkano") - set(MACOSX_BUNDLE_INFO_STRING ${APP_BUNDLE_IDENTIFIER}) - set(MACOSX_BUNDLE_GUI_IDENTIFIER ${APP_BUNDLE_IDENTIFIER}) - set(MACOSX_BUNDLE_BUNDLE_NAME ${APP_BUNDLE_IDENTIFIER}) - - set(CMAKE_OSX_DEPLOYMENT_TARGET "14.1") # The used ARKit features are only available starting with iOS 14 - - LinkAppleFrameworks(openVulkanoCpp) -endif () - -if (WIN32) - # Ws2 - target_link_libraries(openVulkanoCpp PRIVATE Ws2_32) - - # grabs libcurl.dll libssl-1_1-x64.dll libcrypto-1_1-x64.dll - # TODO: statically link libcurl and it's dependencies - file(GLOB_RECURSE DLLS "${CMAKE_BINARY_DIR}/deps_curl/INSTALL/bin/*.dll") - foreach(DLL ${DLLS}) - add_custom_command(TARGET openVulkanoCpp POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_if_different - ${DLL} $ - ) - endforeach() - - set(CURL_STATIC_LIBS ${CMAKE_BINARY_DIR}/deps_curl/deps_curl) - file(GLOB_RECURSE LIBS "${CURL_STATIC_LIBS}/*.lib") - target_link_libraries(openVulkanoCpp PRIVATE ${LIBS}) -endif () - -SetupVulkan(openVulkanoCpp) -SetShaderDependency(openVulkanoCpp - ${CMAKE_CURRENT_SOURCE_DIR}/openVulkanoCpp/Shader - ${SHADER_OUTPUT_DEST}) - -if (NOT ANDROID AND NOT IOS) - target_link_libraries(openVulkanoCpp PRIVATE glfw pugixml) - target_link_libraries(openVulkanoCpp PRIVATE ftxui::screen ftxui::dom ftxui::component) -endif() - -list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) - -target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp fmt spdlog glm pugixml stb eigen utf8cpp imgui_internal TracyClient stud-uuid ryml unordered_dense Boost::regex units) -LinkCurl(openVulkanoCpp) - -add_compile_definitions(LIBARCHIVE_STATIC) -add_compile_definitions(NOMINMAX) -add_compile_definitions("DEBUG=$") - -SetGlmDefines(openVulkanoCpp) - -LinkAssimp(openVulkanoCpp) -LinkLibArchive(openVulkanoCpp) -LinkLibJpegTurbo(openVulkanoCpp) - -set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT openVulkanoCpp) +# Finally generate the tests and examples +if(ENABLE_EXAMPLE) + add_subdirectory(examples) +endif() \ No newline at end of file diff --git a/cmake/functions/Activation.cmake b/cmake/functions/Activation.cmake new file mode 100644 index 0000000..e69de29 diff --git a/cmake/AppleHelper.cmake b/cmake/functions/AppleHelper.cmake similarity index 100% rename from cmake/AppleHelper.cmake rename to cmake/functions/AppleHelper.cmake diff --git a/cmake/Filter.cmake b/cmake/functions/Filter.cmake similarity index 100% rename from cmake/Filter.cmake rename to cmake/functions/Filter.cmake diff --git a/cmake/SetCompilerSettings.cmake b/cmake/functions/SetCompilerSettings.cmake similarity index 100% rename from cmake/SetCompilerSettings.cmake rename to cmake/functions/SetCompilerSettings.cmake diff --git a/cmake/SetShaderDependency.cmake b/cmake/functions/SetShaderDependency.cmake similarity index 100% rename from cmake/SetShaderDependency.cmake rename to cmake/functions/SetShaderDependency.cmake diff --git a/cmake/SetupVulkan.cmake b/cmake/functions/SetupVulkan.cmake similarity index 100% rename from cmake/SetupVulkan.cmake rename to cmake/functions/SetupVulkan.cmake diff --git a/cmake/Utils.cmake b/cmake/functions/Utils.cmake similarity index 100% rename from cmake/Utils.cmake rename to cmake/functions/Utils.cmake diff --git a/cmake/VarsFromFile.cmake b/cmake/functions/VarsFromFile.cmake similarity index 100% rename from cmake/VarsFromFile.cmake rename to cmake/functions/VarsFromFile.cmake diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt new file mode 100644 index 0000000..7f2f40b --- /dev/null +++ b/examples/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.28 FATAL_ERROR) + +include(SetupVulkan) +include(Utils) + +file(GLOB_RECURSE SUBDIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp") +source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${SUBDIRECTORIES}) +add_executable(examples main.cpp ${SUBDIRECTORIES}) + +target_include_directories(examples PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +target_include_directories(examples PRIVATE openVulkanoCpp) +target_link_libraries(examples PRIVATE "$") +SetupVulkan(examples) +SetGlmDefines(examples) +SetWarningSettings(examples) +LinkCurl(openVulkanoCpp) \ No newline at end of file diff --git a/openVulkanoCpp/Base/Version.hpp b/openVulkanoCpp/Base/Version.hpp index cfca78b..7836fca 100644 --- a/openVulkanoCpp/Base/Version.hpp +++ b/openVulkanoCpp/Base/Version.hpp @@ -8,6 +8,7 @@ #include #include +#include #include namespace OpenVulkano diff --git a/openVulkanoCpp/CMakeLists.txt b/openVulkanoCpp/CMakeLists.txt new file mode 100644 index 0000000..ff01292 --- /dev/null +++ b/openVulkanoCpp/CMakeLists.txt @@ -0,0 +1,89 @@ +cmake_minimum_required(VERSION 3.28 FATAL_ERROR) + +if(NOT IOS) + SetOutputDirs("${CMAKE_SOURCE_DIR}/bin") +endif() + +set(BASH_EXECUTABLE "" CACHE FILEPATH "Path to bash executable") +if ("${BASH_EXECUTABLE}" STREQUAL "") + find_program(BASH_PROGRAM bash NO_CACHE REQUIRED) + set(BASH_EXECUTABLE ${BASH_PROGRAM} CACHE FILEPATH "Path to bash executable" FORCE) +endif() +set(ROOT_FOLDER ${CMAKE_SOURCE_DIR}) +set(SHADER_OUTPUT_DEST ${CMAKE_BINARY_DIR}/GeneratedShaderData) +configure_file(${CMAKE_SOURCE_DIR}/cmake/TryCompileShaders.cmake.in ${CMAKE_BINARY_DIR}/TryCompileShaders.cmake @ONLY) +execute_process(COMMAND ${BASH_EXECUTABLE} CompileShaders.sh "${SHADER_OUTPUT_DEST}" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/Scripts) +file(GLOB GENERATED_SHADER_SOURCES "${SHADER_OUTPUT_DEST}/*") + +if(IOS) + set(CMAKE_Swift_LANGUAGE_VERSION 5.0) + enable_language(Swift) + file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.mm" "${CMAKE_CURRENT_SOURCE_DIR}/*.m" "${CMAKE_CURRENT_SOURCE_DIR}/*.c" "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.swift") + + add_library(openVulkanoCpp STATIC main.m ${resources} ${GENERATED_SHADER_SOURCES}) +else() + file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/*.h" "${CMAKE_CURRENT_SOURCE_DIR}/*.c" "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp" "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp") + file(GLOB SHADER_SRC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Shader/*) + list(FILTER SHADER_SRC_FILES EXCLUDE REGEX ".*\\.(hpp|cpp)$") + add_library(openVulkanoCpp STATIC main.cpp ${SHADER_SRC_FILES} ${GENERATED_SHADER_SOURCES}) + if (MSVC) + set_property(GLOBAL PROPERTY USE_FOLDERS ON) + source_group("Shaders" FILES ${SHADER_SRC_FILES}) + endif() +endif() + +FilterPlatformPaths(sources) +SetWarningSettings(openVulkanoCpp) +SetGlmDefines(openVulkanoCpp) + +target_sources(openVulkanoCpp PRIVATE ${sources}) +target_include_directories(openVulkanoCpp PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${SHADER_OUTPUT_DEST}) + +# Setup IOS +if(IOS) + set(APP_BUNDLE_IDENTIFIER "eu.georgh93.openVulkano") + set(MACOSX_BUNDLE_INFO_STRING ${APP_BUNDLE_IDENTIFIER}) + set(MACOSX_BUNDLE_GUI_IDENTIFIER ${APP_BUNDLE_IDENTIFIER}) + set(MACOSX_BUNDLE_BUNDLE_NAME ${APP_BUNDLE_IDENTIFIER}) + + set(CMAKE_OSX_DEPLOYMENT_TARGET "14.1") # The used ARKit features are only available starting with iOS 14 + + LinkAppleFrameworks(openVulkanoCpp) +endif () + +if (WIN32) + # Ws2 + target_link_libraries(openVulkanoCpp PRIVATE Ws2_32) + + set(CURL_STATIC_LIBS ${CMAKE_BINARY_DIR}/deps_curl/deps_curl) + file(GLOB_RECURSE LIBS "${CURL_STATIC_LIBS}/*.lib") + target_link_libraries(openVulkanoCpp PRIVATE ${LIBS}) +endif () + +SetupVulkan(openVulkanoCpp) +SetShaderDependency(openVulkanoCpp + ${CMAKE_CURRENT_SOURCE_DIR}/Shader + ${SHADER_OUTPUT_DEST}) + +if (NOT ANDROID AND NOT IOS) + target_link_libraries(openVulkanoCpp PUBLIC glfw pugixml) + target_link_libraries(openVulkanoCpp PUBLIC ftxui::screen ftxui::dom ftxui::component) +endif() + +list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) + +target_link_libraries(openVulkanoCpp PUBLIC magic_enum yaml-cpp fmt spdlog glm pugixml stb eigen utf8cpp imgui_internal TracyClient stud-uuid ryml unordered_dense Boost::regex) +LinkCurl(openVulkanoCpp) + +add_compile_definitions(LIBARCHIVE_STATIC) +add_compile_definitions(NOMINMAX) + +add_compile_definitions("DEBUG=$") + +SetGlmDefines(openVulkanoCpp) + +LinkAssimp(openVulkanoCpp) +LinkLibArchive(openVulkanoCpp) +LinkLibJpegTurbo(openVulkanoCpp) + +set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT openVulkanoCpp) diff --git a/openVulkanoCpp/Host/GLFW/WindowGLFW.cpp b/openVulkanoCpp/Host/GLFW/WindowGLFW.cpp index aa61f02..a4e3cd9 100644 --- a/openVulkanoCpp/Host/GLFW/WindowGLFW.cpp +++ b/openVulkanoCpp/Host/GLFW/WindowGLFW.cpp @@ -18,6 +18,7 @@ namespace OpenVulkano::GLFW { if (window) { + inputProvider.Close(); Close(); } }