diff --git a/attachments/CMake/FindTinyGLTF.cmake b/attachments/CMake/FindTinyGLTF.cmake deleted file mode 100644 index f01469ae..00000000 --- a/attachments/CMake/FindTinyGLTF.cmake +++ /dev/null @@ -1,107 +0,0 @@ -# FindTinyGLTF.cmake -# -# Finds the TinyGLTF library -# -# This will define the following variables -# -# TinyGLTF_FOUND -# TinyGLTF_INCLUDE_DIRS -# -# and the following imported targets -# -# tinygltf::tinygltf -# - -# First, try to find nlohmann_json -find_package(nlohmann_json QUIET) -if(NOT nlohmann_json_FOUND) - include(FetchContent) - message(STATUS "nlohmann_json not found, fetching from GitHub...") - FetchContent_Declare( - nlohmann_json - GIT_REPOSITORY https://github.com/nlohmann/json.git - GIT_TAG v3.11.2 # Use a specific tag for stability - ) - FetchContent_MakeAvailable(nlohmann_json) -endif() - -# Try to find TinyGLTF using standard find_package -find_path(TinyGLTF_INCLUDE_DIR - NAMES tiny_gltf.h - PATH_SUFFIXES include tinygltf -) - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(TinyGLTF - REQUIRED_VARS TinyGLTF_INCLUDE_DIR - FAIL_MESSAGE "" # Suppress the error message to allow our fallback -) - -if(TinyGLTF_FOUND) - set(TinyGLTF_INCLUDE_DIRS ${TinyGLTF_INCLUDE_DIR}) - - if(NOT TARGET tinygltf::tinygltf) - add_library(tinygltf::tinygltf INTERFACE IMPORTED) - set_target_properties(tinygltf::tinygltf PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${TinyGLTF_INCLUDE_DIRS}" - INTERFACE_COMPILE_DEFINITIONS "TINYGLTF_IMPLEMENTATION;TINYGLTF_NO_EXTERNAL_IMAGE;TINYGLTF_NO_STB_IMAGE;TINYGLTF_NO_STB_IMAGE_WRITE" - ) - if(TARGET nlohmann_json::nlohmann_json) - target_link_libraries(tinygltf::tinygltf INTERFACE nlohmann_json::nlohmann_json) - endif() - endif() -else() - # If not found, use FetchContent to download and build - include(FetchContent) - - message(STATUS "TinyGLTF not found, fetching from GitHub...") - FetchContent_Declare( - tinygltf - GIT_REPOSITORY https://github.com/syoyo/tinygltf.git - GIT_TAG v2.8.18 # Use a specific tag for stability - ) - - # Configure tinygltf before making it available - FetchContent_GetProperties(tinygltf) - if(NOT tinygltf_POPULATED) - FetchContent_Populate(tinygltf) - - # Update the minimum required CMake version to avoid deprecation warning - file(READ "${tinygltf_SOURCE_DIR}/CMakeLists.txt" TINYGLTF_CMAKE_CONTENT) - string(REPLACE "cmake_minimum_required(VERSION 3.6)" - "cmake_minimum_required(VERSION 3.10)" - TINYGLTF_CMAKE_CONTENT "${TINYGLTF_CMAKE_CONTENT}") - file(WRITE "${tinygltf_SOURCE_DIR}/CMakeLists.txt" "${TINYGLTF_CMAKE_CONTENT}") - - # Create a symbolic link to make nlohmann/json.hpp available - if(EXISTS "${tinygltf_SOURCE_DIR}/json.hpp") - file(MAKE_DIRECTORY "${tinygltf_SOURCE_DIR}/nlohmann") - file(CREATE_LINK "${tinygltf_SOURCE_DIR}/json.hpp" "${tinygltf_SOURCE_DIR}/nlohmann/json.hpp" SYMBOLIC) - endif() - - # Set tinygltf to header-only mode - set(TINYGLTF_HEADER_ONLY ON CACHE BOOL "Use header only version" FORCE) - set(TINYGLTF_INSTALL OFF CACHE BOOL "Do not install tinygltf" FORCE) - - # Add the subdirectory after modifying the CMakeLists.txt - add_subdirectory(${tinygltf_SOURCE_DIR} ${tinygltf_BINARY_DIR}) - endif() - - # Create an alias for the tinygltf target - if(NOT TARGET tinygltf::tinygltf) - add_library(tinygltf_wrapper INTERFACE) - target_link_libraries(tinygltf_wrapper INTERFACE tinygltf) - target_compile_definitions(tinygltf_wrapper INTERFACE - TINYGLTF_IMPLEMENTATION - TINYGLTF_NO_EXTERNAL_IMAGE - TINYGLTF_NO_STB_IMAGE - TINYGLTF_NO_STB_IMAGE_WRITE - ) - if(TARGET nlohmann_json::nlohmann_json) - target_link_libraries(tinygltf_wrapper INTERFACE nlohmann_json::nlohmann_json) - endif() - add_library(tinygltf::tinygltf ALIAS tinygltf_wrapper) - endif() - - set(TinyGLTF_FOUND TRUE) -endif() diff --git a/attachments/CMake/FindVulkanHpp.cmake b/attachments/CMake/FindVulkanHpp.cmake index 16b13e07..2c0e23ab 100644 --- a/attachments/CMake/FindVulkanHpp.cmake +++ b/attachments/CMake/FindVulkanHpp.cmake @@ -215,11 +215,11 @@ if(NOT VulkanHpp_INCLUDE_DIR OR NOT VulkanHpp_CPPM_DIR) set(VulkanHpp_CPPM_DIR ${VulkanHpp_SOURCE_DIR}) else() # If vulkan.cppm doesn't exist, we need to create it - set(VulkanHpp_CPPM_DIR ${CMAKE_CURRENT_BINARY_DIR}/VulkanHpp) - file(MAKE_DIRECTORY ${VulkanHpp_CPPM_DIR}/vulkan) + set(VulkanHpp_CPPM_DIR ${CMAKE_CURRENT_BINARY_DIR}/VulkanHpp) + file(MAKE_DIRECTORY ${VulkanHpp_CPPM_DIR}/vulkan) - # Create vulkan.cppm file - file(WRITE "${VulkanHpp_CPPM_DIR}/vulkan/vulkan.cppm" + # Create vulkan.cppm file + file(WRITE "${VulkanHpp_CPPM_DIR}/vulkan/vulkan.cppm" "// Auto-generated vulkan.cppm file module; #include @@ -288,7 +288,7 @@ endif() # Set the variables include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(VulkanHpp +find_package_handle_standard_args(VulkanHpp REQUIRED_VARS VulkanHpp_INCLUDE_DIR FAIL_MESSAGE "Could NOT find VulkanHpp. Install it or set VulkanHpp_INCLUDE_DIR to the directory containing vulkan/vulkan.hpp" ) @@ -319,7 +319,7 @@ if(VulkanHpp_FOUND) message(STATUS "Creating vulkan.cppm in ${VulkanHpp_CPPM_DIR}") # Create vulkan.cppm file - file(WRITE "${VulkanHpp_CPPM_DIR}/vulkan/vulkan.cppm" + file(WRITE "${VulkanHpp_CPPM_DIR}/vulkan/vulkan.cppm" "// Auto-generated vulkan.cppm file module; #include @@ -408,7 +408,7 @@ elseif(DEFINED VulkanHpp_SOURCE_DIR OR DEFINED vulkanhpp_SOURCE_DIR) message(STATUS "Creating vulkan.cppm in ${VulkanHpp_CPPM_DIR}") # Create vulkan.cppm file - file(WRITE "${VulkanHpp_CPPM_DIR}/vulkan/vulkan.cppm" + file(WRITE "${VulkanHpp_CPPM_DIR}/vulkan/vulkan.cppm" "// Auto-generated vulkan.cppm file module; #include diff --git a/attachments/CMake/Findtinygltf.cmake b/attachments/CMake/Findtinygltf.cmake index 6bbaafa3..d1caec25 100644 --- a/attachments/CMake/Findtinygltf.cmake +++ b/attachments/CMake/Findtinygltf.cmake @@ -1,11 +1,11 @@ -# Findtinygltf.cmake +# FindTinyGLTF.cmake # -# Finds the tinygltf library +# Finds the TinyGLTF library # # This will define the following variables # -# tinygltf_FOUND -# tinygltf_INCLUDE_DIRS +# TinyGLTF_FOUND +# TinyGLTF_INCLUDE_DIRS # # and the following imported targets # @@ -25,101 +25,89 @@ if(NOT nlohmann_json_FOUND) FetchContent_MakeAvailable(nlohmann_json) endif() -# Try to find tinygltf using standard find_package -find_path(tinygltf_INCLUDE_DIR +# Try to find TinyGLTF using standard find_package +find_path(TinyGLTF_INCLUDE_DIR NAMES tiny_gltf.h - PATHS - ${PC_tinygltf_INCLUDE_DIRS} - /usr/include - /usr/local/include - $ENV{VULKAN_SDK}/include - ${ANDROID_NDK}/sources/third_party - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../external - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../third_party - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../attachments/external - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../attachments/third_party - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../attachments/include - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../../external - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../../third_party - ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../../include - PATH_SUFFIXES tinygltf include + PATH_SUFFIXES include tinygltf ) -# If not found, use FetchContent to download and build -if(NOT tinygltf_INCLUDE_DIR) - # If not found, use FetchContent to download and build - include(FetchContent) - - message(STATUS "tinygltf not found, fetching from GitHub...") - FetchContent_Declare( - tinygltf - GIT_REPOSITORY https://github.com/syoyo/tinygltf.git - GIT_TAG v2.8.18 # Use a specific tag for stability - ) - - # Set policy to suppress the deprecation warning - if(POLICY CMP0169) - cmake_policy(SET CMP0169 OLD) - endif() - - # Populate the content but don't configure it yet - FetchContent_GetProperties(tinygltf) - if(NOT tinygltf_POPULATED) - FetchContent_Populate(tinygltf) - - # Update the minimum required CMake version to avoid deprecation warning - file(READ "${tinygltf_SOURCE_DIR}/CMakeLists.txt" TINYGLTF_CMAKE_CONTENT) - string(REPLACE "cmake_minimum_required(VERSION 3.6)" - "cmake_minimum_required(VERSION 3.10)" - TINYGLTF_CMAKE_CONTENT "${TINYGLTF_CMAKE_CONTENT}") - file(WRITE "${tinygltf_SOURCE_DIR}/CMakeLists.txt" "${TINYGLTF_CMAKE_CONTENT}") - - # Create a symbolic link to make nlohmann/json.hpp available - if(EXISTS "${tinygltf_SOURCE_DIR}/json.hpp") - file(MAKE_DIRECTORY "${tinygltf_SOURCE_DIR}/nlohmann") - file(CREATE_LINK "${tinygltf_SOURCE_DIR}/json.hpp" "${tinygltf_SOURCE_DIR}/nlohmann/json.hpp" SYMBOLIC) - endif() - - # Set tinygltf to header-only mode - set(TINYGLTF_HEADER_ONLY ON CACHE BOOL "Use header only version" FORCE) - set(TINYGLTF_INSTALL OFF CACHE BOOL "Do not install tinygltf" FORCE) - - # Add the subdirectory after modifying the CMakeLists.txt - add_subdirectory(${tinygltf_SOURCE_DIR} ${tinygltf_BINARY_DIR}) - else() - # If already populated, just make it available - FetchContent_MakeAvailable(tinygltf) - endif() - - # Get the include directory from the target - get_target_property(tinygltf_INCLUDE_DIR tinygltf INTERFACE_INCLUDE_DIRECTORIES) - if(NOT tinygltf_INCLUDE_DIR) - # If we can't get the include directory from the target, use the source directory - FetchContent_GetProperties(tinygltf SOURCE_DIR tinygltf_SOURCE_DIR) - set(tinygltf_INCLUDE_DIR ${tinygltf_SOURCE_DIR}) - endif() -endif() - include(FindPackageHandleStandardArgs) find_package_handle_standard_args(tinygltf - REQUIRED_VARS tinygltf_INCLUDE_DIR + REQUIRED_VARS TinyGLTF_INCLUDE_DIR + FAIL_MESSAGE "" # Suppress the error message to allow our fallback ) -if(tinygltf_FOUND) - set(tinygltf_INCLUDE_DIRS ${tinygltf_INCLUDE_DIR}) +if(TinyGLTF_FOUND) + set(TinyGLTF_INCLUDE_DIRS ${TinyGLTF_INCLUDE_DIR}) if(NOT TARGET tinygltf::tinygltf) add_library(tinygltf::tinygltf INTERFACE IMPORTED) set_target_properties(tinygltf::tinygltf PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${tinygltf_INCLUDE_DIRS}" + INTERFACE_INCLUDE_DIRECTORIES "${TinyGLTF_INCLUDE_DIRS}" INTERFACE_COMPILE_DEFINITIONS "TINYGLTF_IMPLEMENTATION;TINYGLTF_NO_EXTERNAL_IMAGE;TINYGLTF_NO_STB_IMAGE;TINYGLTF_NO_STB_IMAGE_WRITE" ) if(TARGET nlohmann_json::nlohmann_json) target_link_libraries(tinygltf::tinygltf INTERFACE nlohmann_json::nlohmann_json) endif() endif() -elseif(TARGET tinygltf) - # If find_package_handle_standard_args failed but we have a tinygltf target from FetchContent +else() + # If not found, create a custom tinygltf implementation + message(STATUS "TinyGLTF not found, creating a custom implementation...") + + # Create a directory for our custom tinygltf implementation + set(TINYGLTF_DIR "${CMAKE_CURRENT_BINARY_DIR}/tinygltf") + file(REMOVE_RECURSE "${TINYGLTF_DIR}") + file(MAKE_DIRECTORY "${TINYGLTF_DIR}") + + # Download the necessary files directly + file(DOWNLOAD + "https://raw.githubusercontent.com/syoyo/tinygltf/v2.8.18/tiny_gltf.h" + "${TINYGLTF_DIR}/tiny_gltf.h" + SHOW_PROGRESS + ) + + file(DOWNLOAD + "https://raw.githubusercontent.com/syoyo/tinygltf/v2.8.18/json.hpp" + "${TINYGLTF_DIR}/json.hpp" + SHOW_PROGRESS + ) + + file(DOWNLOAD + "https://raw.githubusercontent.com/syoyo/tinygltf/v2.8.18/stb_image.h" + "${TINYGLTF_DIR}/stb_image.h" + SHOW_PROGRESS + ) + + file(DOWNLOAD + "https://raw.githubusercontent.com/syoyo/tinygltf/v2.8.18/stb_image_write.h" + "${TINYGLTF_DIR}/stb_image_write.h" + SHOW_PROGRESS + ) + + # Create a symbolic link to make nlohmann/json.hpp available + file(MAKE_DIRECTORY "${TINYGLTF_DIR}/nlohmann") + file(CREATE_LINK "${TINYGLTF_DIR}/json.hpp" "${TINYGLTF_DIR}/nlohmann/json.hpp" SYMBOLIC) + + # Create a simple CMakeLists.txt file + file(WRITE "${TINYGLTF_DIR}/CMakeLists.txt" " +cmake_minimum_required(VERSION 3.10...3.29) +project(tinygltf) + +if(NOT TARGET tinygltf) + add_library(tinygltf INTERFACE) + target_include_directories(tinygltf INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) + target_compile_definitions(tinygltf INTERFACE + TINYGLTF_IMPLEMENTATION + TINYGLTF_NO_EXTERNAL_IMAGE + TINYGLTF_NO_STB_IMAGE + TINYGLTF_NO_STB_IMAGE_WRITE + ) +endif() +") + + # Add the subdirectory + add_subdirectory(${TINYGLTF_DIR} ${CMAKE_CURRENT_BINARY_DIR}/tinygltf-build) + # Create an alias for the tinygltf target if(NOT TARGET tinygltf::tinygltf) add_library(tinygltf_wrapper INTERFACE) @@ -136,27 +124,5 @@ elseif(TARGET tinygltf) add_library(tinygltf::tinygltf ALIAS tinygltf_wrapper) endif() - # Set variables to indicate that tinygltf was found - set(tinygltf_FOUND TRUE) - set(TINYGLTF_FOUND TRUE) - - # Set include directories - get_target_property(tinygltf_INCLUDE_DIR tinygltf INTERFACE_INCLUDE_DIRECTORIES) - if(tinygltf_INCLUDE_DIR) - set(tinygltf_INCLUDE_DIRS ${tinygltf_INCLUDE_DIR}) - else() - # If we can't get the include directory from the target, use the source directory - FetchContent_GetProperties(tinygltf SOURCE_DIR tinygltf_SOURCE_DIR) - set(tinygltf_INCLUDE_DIR ${tinygltf_SOURCE_DIR}) - set(tinygltf_INCLUDE_DIRS ${tinygltf_INCLUDE_DIR}) - - # Explicitly set the include directory on the target - if(TARGET tinygltf) - set_target_properties(tinygltf PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${tinygltf_INCLUDE_DIR}" - ) - endif() - endif() + set(TinyGLTF_FOUND TRUE) endif() - -mark_as_advanced(tinygltf_INCLUDE_DIR) diff --git a/attachments/CMakeLists.txt b/attachments/CMakeLists.txt index fd1630a2..5648cb92 100644 --- a/attachments/CMakeLists.txt +++ b/attachments/CMakeLists.txt @@ -11,7 +11,7 @@ find_package (glfw3 REQUIRED) find_package (glm REQUIRED) find_package (Vulkan REQUIRED) find_package (tinyobjloader REQUIRED) -find_package (TinyGLTF REQUIRED) +find_package (tinygltf REQUIRED) find_package (KTX REQUIRED) # set up Vulkan C++ module