|
1 | | -# Note: The dart-gui component is backed entirely by OpenSceneGraph (OSG). |
2 | | -# OSG is currently the only GUI backend and lives under dart/gui/osg. |
| 1 | +if(NOT DART_BUILD_GUI) |
| 2 | + message(STATUS "Skipping GUI (DART_BUILD_GUI == ${DART_BUILD_GUI})") |
| 3 | + return() |
| 4 | +endif() |
3 | 5 |
|
4 | | -# Add subdirectories |
5 | | -add_subdirectory(osg) |
| 6 | +# Set local target/component names |
| 7 | +set(target_name ${PROJECT_NAME}-gui) |
| 8 | +set(component_name gui) |
| 9 | +set(component_dependencies ) |
| 10 | +set(component_dependency_packages ) |
| 11 | +set(link_libraries ) |
| 12 | + |
| 13 | +# Dependency checks |
| 14 | +dart_check_dependent_target(${target_name} dart-utils) |
| 15 | + |
| 16 | +# OpenSceneGraph |
| 17 | +dart_find_package(OpenSceneGraph) |
| 18 | +dart_check_required_package(OpenSceneGraph "dart-gui" "OpenSceneGraph") |
| 19 | +list(APPEND component_dependency_packages OpenSceneGraph) |
| 20 | + |
| 21 | +# ImGui |
| 22 | +if(DART_USE_SYSTEM_IMGUI) |
| 23 | + list(APPEND component_dependency_packages imgui) |
| 24 | + list(APPEND link_libraries imgui::imgui) |
| 25 | +else() |
| 26 | + list(APPEND component_dependencies imgui) |
| 27 | + list(APPEND link_libraries dart-imgui-lib) |
| 28 | +endif() |
| 29 | + |
| 30 | +# Search all header and source files |
| 31 | +file(GLOB hdrs "*.hpp") |
| 32 | +file(GLOB srcs "*.cpp") |
| 33 | +file(GLOB detail_hdrs "detail/*.hpp") |
| 34 | +file(GLOB detail_srcs "detail/*.cpp") |
| 35 | + |
| 36 | +set(dart_gui_hdrs ${hdrs} ${detail_hdrs}) |
| 37 | +set(dart_gui_srcs ${srcs} ${detail_srcs}) |
| 38 | + |
| 39 | +add_subdirectory(render) |
| 40 | + |
| 41 | +file(GLOB render_hdrs "render/*.hpp") |
| 42 | + |
| 43 | +# Add target |
| 44 | +dart_add_library(${target_name} ${dart_gui_hdrs} ${dart_gui_srcs}) |
| 45 | +target_link_libraries(${target_name} dart-utils osg::osg ${link_libraries}) |
| 46 | + |
| 47 | +if(MSVC AND BUILD_SHARED_LIBS) |
| 48 | + if(CMAKE_CONFIGURATION_TYPES) |
| 49 | + foreach(_cfg ${CMAKE_CONFIGURATION_TYPES}) |
| 50 | + string(TOUPPER "${_cfg}" _cfg_upper) |
| 51 | + set_target_properties( |
| 52 | + ${target_name} |
| 53 | + PROPERTIES |
| 54 | + ARCHIVE_OUTPUT_DIRECTORY_${_cfg_upper} |
| 55 | + "${DART_BINARY_DIR}/lib/${_cfg}" |
| 56 | + ) |
| 57 | + endforeach() |
| 58 | + else() |
| 59 | + set_target_properties( |
| 60 | + ${target_name} |
| 61 | + PROPERTIES |
| 62 | + ARCHIVE_OUTPUT_DIRECTORY "${DART_BINARY_DIR}/lib/${CMAKE_BUILD_TYPE}" |
| 63 | + ) |
| 64 | + endif() |
| 65 | +endif() |
| 66 | + |
| 67 | +# Component |
| 68 | +add_component(${PROJECT_NAME} ${component_name}) |
| 69 | +add_component_targets(${PROJECT_NAME} ${component_name} ${target_name}) |
| 70 | +add_component_dependencies(${PROJECT_NAME} ${component_name} utils ${component_dependencies}) |
| 71 | +add_component_dependency_packages(${PROJECT_NAME} ${component_name} ${component_dependency_packages}) |
| 72 | + |
| 73 | +# Generate header for this namespace |
| 74 | +dart_get_filename_components(header_names "gui headers" ${hdrs}) |
| 75 | +list(APPEND header_names "render/All.hpp") |
| 76 | +dart_generate_component_headers( |
| 77 | + COMPONENT_NAME gui |
| 78 | + TARGET_DIR "dart/gui/" |
| 79 | + OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}" |
| 80 | + HEADERS ${header_names} |
| 81 | + SOURCE_HEADERS ${hdrs} ${detail_hdrs} ${render_hdrs} |
| 82 | +) |
| 83 | + |
| 84 | +# Install (includes All.hpp, gui.hpp for component compatibility, |
| 85 | +# and generated PascalCase headers for case compatibility) |
| 86 | +install( |
| 87 | + FILES ${hdrs} ${CMAKE_CURRENT_BINARY_DIR}/All.hpp ${CMAKE_CURRENT_BINARY_DIR}/gui.hpp |
| 88 | + DESTINATION include/dart/gui |
| 89 | + COMPONENT headers |
| 90 | +) |
| 91 | +install( |
| 92 | + FILES ${detail_hdrs} |
| 93 | + DESTINATION include/dart/gui/detail |
| 94 | + COMPONENT headers |
| 95 | +) |
| 96 | +# Install generated compatibility headers preserving subdirectory structure |
| 97 | +dart_install_compat_headers( |
| 98 | + COMPAT_HEADERS ${DART_GENERATED_COMPAT_HEADERS} |
| 99 | + DESTINATION_PREFIX include/dart/gui |
| 100 | +) |
| 101 | + |
| 102 | +dart_format_add(${hdrs} ${srcs} ${dart_gui_hdrs} ${dart_gui_srcs}) |
0 commit comments