diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b69b6d5947b04efa72e1699e74c7022791693da..f8e28a3d23e7b0ada5040a5ee01fb8d13d855962 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,9 @@ option(BUILD_DOXYGEN_DOCS "Enables building the VkCV doxygen documentation" OFF) option(BUILD_SHARED "Enables building VkCV as shared libraries" OFF) option(BUILD_VMA_VULKAN_VERSION "Enforce a specific Vulkan version for VMA" OFF) +# uncomment the following line if cmake will refuse to build projects +#set(BUILD_PROJECTS ON) + if ((WIN32) AND (NOT BUILD_VMA_VULKAN_VERSION)) set(BUILD_VMA_VULKAN_VERSION "1.3.0") endif() diff --git a/scripts/generate.sh b/scripts/generate.sh index cf9ff2d607217890b6fd0586e1dddece962d59b9..23e5b0ee54589ebfacbb08942ec9a5018d8704fa 100755 --- a/scripts/generate.sh +++ b/scripts/generate.sh @@ -1,5 +1,11 @@ #!/bin/sh -CMAKE_PROJECT_DIR="$(pwd)" +if [ $# -gt 0 ]; then + CMAKE_PROJECT_DIR="$(realpath "$1")" + mkdir -p $CMAKE_PROJECT_DIR +else + CMAKE_PROJECT_DIR="$(pwd)" +fi + CMAKE_PROJECT_NAME="$(basename "$CMAKE_PROJECT_DIR")" # Navigate to the main directory of the cloned repository @@ -8,6 +14,12 @@ cd .. CMAKE_FRAMEWORK_DIR="$(realpath -s --relative-to="$CMAKE_PROJECT_DIR" "$(pwd)")" +if [ "$CMAKE_FRAMEWORK_DIR" == "../.." ]; then + IS_INTERNAL_PROJECT=true +else + IS_INTERNAL_PROJECT=false +fi + # Navigate back to the project directory cd "$CMAKE_PROJECT_DIR" || exit @@ -21,16 +33,26 @@ generate_cmake_lists() { echo "set(CMAKE_CXX_STANDARD 20)" echo "set(CMAKE_CXX_STANDARD_REQUIRED ON)" echo - echo "set(BUILD_MODULES ON CACHE INTERNAL \"\")" - echo "set(BUILD_PROJECTS OFF CACHE INTERNAL \"\")" - echo "set(BUILD_DOXYGEN_DOCS OFF CACHE INTERNAL \"\")" - echo "set(BUILD_SHARED OFF CACHE INTERNAL \"\")" - echo "add_subdirectory($CMAKE_FRAMEWORK_DIR)" - echo + + if test "$IS_INTERNAL_PROJECT" = false; then + echo "set(BUILD_MODULES ON CACHE INTERNAL \"\")" + echo "set(BUILD_PROJECTS OFF CACHE INTERNAL \"\")" + echo "set(BUILD_DOXYGEN_DOCS OFF CACHE INTERNAL \"\")" + echo "set(BUILD_SHARED OFF CACHE INTERNAL \"\")" + echo "add_subdirectory($CMAKE_FRAMEWORK_DIR)" + echo + fi + echo "add_executable($CMAKE_PROJECT_NAME src/main.cpp)" echo - echo "target_include_directories($CMAKE_PROJECT_NAME SYSTEM BEFORE PRIVATE \${vkcv_includes})" - echo "target_link_libraries($CMAKE_PROJECT_NAME \${vkcv_libraries})" + + if test "$IS_INTERNAL_PROJECT" = true; then + echo "target_include_directories($CMAKE_PROJECT_NAME SYSTEM BEFORE PRIVATE \${vkcv_include} \${vkcv_includes})" + echo "target_link_libraries($CMAKE_PROJECT_NAME vkcv \${vkcv_libraries})" + else + echo "target_include_directories($CMAKE_PROJECT_NAME SYSTEM BEFORE PRIVATE \${vkcv_includes})" + echo "target_link_libraries($CMAKE_PROJECT_NAME \${vkcv_libraries})" + fi } generate_main_cpp() { @@ -44,7 +66,12 @@ generate_main_cpp() { echo " { VK_KHR_SWAPCHAIN_EXTENSION_NAME }" echo " );" echo " " - echo " vkcv::WindowHandle windowHandle = core.createWindow(\"$CMAKE_PROJECT_NAME\", 800, 600, true);" + echo " vkcv::WindowHandle windowHandle = core.createWindow(" + echo " \"$CMAKE_PROJECT_NAME\"," + echo " 800," + echo " 600," + echo " true" + echo " );" echo " " echo " while (vkcv::Window::hasOpenWindow()) {" echo " vkcv::Window::pollEvents();"