1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
macro(open3d_add_app SRC_DIR APP_NAME TARGET_NAME)
set(APPS_DIR "${PROJECT_SOURCE_DIR}/cpp/apps")
set(SOURCE_DIR "${APPS_DIR}/${SRC_DIR}")
if (APPLE)
file(GLOB OBJC_FILES "${SOURCE_DIR}/*.mm")
target_sources(${TARGET_NAME} PRIVATE ${OBJC_FILES})
file(GLOB RESOURCE_FILES "${SOURCE_DIR}/*.icns")
list(APPEND RESOURCE_FILES "${SOURCE_DIR}/Assets.car")
set(INFO_PLIST "${SOURCE_DIR}/Info.plist.in")
set(MACOSX_BUNDLE_NAME ${APP_NAME})
set(MACOSX_BUNDLE_EXECUTABLE_NAME ${APP_NAME})
set(MACOSX_BUNDLE_GUI_IDENTIFIER com.isl-org.open3d.${APP_NAME})
set(MACOSX_BUNDLE_ICON_FILE "AppIcon")
set(MACOSX_BUNDLE_LONG_VERSION_STRING ${PROJECT_VERSION_THREE_NUMBER})
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_THREE_NUMBER})
set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION_THREE_NUMBER})
set(MACOSX_BUNDLE_COPYRIGHT "Copyright (c) 2018-2022 www.open3d.org")
endif()
# Copy the resource files. This needs to be done as a post-build step
# because on macOS, we don't know the bundle directory until build time
# if we are using Xcode.
set(RESOURCE_FILES ${GUI_RESOURCE_FILES} ${RESOURCE_FILES})
if (APPLE)
set(RESOURCE_DIR_NAME "Contents/Resources")
else ()
set(RESOURCE_DIR_NAME "resources")
endif()
# $<TARGET_BUNDLE_DIR> does not exist at config time, so we need to
# duplicate the post build step on macOS and non-macOS
if (APPLE)
add_custom_command(TARGET "${TARGET_NAME}"
POST_BUILD
# copy the resource files into the bundle
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_BUNDLE_DIR:${TARGET_NAME}>/${RESOURCE_DIR_NAME}"
COMMAND ${CMAKE_COMMAND} -E copy ${RESOURCE_FILES} "$<TARGET_BUNDLE_DIR:${TARGET_NAME}>/${RESOURCE_DIR_NAME}"
# copy external libraries (e.g. SDL into the bundle and fixup
# the search paths
COMMAND ${APPS_DIR}/fixup_macosx_bundle.sh "$<TARGET_BUNDLE_DIR:${TARGET_NAME}>"
)
else ()
set(APP_DIR "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
add_custom_command(TARGET "${TARGET_NAME}"
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${APP_DIR}/${RESOURCE_DIR_NAME}"
COMMAND ${CMAKE_COMMAND} -E copy ${RESOURCE_FILES} "${APP_DIR}/${RESOURCE_DIR_NAME}"
)
if (UNIX)
install(DIRECTORY "${APP_DIR}"
DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
USE_SOURCE_PERMISSIONS)
set(DESKTOP_INSTALL_DIR "/usr/share")
configure_file("${SOURCE_DIR}/${TARGET_NAME}.desktop.in"
"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${APP_NAME}.desktop")
# Install using freedesktop.org standards
install(FILES "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${APP_NAME}.desktop"
DESTINATION "${DESKTOP_INSTALL_DIR}/applications")
install(FILES "${SOURCE_DIR}/icon.svg"
DESTINATION "${DESKTOP_INSTALL_DIR}/icons/hicolor/scalable/apps"
RENAME "${APP_NAME}.svg")
install(FILES "${SOURCE_DIR}/${TARGET_NAME}.xml"
DESTINATION "${DESKTOP_INSTALL_DIR}/mime/packages"
RENAME "${APP_NAME}.xml")
# Various caches need to be updated for the app to become visible
install(CODE "execute_process(COMMAND ${SOURCE_DIR}/postinstall-linux.sh)")
elseif (WIN32)
# MSVC puts the binary in bin/Open3D/Release/Open3D.exe
# so we can't just install() the build results, and need to do them piecemeal.
install(DIRECTORY "${APP_DIR}/resources"
DESTINATION "${CMAKE_INSTALL_PREFIX}/bin/${APP_NAME}"
USE_SOURCE_PERMISSIONS)
install(FILES "${APP_DIR}/$<CONFIG>/${TARGET_NAME}.exe"
DESTINATION "${CMAKE_INSTALL_PREFIX}/bin/${APP_NAME}"
RENAME "${APP_NAME}.exe")
else()
install(DIRECTORY "${APP_DIR}"
DESTINATION "${CMAKE_INSTALL_PREFIX}/bin"
USE_SOURCE_PERMISSIONS)
endif()
endif()
endmacro()
macro(open3d_add_app_common SRC_DIR APP_NAME TARGET_NAME)
set(APPS_DIR "${PROJECT_SOURCE_DIR}/cpp/apps")
set(SOURCE_DIR "${APPS_DIR}/${SRC_DIR}")
file(GLOB SOURCE_FILES "${SOURCE_DIR}/*.cpp")
file(GLOB HEADER_FILES "${SOURCE_DIR}/*.h")
if (APPLE)
add_executable(${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES})
set_target_properties(${TARGET_NAME} PROPERTIES
MACOSX_BUNDLE TRUE
MACOSX_BUNDLE_INFO_PLIST "${INFO_PLIST}"
XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" # disable
OUTPUT_NAME ${APP_NAME}
)
elseif (WIN32)
# MSVC started giving LNK:1114, error 5, which appears to be caused by
# the executable having the same name as the library. (Except that this
# was working before, so not sure what changed.)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../${APP_NAME}")
add_executable(${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES})
else()
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/../${APP_NAME}")
add_executable(${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES})
set_target_properties(${TARGET_NAME} PROPERTIES
OUTPUT_NAME ${APP_NAME}
)
endif()
target_link_libraries(${TARGET_NAME} PRIVATE Open3D::Open3D ${ARGN})
set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "apps")
open3d_link_3rdparty_libraries(${TARGET_NAME})
open3d_show_and_abort_on_warning(${TARGET_NAME})
open3d_set_global_properties(${TARGET_NAME})
endmacro()
if (BUILD_GUI)
open3d_add_app_common(Open3DViewer Open3D Open3DViewer)
open3d_add_app(Open3DViewer Open3D Open3DViewer)
endif()
open3d_add_app_common(OfflineReconstruction OfflineReconstruction OfflineReconstruction)
|