270 lines
8.8 KiB
CMake
270 lines
8.8 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(UsdLayerManager VERSION 1.0.0 LANGUAGES C CXX)
|
|
|
|
# Set C++ standard
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
|
|
# Add cmake modules path
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules")
|
|
|
|
# Find dependencies
|
|
find_package(OpenGL REQUIRED)
|
|
find_package(OpenUSD REQUIRED)
|
|
find_package(Imgui REQUIRED)
|
|
find_package(Glad REQUIRED)
|
|
|
|
# Collect source files
|
|
file(GLOB_RECURSE CORE_SOURCES "src/core/*.cpp")
|
|
file(GLOB_RECURSE UI_SOURCES "src/ui/*.cpp")
|
|
file(GLOB_RECURSE UTILS_SOURCES "src/utils/*.cpp")
|
|
set(MAIN_SOURCE "src/main.cpp")
|
|
|
|
# Create executable
|
|
add_executable(UsdLayerManager
|
|
${MAIN_SOURCE}
|
|
${CORE_SOURCES}
|
|
${UI_SOURCES}
|
|
${UTILS_SOURCES}
|
|
)
|
|
|
|
# Include directories
|
|
target_include_directories(UsdLayerManager PRIVATE
|
|
${CMAKE_SOURCE_DIR}/src
|
|
${CMAKE_SOURCE_DIR}/include
|
|
${CMAKE_SOURCE_DIR}/third_party/fontawesome
|
|
${CMAKE_SOURCE_DIR}/third_party/nanosvg
|
|
)
|
|
|
|
# Link libraries
|
|
target_link_libraries(UsdLayerManager PRIVATE
|
|
OpenUSD::OpenUSD
|
|
Imgui::Imgui
|
|
Glad::Glad
|
|
)
|
|
|
|
# Platform-specific settings
|
|
if(WIN32)
|
|
# Windows-specific settings
|
|
target_compile_definitions(UsdLayerManager PRIVATE
|
|
WIN32_LEAN_AND_MEAN
|
|
NOMINMAX
|
|
_CRT_SECURE_NO_WARNINGS
|
|
)
|
|
|
|
# Copy runtime DLLs to output directory for each configuration
|
|
add_custom_command(TARGET UsdLayerManager POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:UsdLayerManager>"
|
|
# OpenUSD lib/ — usd_*.dll, boost_*.dll, Alembic.dll, etc.
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_BIN_DIR}"
|
|
"$<TARGET_FILE_DIR:UsdLayerManager>"
|
|
# OpenUSD bin/ — tbb.dll, MaterialX, OpenEXR, OpenImageIO, etc.
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_ROOT_DIR}/bin"
|
|
"$<TARGET_FILE_DIR:UsdLayerManager>"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_ROOT_DIR}/lib/usd"
|
|
"$<TARGET_FILE_DIR:UsdLayerManager>/usd"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_ROOT_DIR}/plugin/usd"
|
|
"$<TARGET_FILE_DIR:UsdLayerManager>/usd"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/python312.dll"
|
|
"$<TARGET_FILE_DIR:UsdLayerManager>"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/python3.dll"
|
|
"$<TARGET_FILE_DIR:UsdLayerManager>"
|
|
COMMENT "Copying runtime DLLs and USD plugins..."
|
|
)
|
|
endif()
|
|
|
|
# Compiler warnings
|
|
if(MSVC)
|
|
target_compile_options(UsdLayerManager PRIVATE /W4)
|
|
else()
|
|
target_compile_options(UsdLayerManager PRIVATE -Wall -Wextra -Wpedantic)
|
|
endif()
|
|
|
|
# Install rules
|
|
install(TARGETS UsdLayerManager
|
|
RUNTIME DESTINATION bin
|
|
)
|
|
|
|
# Install all OpenUSD runtime DLLs (same set that POST_BUILD copies to build/Release).
|
|
# Without these the exe cannot start from install/bin.
|
|
install(DIRECTORY ${OpenUSD_BIN_DIR}/
|
|
DESTINATION bin
|
|
FILES_MATCHING PATTERN "*.dll"
|
|
)
|
|
|
|
# Install OpenUSD bin/ DLLs — tbb.dll, tbbmalloc.dll, MaterialX, OpenEXR,
|
|
# OpenImageIO, zlib, etc. These are separate from lib/ and also required at runtime.
|
|
install(DIRECTORY ${OpenUSD_ROOT_DIR}/bin/
|
|
DESTINATION bin
|
|
FILES_MATCHING PATTERN "*.dll"
|
|
)
|
|
|
|
install(DIRECTORY ${OpenUSD_ROOT_DIR}/lib/usd
|
|
DESTINATION bin
|
|
)
|
|
|
|
install(DIRECTORY ${OpenUSD_ROOT_DIR}/plugin/usd
|
|
DESTINATION bin/usd
|
|
)
|
|
|
|
install(FILES ${OpenUSD_ROOT_DIR}/plugin/usd/hdStorm.dll
|
|
DESTINATION bin
|
|
)
|
|
|
|
# Install Python runtime DLLs required by OpenUSD.
|
|
install(FILES
|
|
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/python312.dll"
|
|
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/python3.dll"
|
|
DESTINATION bin
|
|
OPTIONAL # OPTIONAL so the install doesn't fail on machines with a
|
|
# system-wide Python; in that case the DLL is on PATH already.
|
|
)
|
|
|
|
# Copy resources to build directory
|
|
file(COPY ${CMAKE_SOURCE_DIR}/resources
|
|
DESTINATION ${CMAKE_BINARY_DIR}
|
|
)
|
|
|
|
# Copy font and SVG icons to build directory
|
|
add_custom_command(TARGET UsdLayerManager POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:UsdLayerManager>/../resources/font"
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:UsdLayerManager>/resources/icons"
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
"${CMAKE_SOURCE_DIR}/third_party/Inter/Inter.ttc"
|
|
"$<TARGET_FILE_DIR:UsdLayerManager>/resources/font/Inter.ttc"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${CMAKE_SOURCE_DIR}/resources/icons"
|
|
"$<TARGET_FILE_DIR:UsdLayerManager>/resources/icons"
|
|
COMMENT "Copying fonts and SVG icons to build output"
|
|
)
|
|
|
|
# Install resources (icons, fonts placeholder) next to the exe so the
|
|
# exe-relative path "resources/..." resolves correctly from install/bin/.
|
|
install(DIRECTORY ${CMAKE_SOURCE_DIR}/resources
|
|
DESTINATION bin
|
|
)
|
|
|
|
# Install Inter font next to the exe under resources/font/
|
|
# ImGuiContext tries "resources/font/Inter.ttf" then "resources/font/Inter.ttc".
|
|
install(FILES ${CMAKE_SOURCE_DIR}/third_party/Inter/Inter.ttc
|
|
DESTINATION bin/resources/font
|
|
)
|
|
|
|
# Print configuration summary
|
|
message(STATUS "")
|
|
message(STATUS "=== USD Layer Manager Configuration ===")
|
|
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
message(STATUS "C++ standard: ${CMAKE_CXX_STANDARD}")
|
|
message(STATUS "Install prefix: ${CMAKE_INSTALL_PREFIX}")
|
|
message(STATUS "OpenUSD found: ${OpenUSD_FOUND}")
|
|
message(STATUS "ImGui found: ${Imgui_FOUND}")
|
|
message(STATUS "OpenGL found: ${OPENGL_FOUND}")
|
|
message(STATUS "Glad found: ${Glad_FOUND}")
|
|
message(STATUS "Build tests: ${BUILD_TESTS}")
|
|
message(STATUS "=======================================")
|
|
message(STATUS "")
|
|
|
|
# === Test build option ===
|
|
option(BUILD_TESTS "Build test executables" OFF)
|
|
|
|
if(BUILD_TESTS)
|
|
|
|
# === Viewport Display Test ===
|
|
add_executable(ViewportDisplayTest
|
|
tests/viewport_display_test.cpp
|
|
${CORE_SOURCES}
|
|
${UTILS_SOURCES}
|
|
)
|
|
|
|
target_include_directories(ViewportDisplayTest PRIVATE
|
|
${CMAKE_SOURCE_DIR}/src
|
|
${CMAKE_SOURCE_DIR}/include
|
|
)
|
|
|
|
target_link_libraries(ViewportDisplayTest PRIVATE
|
|
OpenUSD::OpenUSD
|
|
Glad::Glad
|
|
)
|
|
|
|
if(WIN32)
|
|
target_compile_definitions(ViewportDisplayTest PRIVATE
|
|
WIN32_LEAN_AND_MEAN
|
|
NOMINMAX
|
|
_CRT_SECURE_NO_WARNINGS
|
|
)
|
|
|
|
add_custom_command(TARGET ViewportDisplayTest POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_BIN_DIR}"
|
|
"$<TARGET_FILE_DIR:ViewportDisplayTest>"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_ROOT_DIR}/lib/usd"
|
|
"$<TARGET_FILE_DIR:ViewportDisplayTest>/usd"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_ROOT_DIR}/plugin/usd"
|
|
"$<TARGET_FILE_DIR:ViewportDisplayTest>/usd"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/python312.dll"
|
|
"$<TARGET_FILE_DIR:ViewportDisplayTest>"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/python3.dll"
|
|
"$<TARGET_FILE_DIR:ViewportDisplayTest>"
|
|
COMMENT "Copying runtime DLLs and USD plugins for test..."
|
|
)
|
|
endif()
|
|
|
|
enable_testing()
|
|
add_test(NAME ViewportDisplayTest COMMAND ViewportDisplayTest)
|
|
|
|
add_executable(RendererDiagnosticTest
|
|
tests/renderer_diagnostic_test.cpp
|
|
${CORE_SOURCES}
|
|
${UTILS_SOURCES}
|
|
)
|
|
|
|
target_include_directories(RendererDiagnosticTest PRIVATE
|
|
${CMAKE_SOURCE_DIR}/src
|
|
${CMAKE_SOURCE_DIR}/include
|
|
)
|
|
|
|
target_link_libraries(RendererDiagnosticTest PRIVATE
|
|
OpenUSD::OpenUSD
|
|
Glad::Glad
|
|
)
|
|
|
|
if(WIN32)
|
|
target_compile_definitions(RendererDiagnosticTest PRIVATE
|
|
WIN32_LEAN_AND_MEAN
|
|
NOMINMAX
|
|
_CRT_SECURE_NO_WARNINGS
|
|
)
|
|
|
|
add_custom_command(TARGET RendererDiagnosticTest POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_BIN_DIR}"
|
|
"$<TARGET_FILE_DIR:RendererDiagnosticTest>"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_ROOT_DIR}/lib/usd"
|
|
"$<TARGET_FILE_DIR:RendererDiagnosticTest>/usd"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
"${OpenUSD_ROOT_DIR}/plugin/usd"
|
|
"$<TARGET_FILE_DIR:RendererDiagnosticTest>/usd"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/python312.dll"
|
|
"$<TARGET_FILE_DIR:RendererDiagnosticTest>"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"$ENV{LOCALAPPDATA}/Programs/Python/Python312/python3.dll"
|
|
"$<TARGET_FILE_DIR:RendererDiagnosticTest>"
|
|
COMMENT "Copying runtime DLLs and USD plugins for diagnostic test..."
|
|
)
|
|
endif()
|
|
|
|
endif() # BUILD_TESTS
|