You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
8.4 KiB
258 lines
8.4 KiB
cmake_minimum_required(VERSION 3.5)
|
|
#####################################################################################
|
|
# offer the choice of having nvpro_core as a sub-folder... good for packaging a sample
|
|
#
|
|
# if BASE_DIRECTORY not defined, it means this cmake file was called as the first entry point and not included
|
|
if(NOT BASE_DIRECTORY) # if not defined, it means this cmake file was called as the first entry point and not included
|
|
message(FATAL_ERROR "cannot be directly invoked")
|
|
else()
|
|
Message(STATUS "-------------------------------")
|
|
Message(STATUS "Processing nvpro_core files")
|
|
endif()
|
|
|
|
|
|
set(NVPWINDOW_SOURCE
|
|
${BASE_DIRECTORY}/nvpro_core/nvp/nvpwindow.cpp
|
|
${BASE_DIRECTORY}/nvpro_core/nvp/nvpwindow.hpp
|
|
${BASE_DIRECTORY}/nvpro_core/nvp/nvpsystem.cpp
|
|
${BASE_DIRECTORY}/nvpro_core/nvp/nvpsystem.hpp
|
|
${BASE_DIRECTORY}/nvpro_core/nvp/nvpfilesystem.cpp
|
|
${BASE_DIRECTORY}/nvpro_core/nvp/nvpfilesystem.hpp
|
|
# Do not add project_name.cpp here as it contains per-project dependent data.
|
|
# perproject_globals.cpp will be automatically added to the per-project builds via
|
|
# COMMON_SOURCE_FILES
|
|
${BASE_DIRECTORY}/nvpro_core/nvp/perproject_globals.hpp
|
|
)
|
|
|
|
if(UNIX)
|
|
LIST(APPEND NVPWINDOW_SOURCE ${BASE_DIRECTORY}/nvpro_core/nvp/nvpsystem_linux.cpp )
|
|
else()
|
|
LIST(APPEND NVPWINDOW_SOURCE ${BASE_DIRECTORY}/nvpro_core/nvp/nvpsystem_win32.cpp )
|
|
endif()
|
|
|
|
if(NOT (CMAKE_SIZEOF_VOID_P EQUAL 8))
|
|
message( FATAL_ERROR "64-bit builds are mandatory for this framework" )
|
|
endif()
|
|
|
|
|
|
# Add third party libraries. This sets THIRDPARTY_LIBRARIES to list of added libraries
|
|
add_subdirectory(third_party)
|
|
|
|
|
|
# add packages that may be needed by some of the samples
|
|
_optional_package_VulkanSDK()
|
|
_optional_package_ShaderC()
|
|
_optional_package_OpenGL()
|
|
_optional_package_DirectX12()
|
|
_optional_package_Freeimage()
|
|
_optional_package_Optix()
|
|
_optional_package_Cuda()
|
|
_optional_package_NVToolsExt()
|
|
|
|
# process the rest of some cmake code that needs to be done after the packages
|
|
_process_shared_cmake_code()
|
|
|
|
file(GLOB FILEFORMATS_SOURCE fileformats/*.cpp fileformats/*.hpp fileformats/*.inl fileformats/*.h)
|
|
file(GLOB NVMATH_SOURCE nvmath/*.cpp nvmath/*.hpp nvmath/*.inl nvmath/*.h)
|
|
file(GLOB NVHELPERS_SOURCE nvh/*.cpp nvh/*.hpp nvh/*.inl nvh/*.h)
|
|
|
|
if (NOT TARGET tinygltf)
|
|
list(REMOVE_ITEM NVHELPERS_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/nvh/gltfscene.cpp)
|
|
list(REMOVE_ITEM NVHELPERS_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/nvh/gltfscene.hpp)
|
|
list(REMOVE_ITEM FILEFORMATS_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/fileformats/tiny_gltf_freeimage.h)
|
|
endif()
|
|
|
|
set(library_name "nvpro_core")
|
|
|
|
if(USING_OPENGL)
|
|
file(GLOB NVHELPERSGL_SOURCE nvgl/*.cpp nvgl/*.hpp nvgl/*.inl nvgl/*.h)
|
|
source_group("nvgl" FILES ${NVHELPERSGL_SOURCE})
|
|
|
|
string(CONCAT library_name ${library_name} "_gl")
|
|
endif()
|
|
|
|
if(USING_VULKANSDK)
|
|
file(GLOB NVHELPERSVK_SOURCE nvvk/*.cpp nvvk/*.hpp nvvk/*.inl nvvk/*.h)
|
|
|
|
# the implementation depends on SUPPORTS_AFTERMATH and thus can only be provided
|
|
# as part of the individual sample projects. Check setup.cmake where we insert
|
|
# nsight_aftermath_vk.cpp into the projects automatically
|
|
list(REMOVE_ITEM NVHELPERSVK_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/nvvk/nsight_aftermath_vk.cpp)
|
|
|
|
# Adding compile_glsl
|
|
if(EXISTS ${BASE_DIRECTORY}/nvpro_core/cmake/utilities.cmake)
|
|
include(${BASE_DIRECTORY}/nvpro_core/cmake/utilities.cmake)
|
|
endif()
|
|
|
|
# Vulkan-high-level helpers
|
|
file(GLOB NVVKHL_SOURCE nvvkhl/*.cpp nvvkhl/*.hpp nvvkl/*.inl nvvkh;/*.h)
|
|
set(SHD_DIR nvvkhl/shaders)
|
|
file(GLOB SHD_HDR ${SHD_DIR}/*.glsl ${SHD_DIR}/*.h)
|
|
file(GLOB SHD_SRC ${SHD_DIR}/*.vert ${SHD_DIR}/*.frag ${SHD_DIR}/*.comp ${SHD_DIR}/*.rgen ${SHD_DIR}/*.rchit ${SHD_DIR}/*.rmiss)
|
|
# Compiling shaders to SPIR-V header
|
|
compile_glsl(
|
|
SOURCE_FILES ${SHD_SRC}
|
|
HEADER_FILES ${SHD_HDR}
|
|
DST "${CMAKE_CURRENT_SOURCE_DIR}/_autogen"
|
|
VULKAN_TARGET "vulkan1.2"
|
|
HEADER ON
|
|
DEPENDENCY ${VULKAN_BUILD_DEPENDENCIES}
|
|
FLAGS "-I${SHD_DIR}" "-I${CMAKE_CURRENT_SOURCE_DIR}" -g
|
|
)
|
|
|
|
if (NOT TARGET vma)
|
|
list(REMOVE_ITEM NVHELPERSVK_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/nvvk/memallocator_vma_vk.hpp)
|
|
list(REMOVE_ITEM NVHELPERSVK_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/nvvk/memallocator_vma_vk.inl)
|
|
list(REMOVE_ITEM NVVKHL_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/nvvkhl/alloc_vma.hpp)
|
|
endif()
|
|
|
|
source_group("nvvk" FILES ${NVHELPERSVK_SOURCE})
|
|
source_group("nvvkhl" FILES ${NVVKHL_SOURCE})
|
|
source_group("nvvkhl/shaders" FILES ${GLSL_SOURCES} ${GLSL_HEADERS})
|
|
set(NVVKHL_SHADERS ${GLSL_SOURCES} ${GLSL_HEADERS})
|
|
|
|
string(CONCAT library_name ${library_name} "_vk")
|
|
|
|
if(WIN32)
|
|
add_definitions(-DVK_USE_PLATFORM_WIN32_KHR)
|
|
endif(WIN32)
|
|
if(UNIX)
|
|
add_definitions(-DVK_USE_PLATFORM_XCB_KHR)
|
|
add_definitions(-DVK_USE_PLATFORM_XLIB_KHR)
|
|
endif(UNIX)
|
|
endif()
|
|
|
|
if(USING_IMGUI)
|
|
set(IMGUI_SOURCE
|
|
imgui/imgui_axis.cpp
|
|
imgui/imgui_axis.hpp
|
|
imgui/imgui_camera_widget.cpp
|
|
imgui/imgui_camera_widget.h
|
|
imgui/imgui_helper.cpp
|
|
imgui/imgui_helper.h
|
|
imgui/imgui_orient.cpp
|
|
imgui/imgui_orient.h
|
|
${IMGUI_DIR}/backends/imgui_impl_glfw.cpp
|
|
${IMGUI_DIR}/backends/imgui_impl_glfw.h
|
|
)
|
|
if (NOT TARGET tinygltf)
|
|
# depends on json.hpp from tinygltf
|
|
list(REMOVE_ITEM IMGUI_SOURCE imgui/imgui_camera_widget.h)
|
|
list(REMOVE_ITEM IMGUI_SOURCE imgui/imgui_camera_widget.cpp)
|
|
endif()
|
|
|
|
# pickup our own backend directory
|
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/imgui ${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends)
|
|
|
|
if(USING_OPENGL)
|
|
list(APPEND IMGUI_SOURCE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_gl.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_gl.h
|
|
)
|
|
endif()
|
|
|
|
if(USING_VULKANSDK)
|
|
# replaced with our own copy
|
|
list(REMOVE_ITEM IMGUI_SOURCE ${IMGUI_DIR}/imgui/backends/imgui_impl_vulkan.cpp)
|
|
list(REMOVE_ITEM IMGUI_SOURCE ${IMGUI_DIR}/imgui/backends/imgui_impl_vulkan.h)
|
|
|
|
list(APPEND IMGUI_SOURCE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_vk_extra.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_vk_extra.h
|
|
${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_vulkan.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/imgui/backends/imgui_impl_vulkan.h)
|
|
endif()
|
|
|
|
if(USING_DIRECTX12)
|
|
list(APPEND IMGUI_SOURCE
|
|
${IMGUI_DIR}/backends/imgui_impl_dx12.cpp
|
|
${IMGUI_DIR}/backends/imgui_impl_dx12.h)
|
|
endif()
|
|
|
|
endif()
|
|
|
|
if (USING_DIRECTX12)
|
|
file(GLOB NVHELPERSDX12_SOURCE nvdx12/*.cpp nvdx12/*.hpp nvdx12/*.inl nvdx12/*.h)
|
|
source_group("nvdx12" FILES ${NVHELPERSDX12_SOURCE})
|
|
|
|
string(CONCAT library_name ${library_name} "_dx12")
|
|
endif()
|
|
|
|
|
|
if (USING_OPTIX)
|
|
Message(STATUS "Note: adding Optix utility files")
|
|
file(GLOB NVHELPERSOPTIX_FILES nvoptix/*.cpp nvoptix/*.h)
|
|
source_group("nvoptix" FILES ${NVHELPERSOPTIX_FILES})
|
|
|
|
string(CONCAT library_name ${library_name} "_optix")
|
|
endif()
|
|
|
|
if (USING_SHADERC)
|
|
string(CONCAT library_name ${library_name} "_shaderc")
|
|
endif()
|
|
|
|
source_group("fileformats" FILES ${FILEFORMATS_SOURCE})
|
|
source_group("noise" FILES ${NOISE_SOURCE})
|
|
source_group("nvmath" FILES ${NVMATH_SOURCE})
|
|
source_group("nvh" FILES ${NVHELPERS_SOURCE})
|
|
source_group("nvp" FILES ${NVPWINDOW_SOURCE})
|
|
source_group("imgui" FILES ${IMGUI_SOURCE})
|
|
|
|
if(MSVC)
|
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
|
endif(MSVC)
|
|
|
|
|
|
if(USING_OPENGL)
|
|
set(OPENGL_FILES
|
|
${has_GL_FILES}
|
|
)
|
|
endif()
|
|
|
|
add_library(nvpro_core STATIC
|
|
${NVHELPERS_SOURCE}
|
|
${NVMATH_SOURCE}
|
|
${IMGUI_SOURCE}
|
|
${FILEFORMATS_SOURCE}
|
|
${NVPWINDOW_SOURCE}
|
|
${OPENGL_FILES}
|
|
${NVHELPERSVK_SOURCE}
|
|
${NVVKHL_SOURCE}
|
|
${NVVKHL_SHADERS}
|
|
${NVHELPERSGL_SOURCE}
|
|
${NVHELPERSDX12_SOURCE}
|
|
${PACKAGE_SOURCE_FILES}
|
|
${NVHELPERSOPTIX_FILES}
|
|
)
|
|
|
|
# Create precompiled header (added in CMake 3.16)
|
|
if((${CMAKE_VERSION} VERSION_GREATER "3.16.0") OR (${CMAKE_VERSION} VERSION_EQUAL "3.16.0"))
|
|
target_precompile_headers(nvpro_core PRIVATE
|
|
"<algorithm>"
|
|
${VULKAN_HEADERS}
|
|
)
|
|
endif()
|
|
|
|
# Add X11 for screenshot support on linux
|
|
if(UNIX)
|
|
find_package(X11 REQUIRED)
|
|
LIST(APPEND PLATFORM_LIBRARIES ${X11_LIBRARIES})
|
|
endif()
|
|
|
|
if(USING_IMGUI)
|
|
# Enable ImVec* operators for all nvpro_core. See imgui.h.
|
|
target_compile_definitions(nvpro_core PRIVATE IMGUI_DEFINE_MATH_OPERATORS)
|
|
endif()
|
|
|
|
target_link_libraries(nvpro_core
|
|
${PLATFORM_LIBRARIES}
|
|
glfw
|
|
imgui
|
|
${THIRDPARTY_LIBRARIES}
|
|
)
|
|
|
|
set_target_properties(nvpro_core PROPERTIES OUTPUT_NAME ${library_name})
|
|
_set_target_output(nvpro_core)
|
|
|
|
message(STATUS "nvpro_core library name: ${library_name}")
|
|
|
|
|