From 348affd6dcc12ab9e550383db929d9b6bce7165a Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Wed, 22 May 2024 18:15:58 +0300 Subject: [PATCH 01/14] Fetching libjpeg-turbo using ExternalProject --- 3rdParty/CMakeLists.txt | 9 +++++++++ CMakeLists.txt | 15 +++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/3rdParty/CMakeLists.txt b/3rdParty/CMakeLists.txt index a40f3d2..a8dd9e9 100644 --- a/3rdParty/CMakeLists.txt +++ b/3rdParty/CMakeLists.txt @@ -1,3 +1,5 @@ +include(ExternalProject) + add_subdirectory(glm) if (NOT ANDROID AND NOT IOS) add_subdirectory(glfw) @@ -17,6 +19,13 @@ add_subdirectory(tracy) add_subdirectory(libstud-uuid) add_subdirectory(rapidyaml) +ExternalProject_Add(libjpeg-turbo + GIT_REPOSITORY https://github.com/libjpeg-turbo/libjpeg-turbo.git + GIT_TAG 2.0.x + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} + INSTALL_DIR ${CMAKE_BINARY_DIR} +) + if (NOT LINUX) file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/deps) execute_process( diff --git a/CMakeLists.txt b/CMakeLists.txt index e555ef4..576b1c3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,12 +80,19 @@ SetupVulkan(openVulkanoCpp) set_property(TARGET openVulkanoCpp PROPERTY CXX_STANDARD 17) if (NOT ANDROID AND NOT IOS) - Find_Package(libjpeg-turbo) + #Find_Package(libjpeg-turbo) + # Libjpeg-turbo + add_dependencies(openVulkanoCpp libjpeg-turbo) + ExternalProject_Get_Property(libjpeg-turbo INSTALL_DIR) + include_directories(${INSTALL_DIR}/include) + link_directories(${INSTALL_DIR}/lib ${INSTALL_DIR}/lib64) + target_link_libraries(openVulkanoCpp PRIVATE ${INSTALL_DIR}/lib/libturbojpeg.a) + target_include_directories(openVulkanoCpp PRIVATE ${OpenCV_INCLUDE_DIRS}) target_link_libraries(openVulkanoCpp PRIVATE glfw ${OpenCV_LIBS} pugixml) - if (libjpeg-turbo_FOUND) - target_link_libraries(openVulkanoCpp PRIVATE libjpeg-turbo::turbojpeg) - endif() + #if (libjpeg-turbo_FOUND) + # target_link_libraries(openVulkanoCpp PRIVATE libjpeg-turbo::turbojpeg) + #endif() target_link_libraries(openVulkanoCpp PRIVATE assimp) add_compile_definitions(GLM_FORCE_AVX2) target_link_libraries(openVulkanoCpp PRIVATE ftxui::screen ftxui::dom ftxui::component) From 1c56eb3c7bd69cea05d6f7bfb932d608c6e103b8 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Wed, 22 May 2024 19:12:17 +0300 Subject: [PATCH 02/14] Added README.md section about dependencies on linux --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 2b275b3..2eaae75 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ openVulkano is a simple Vulkan rendering engine which is capable of recording co * Git * CMake * C++ 17 compatible compiler +### Required dependencies on linux +```bash +sudo apt install extra-cmake-modules libarchive-dev libeigen3-dev +``` ### Build from source: ```bash From 29108cab21dc8e415408d13a5e7db0f71f5cb091 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Thu, 23 May 2024 23:58:45 +0300 Subject: [PATCH 03/14] Minor code fixes in order to compile on windows --- openVulkanoCpp/AR/ArRecorder.cpp | 10 +++--- openVulkanoCpp/Base/Version.cpp | 2 +- openVulkanoCpp/Host/ResourceLoader.hpp | 1 + openVulkanoCpp/Host/Windows/SystemInfo.cpp | 36 ++++++++++++---------- openVulkanoCpp/IO/MemMappedFile.cpp | 6 ++-- openVulkanoCpp/Scene/Drawable.hpp | 4 +++ 6 files changed, 34 insertions(+), 25 deletions(-) diff --git a/openVulkanoCpp/AR/ArRecorder.cpp b/openVulkanoCpp/AR/ArRecorder.cpp index 24f413f..280485c 100644 --- a/openVulkanoCpp/AR/ArRecorder.cpp +++ b/openVulkanoCpp/AR/ArRecorder.cpp @@ -160,11 +160,11 @@ namespace OpenVulkano::AR { if (!m_colorWriter) { - m_colorWriter = std::make_unique(m_settings.path, "color_{:05d}.tar", ArchiveConfig::TAR, m_settings.archiveSize, true); - m_depthWriter = std::make_unique(m_settings.path, "depth_{:05d}.tar", ArchiveConfig::TAR, m_settings.archiveSize, true); - m_confidenceWriter = std::make_unique(m_settings.path, "confidence_{:05d}.tar.gz", ArchiveConfig::TAR_GZ, m_settings.archiveSize, true); - m_metadataWriter = std::make_unique(m_settings.path, "meta_{:05d}.tar.gz", ArchiveConfig::TAR_GZ, m_settings.archiveSize, true); - m_highResWriter = std::make_unique(m_settings.path, "highres_{:05d}.tar", ArchiveConfig::TAR, m_settings.archiveSize, true); + m_colorWriter = std::make_unique(m_settings.path.string(), "color_{:05d}.tar", ArchiveConfig::TAR, m_settings.archiveSize, true); + m_depthWriter = std::make_unique(m_settings.path.string(), "depth_{:05d}.tar", ArchiveConfig::TAR, m_settings.archiveSize, true); + m_confidenceWriter = std::make_unique(m_settings.path.string(), "confidence_{:05d}.tar.gz", ArchiveConfig::TAR_GZ, m_settings.archiveSize, true); + m_metadataWriter = std::make_unique(m_settings.path.string(), "meta_{:05d}.tar.gz", ArchiveConfig::TAR_GZ, m_settings.archiveSize, true); + m_highResWriter = std::make_unique(m_settings.path.string(), "highres_{:05d}.tar", ArchiveConfig::TAR, m_settings.archiveSize, true); std::ofstream platformInfoStream(m_settings.path / RECORDING_METADATA_FILENAME); platformInfoStream << m_session->GetSessionMetadata().ToXML(); diff --git a/openVulkanoCpp/Base/Version.cpp b/openVulkanoCpp/Base/Version.cpp index 149ca06..5e8abb3 100644 --- a/openVulkanoCpp/Base/Version.cpp +++ b/openVulkanoCpp/Base/Version.cpp @@ -50,7 +50,7 @@ namespace OpenVulkano { if (numberStr.empty()) return 0; int tmp = 0; - std::from_chars(numberStr.begin(), numberStr.end(), tmp); + std::from_chars(numberStr.data(), numberStr.data() + numberStr.size(), tmp); return tmp; } diff --git a/openVulkanoCpp/Host/ResourceLoader.hpp b/openVulkanoCpp/Host/ResourceLoader.hpp index 50622fe..fb0360b 100644 --- a/openVulkanoCpp/Host/ResourceLoader.hpp +++ b/openVulkanoCpp/Host/ResourceLoader.hpp @@ -6,6 +6,7 @@ #include "Data/Containers/Array.hpp" #include +#include namespace OpenVulkano { diff --git a/openVulkanoCpp/Host/Windows/SystemInfo.cpp b/openVulkanoCpp/Host/Windows/SystemInfo.cpp index 0787450..49a5c70 100644 --- a/openVulkanoCpp/Host/Windows/SystemInfo.cpp +++ b/openVulkanoCpp/Host/Windows/SystemInfo.cpp @@ -13,6 +13,10 @@ #include #include +// NOTE(vb): Windows defines macros like GetUserName that are used to automatically select the appropriate function version (GetUserNameA for ANSI and GetUserNameW for Unicode) +// based on whether the _UNICODE macro is defined, so we manually undefine these macros to avoid naming collisions. +#undef GetUserName + namespace OpenVulkano { namespace @@ -44,7 +48,7 @@ namespace OpenVulkano { switch(type) { - case APP_MEM_TYPE::VM_MAX return counters.PeakWorkingSetSize; + case APP_MEM_TYPE::VM_MAX: return counters.PeakWorkingSetSize; case APP_MEM_TYPE::USED: return counters.PrivateUsage; } } @@ -55,12 +59,12 @@ namespace OpenVulkano size_t SystemInfo::GetSystemRam() { - return ReadSystemMemInfo(MEM_TYPE::TOTAL_PHYS); + return ReadSystemMemInfo(SYS_MEM_TYPE::TOTAL_PHYS); } size_t SystemInfo::GetSystemRamAvailable() { - return ReadSystemMemInfo(MEM_TYPE::AVAIL_PHYS); + return ReadSystemMemInfo(SYS_MEM_TYPE::AVAIL_PHYS); } size_t SystemInfo::GetAppRamMax() @@ -87,7 +91,7 @@ namespace OpenVulkano { char username[UNLEN+1]; DWORD username_len = UNLEN+1; - GetUserName(username, &username_len); + ::GetUserNameA(username, &username_len); return username; } @@ -121,21 +125,21 @@ namespace OpenVulkano return "Windows"; } - Version SystemInfo::GetOsVersion() + OsVersion SystemInfo::GetOsVersion() { - OSVERSIONINFOEX info; - ZeroMemory(&info, sizeof(OSVERSIONINFOEX)); - info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - GetVersionEx(&info); - return { info.dwMajorVersion, info.dwMinorVersion, 0, info.dwBuildNumber }; + OSVERSIONINFOA info; + ZeroMemory(&info, sizeof(OSVERSIONINFOA)); + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); + GetVersionExA(&info); + return { (int)info.dwMajorVersion, (int)info.dwMinorVersion, 0, (int)info.dwBuildNumber }; } std::string SystemInfo::GetOsNameHumanReadable() { - OSVERSIONINFOEX info; - ZeroMemory(&info, sizeof(OSVERSIONINFOEX)); - info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); - GetVersionEx(&info); + OSVERSIONINFOEXA info; + ZeroMemory(&info, sizeof(OSVERSIONINFOEXA)); + info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA); + GetVersionEx((OSVERSIONINFOA *)&info); if (info.wProductType == VER_NT_WORKSTATION) { if (info.dwMajorVersion == 10) @@ -151,7 +155,7 @@ namespace OpenVulkano } } - return "Windows " + std::string(info.dwMajorVersion) + "." + std::string(info.dwMinorVersion); + return "Windows " + std::to_string(info.dwMajorVersion) + "." + std::to_string(info.dwMinorVersion); } else { @@ -168,7 +172,7 @@ namespace OpenVulkano } } - return "Windows Server " + std::string(info.dwMajorVersion) + "." + std::string(info.dwMinorVersion); + return "Windows Server " + std::to_string(info.dwMajorVersion) + "." + std::to_string(info.dwMinorVersion); } } diff --git a/openVulkanoCpp/IO/MemMappedFile.cpp b/openVulkanoCpp/IO/MemMappedFile.cpp index 71eaf83..f298e7c 100644 --- a/openVulkanoCpp/IO/MemMappedFile.cpp +++ b/openVulkanoCpp/IO/MemMappedFile.cpp @@ -50,7 +50,7 @@ namespace OpenVulkano CloseHandle(fileHandle); return; } - size = fileSize; + size = fileSize.QuadPart; fileMappingHandle = CreateFileMapping( fileHandle, @@ -85,7 +85,7 @@ namespace OpenVulkano ~Internal() { - UnmapViewOfFile(lpMapAddress); + UnmapViewOfFile(address); CloseHandle(fileMappingHandle); CloseHandle(fileHandle); } @@ -120,7 +120,7 @@ namespace OpenVulkano MemMappedFile::MemMappedFile(const std::filesystem::path& path, FileMode fileMode) { - m_internal = std::make_shared(path.c_str(), fileMode); + m_internal = std::make_shared(path.string().c_str(), fileMode); m_data = m_internal->address; m_size = (m_data) ? m_internal->size : 0; } diff --git a/openVulkanoCpp/Scene/Drawable.hpp b/openVulkanoCpp/Scene/Drawable.hpp index db76b90..bc5b49a 100644 --- a/openVulkanoCpp/Scene/Drawable.hpp +++ b/openVulkanoCpp/Scene/Drawable.hpp @@ -11,6 +11,10 @@ #include #include +#ifdef _WIN32 +# undef TRANSPARENT +#endif + namespace OpenVulkano::Scene { class Node; From a5f592dc5c1fec367bede3389775b067dd56fb01 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Sun, 26 May 2024 23:15:34 +0300 Subject: [PATCH 04/14] Fixed linker error specifically on windows The error here is that when forward referencing a struct/class what matters is whether the entity actually is a struct or a class. For example, this is what the definitions look like if the entity is: a class: ?Init@SimpleDrawable@Scene@OpenVulkano@@QEAAXPEAVShader@23@PEAVGeometry@23@PEAVMaterial@23@@Z a struct: ?Init@SimpleDrawable@Scene@OpenVulkano@@QEAAXPEAVShader@23@PEAVGeometry@23@PEAUMaterial@23@@Z --- openVulkanoCpp/Scene/SimpleDrawable.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openVulkanoCpp/Scene/SimpleDrawable.hpp b/openVulkanoCpp/Scene/SimpleDrawable.hpp index 321eee5..559c07f 100644 --- a/openVulkanoCpp/Scene/SimpleDrawable.hpp +++ b/openVulkanoCpp/Scene/SimpleDrawable.hpp @@ -11,7 +11,7 @@ namespace OpenVulkano::Scene { class Geometry; - class Material; + struct Material; class SimpleDrawable final : public Drawable { From 378be743f8737f32fb724419beae3dc15ddd5463 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Sun, 26 May 2024 23:16:46 +0300 Subject: [PATCH 05/14] Fixed linker errors of imgui backend on windows --- examples/main.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/main.cpp b/examples/main.cpp index acc1b76..6898890 100644 --- a/examples/main.cpp +++ b/examples/main.cpp @@ -7,6 +7,11 @@ #include "Host/GraphicsAppManager.hpp" #include "ExampleApps/CubesExampleApp.hpp" +// NOTE(vb): I couldn't find a way of linking with imgui_glfw using CMake +#ifdef _WIN32 +# include "backends/imgui_impl_glfw.cpp" +#endif + using namespace OpenVulkano; int main(int argc, char** argv) From af32720dbd306d89cae526a3ce959e78afe185ac Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Sun, 26 May 2024 23:18:31 +0300 Subject: [PATCH 06/14] Libturbojpeg fix, lots of linking against libraries, copying dlls to the exe directory --- CMakeLists.txt | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 576b1c3..375f407 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.28 FATAL_ERROR) include(cmake/SetCompilerSettings.cmake) include(cmake/SetupVulkan.cmake) include(cmake/Filter.cmake) +include(ExternalProject) set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) @@ -80,19 +81,19 @@ SetupVulkan(openVulkanoCpp) set_property(TARGET openVulkanoCpp PROPERTY CXX_STANDARD 17) if (NOT ANDROID AND NOT IOS) - #Find_Package(libjpeg-turbo) # Libjpeg-turbo add_dependencies(openVulkanoCpp libjpeg-turbo) ExternalProject_Get_Property(libjpeg-turbo INSTALL_DIR) include_directories(${INSTALL_DIR}/include) link_directories(${INSTALL_DIR}/lib ${INSTALL_DIR}/lib64) - target_link_libraries(openVulkanoCpp PRIVATE ${INSTALL_DIR}/lib/libturbojpeg.a) + if (WIN32) + target_link_libraries(openVulkanoCpp PRIVATE ${INSTALL_DIR}/lib/turbojpeg.lib) + else() + target_link_libraries(openVulkanoCpp PRIVATE ${INSTALL_DIR}/lib/libturbojpeg.a) + endif() target_include_directories(openVulkanoCpp PRIVATE ${OpenCV_INCLUDE_DIRS}) target_link_libraries(openVulkanoCpp PRIVATE glfw ${OpenCV_LIBS} pugixml) - #if (libjpeg-turbo_FOUND) - # target_link_libraries(openVulkanoCpp PRIVATE libjpeg-turbo::turbojpeg) - #endif() target_link_libraries(openVulkanoCpp PRIVATE assimp) add_compile_definitions(GLM_FORCE_AVX2) target_link_libraries(openVulkanoCpp PRIVATE ftxui::screen ftxui::dom ftxui::component) @@ -117,8 +118,30 @@ find_package(ZLIB REQUIRED) target_include_directories(openVulkanoCpp PRIVATE ${LibArchive_INCLUDE_DIR}) target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp spdlog glm pugixml ${LibArchive_LIBRARIES} ${ZLIB_LIBRARIES} stb eigen utf8cpp imgui_internal TracyClient stud-uuid) + +if(WIN32) + # lz4 + # NOTE(vb): There must be a better way of linking with lz4... + target_link_libraries(openVulkanoCpp PRIVATE ${CMAKE_BINARY_DIR}/deps/lz4-build/Debug/lz4.lib) + + # Zstd + find_package(Zstd REQUIRED) + target_include_directories(openVulkanoCpp PRIVATE ${Zstd_INCLUDE_DIR}) + target_link_libraries(openVulkanoCpp PRIVATE $,zstd::libzstd_shared,zstd::libzstd_static>) + + # Ws2_32 + target_link_libraries(openVulkanoCpp PRIVATE Ws2_32) + + # Copy dlls to the exe directory + add_custom_command(TARGET openVulkanoCpp POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy $ $ $ + COMMAND_EXPAND_LISTS + ) +endif() + add_compile_definitions(GLM_FORCE_INTRINSICS) add_compile_definitions(GLM_FORCE_SILENT_WARNINGS) +add_compile_definitions(NOMINMAX) add_compile_definitions(LIBARCHIVE_STATIC) if(CMAKE_BUILD_TYPE STREQUAL "Debug") From f4969db274108cfa02a5d1a52c9e8f1c93e848de Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Mon, 27 May 2024 22:47:58 +0200 Subject: [PATCH 07/14] Fix assimp --- 3rdParty/assimp/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdParty/assimp/CMakeLists.txt b/3rdParty/assimp/CMakeLists.txt index 6c32a3d..4524135 100644 --- a/3rdParty/assimp/CMakeLists.txt +++ b/3rdParty/assimp/CMakeLists.txt @@ -25,7 +25,7 @@ elseif (USE_ASSIMP) FetchContent_MakeAvailable(assimp) - set(assimp_FOUND ON PARENT_SCOPE) + set(assimp_FOUND "fetched assimp found" CACHE INTERNAL ON) endif () From 5a09038a06a008fd6b04199479525074ca9cde66 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Mon, 27 May 2024 22:59:14 +0200 Subject: [PATCH 08/14] Downgrade zstd because of broken Windows build See: https://github.com/facebook/zstd/issues/3999 --- 3rdParty/libarchive/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdParty/libarchive/CMakeLists.txt b/3rdParty/libarchive/CMakeLists.txt index def6607..b56beba 100644 --- a/3rdParty/libarchive/CMakeLists.txt +++ b/3rdParty/libarchive/CMakeLists.txt @@ -31,7 +31,7 @@ ExternalProject_Add(zlib ExternalProject_Add(zstd GIT_REPOSITORY ${ZSTD_REPO} - GIT_TAG v1.5.6 + GIT_TAG v1.5.5 GIT_SHALLOW TRUE SOURCE_DIR zstd SOURCE_SUBDIR build/cmake From 10f91ca46444794970fc8703f5aff5494e97893b Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Mon, 27 May 2024 23:03:24 +0200 Subject: [PATCH 09/14] Revert "Fixed linker errors of imgui backend on windows" This reverts commit 378be743f8737f32fb724419beae3dc15ddd5463. --- examples/main.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/examples/main.cpp b/examples/main.cpp index 6898890..acc1b76 100644 --- a/examples/main.cpp +++ b/examples/main.cpp @@ -7,11 +7,6 @@ #include "Host/GraphicsAppManager.hpp" #include "ExampleApps/CubesExampleApp.hpp" -// NOTE(vb): I couldn't find a way of linking with imgui_glfw using CMake -#ifdef _WIN32 -# include "backends/imgui_impl_glfw.cpp" -#endif - using namespace OpenVulkano; int main(int argc, char** argv) From 36307e0b5bc04277891557746a720e02d4b4b6f5 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Tue, 28 May 2024 00:02:00 +0200 Subject: [PATCH 10/14] Fail build if libarchive build failed and update linking --- 3rdParty/CMakeLists.txt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/3rdParty/CMakeLists.txt b/3rdParty/CMakeLists.txt index 8a38b18..e819116 100644 --- a/3rdParty/CMakeLists.txt +++ b/3rdParty/CMakeLists.txt @@ -30,7 +30,12 @@ if (NOT LibArchive_FOUND) ) execute_process( COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/deps + RESULT_VARIABLE build_result ) + if (NOT ${build_result} EQUAL "0") + message(FATAL_ERROR "Failed to build lib archive!") + endif() + list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) else () message("Using system LibArchive") @@ -46,5 +51,11 @@ function(LinkLibArchive TARGET) 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} ${LIBLZMA_LIBRARIES} ${BZIP2_LIBRARIES}) + target_link_libraries(${TARGET} PRIVATE ${LibArchive_LIBRARIES} ${ZLIB_LIBRARIES} ${zstd_LIBRARIES} ${LZ4_LIBRARIES}) + if (BZIP2_LIBRARIES) + target_link_libraries(${TARGET} PRIVATE ${BZIP2_LIBRARIES}) + endif() + if (LIBLZMA_LIBRARIES) + target_link_libraries(${TARGET} PRIVATE ${LIBLZMA_LIBRARIES}) + endif() endfunction() \ No newline at end of file From 28e48d155a5503f5306eb57795669a3d63ea67b9 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Tue, 28 May 2024 00:15:08 +0200 Subject: [PATCH 11/14] Add libjpeg-turbo dependency --- 3rdParty/CMakeLists.txt | 1 + 3rdParty/libjpeg-turbo/CMakeLists.txt | 30 +++++++++++++++++++++++ 3rdParty/libjpeg-turbo/ext/CMakeLists.txt | 22 +++++++++++++++++ CMakeLists.txt | 10 +------- 4 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 3rdParty/libjpeg-turbo/CMakeLists.txt create mode 100644 3rdParty/libjpeg-turbo/ext/CMakeLists.txt diff --git a/3rdParty/CMakeLists.txt b/3rdParty/CMakeLists.txt index e819116..44b0cef 100644 --- a/3rdParty/CMakeLists.txt +++ b/3rdParty/CMakeLists.txt @@ -18,6 +18,7 @@ add_subdirectory(imgui) add_subdirectory(tracy) add_subdirectory(libstud-uuid) add_subdirectory(rapidyaml) +add_subdirectory(libjpeg-turbo) #TODO move into a different file diff --git a/3rdParty/libjpeg-turbo/CMakeLists.txt b/3rdParty/libjpeg-turbo/CMakeLists.txt new file mode 100644 index 0000000..f88af99 --- /dev/null +++ b/3rdParty/libjpeg-turbo/CMakeLists.txt @@ -0,0 +1,30 @@ +include(FetchContent) + +Find_Package(libjpeg-turbo QUIET) +if (libjpeg-turbo_FOUND) + message("Using system libjpeg-turbo") +else () + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/deps_ljt) + execute_process( + COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${TOOLCHAIN_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/ext + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/deps_ljt + ) + execute_process( + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR}/deps_ljt + RESULT_VARIABLE build_result + ) + if (NOT ${build_result} EQUAL "0") + message(FATAL_ERROR "Failed to build libjpeg-turbo!") + endif() + + set(libjpeg-turbo_BUILT "built libjpeg-turbo" CACHE INTERNAL ON) +endif () + + +function(LinkLibJpegTurbo TARGET) + if (libjpeg-turbo_BUILT) + list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps_ljt/INSTALL/lib/cmake) + endif() + find_package(libjpeg-turbo REQUIRED) + target_link_libraries(${TARGET} PUBLIC libjpeg-turbo::turbojpeg-static) +endfunction() \ No newline at end of file diff --git a/3rdParty/libjpeg-turbo/ext/CMakeLists.txt b/3rdParty/libjpeg-turbo/ext/CMakeLists.txt new file mode 100644 index 0000000..8e97fab --- /dev/null +++ b/3rdParty/libjpeg-turbo/ext/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.16) +project(build_libjpeg-turbo) +include(ExternalProject) + +if(NOT DEFINED LIBJPEGTURBO_REPO) + set(LIBJPEGTURBO_REPO https://github.com/libjpeg-turbo/libjpeg-turbo.git) +endif () + +ExternalProject_Add(libjpegturbo + GIT_REPOSITORY ${LIBJPEGTURBO_REPO} + GIT_TAG 3.0.3 + GIT_SHALLOW TRUE + SOURCE_DIR libjpegturbo + BINARY_DIR libjpegturbo-build + CMAKE_GENERATOR ${CMAKE_GENERATOR} + CMAKE_ARGS + -DBUILD_SHARED_LIBS:BOOL=OFF + -DENABLE_SHARED:BOOL=OFF + -DCMAKE_TOOLCHAIN_FILE:FILEPATH=${TOOLCHAIN_FILE} + -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/INSTALL + -DCMAKE_BUILD_TYPE:STRING=Release + ) \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 4418861..45da8cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,19 +58,11 @@ endif () SetupVulkan(openVulkanoCpp) if (NOT ANDROID AND NOT IOS) - Find_Package(libjpeg-turbo) target_link_libraries(openVulkanoCpp PRIVATE glfw pugixml) - if (libjpeg-turbo_FOUND) - target_link_libraries(openVulkanoCpp PRIVATE libjpeg-turbo::turbojpeg) - endif() target_link_libraries(openVulkanoCpp PRIVATE ftxui::screen ftxui::dom ftxui::component) endif() list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/deps/INSTALL) -if (IOS) - target_link_libraries(openVulkanoCpp PRIVATE "/opt/libjpeg-turbo-ios/lib/libturbojpeg.a") - target_include_directories(openVulkanoCpp PRIVATE "/opt/libjpeg-turbo-ios/include") -endif () target_link_libraries(openVulkanoCpp PRIVATE magic_enum yaml-cpp fmt spdlog glm pugixml stb eigen utf8cpp imgui_internal TracyClient stud-uuid) @@ -85,6 +77,6 @@ SetGlmDefines(openVulkanoCpp) LinkAssimp(openVulkanoCpp) LinkLibArchive(openVulkanoCpp) - +LinkLibJpegTurbo(openVulkanoCpp) set(VS_STARTUP_PROJECT openVulkanoCpp) From 22be3d288a16e2237bcbe7e9441383f31d81eb7a Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Tue, 28 May 2024 00:15:36 +0200 Subject: [PATCH 12/14] Fix issue with finding assimp on consecutive cmake runs --- 3rdParty/assimp/CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/3rdParty/assimp/CMakeLists.txt b/3rdParty/assimp/CMakeLists.txt index 4524135..a7179c4 100644 --- a/3rdParty/assimp/CMakeLists.txt +++ b/3rdParty/assimp/CMakeLists.txt @@ -1,5 +1,6 @@ include(FetchContent) +unset(assimp_FOUND) find_package(assimp QUIET) if (assimp_FOUND) message("Using system assimp") @@ -25,15 +26,15 @@ elseif (USE_ASSIMP) FetchContent_MakeAvailable(assimp) - set(assimp_FOUND "fetched assimp found" CACHE INTERNAL ON) + set(assimp_BUILT "fetched assimp found" CACHE INTERNAL ON) endif () function(LinkAssimp TARGET) - if (NOT assimp_FOUND) + if (NOT assimp_BUILT) find_package(assimp QUIET) endif () - if (assimp_FOUND) + if (assimp_FOUND OR assimp_BUILT) target_link_libraries(${TARGET} PUBLIC assimp) endif () endfunction() \ No newline at end of file From e40cc7b587b73d80c9d31cc8d6bd3c4bf366bb45 Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Tue, 28 May 2024 18:25:08 +0300 Subject: [PATCH 13/14] Fixed gethostname() linker error --- CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45da8cb..1128b9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,11 @@ if(IOS) LinkAppleFrameworks(openVulkanoCpp) endif () +if (WIN32) + # Ws2 + target_link_libraries(openVulkanoCpp PRIVATE Ws2_32) +endif () + SetupVulkan(openVulkanoCpp) if (NOT ANDROID AND NOT IOS) From 5c030d7e134ef855e038a3e7b084b773106384fa Mon Sep 17 00:00:00 2001 From: Vladyslav Baranovskyi Date: Tue, 28 May 2024 18:25:34 +0300 Subject: [PATCH 14/14] Copying missing dlls to the exe directory --- CMakeLists.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1128b9d..a475c20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,6 +58,27 @@ endif () if (WIN32) # Ws2 target_link_libraries(openVulkanoCpp PRIVATE Ws2_32) + + file(GLOB_RECURSE DLLS "${CMAKE_BINARY_DIR}/*.dll") + + if (CMAKE_BUILD_TYPE STREQUAL "Release") + set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}" ) + elseif (CMAKE_BUILD_TYPE STREQUAL "MinSizeRel") + set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL}" ) + elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") + set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO}" ) + elseif (CMAKE_BUILD_TYPE STREQUAL "Debug") + set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}" ) + else () + set(EXE_OUTPUT_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" ) + endif() + + foreach(DLL ${DLLS}) + add_custom_command(TARGET openVulkanoCpp POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${DLL} ${EXE_OUTPUT_DIR} + ) + endforeach() endif () SetupVulkan(openVulkanoCpp)