project (lightpreview CXX) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) find_package(Qt6 COMPONENTS OpenGL Widgets OpenGLWidgets) if(Qt6_FOUND) else() message(WARNING "Qt6 not found, disabling lightpreview") return() endif() message(STATUS "Using Qt version: ${Qt6_VERSION}") if ("${Qt6_VERSION}" VERSION_GREATER_EQUAL "6.3.0") qt_standard_project_setup() endif() qt_add_executable(lightpreview main.cpp mainwindow.cpp mainwindow.h glview.cpp glview.h stats.cpp stats.h) set_target_properties(lightpreview PROPERTIES WIN32_EXECUTABLE YES) set_target_properties(lightpreview PROPERTIES MACOSX_BUNDLE TRUE) INCLUDE_DIRECTORIES(${EMBREE_INCLUDE_DIRS}) # HACK: Windows embree .dll's from https://github.com/embree/embree/releases ship with a tbb12.dll # and we need to copy it from the embree/bin directory to our light.exe/testlight.exe dir in order for them to run find_file(EMBREE_TBB_DLL tbb12.dll "${EMBREE_ROOT_DIR}/bin" NO_DEFAULT_PATH) if (NOT EMBREE_TBB_DLL STREQUAL EMBREE_TBB_DLL-NOTFOUND) message(STATUS "Found embree EMBREE_TBB_DLL: ${EMBREE_TBB_DLL}") endif() target_link_libraries(lightpreview PRIVATE Qt6::Core Qt6::Widgets Qt6::Gui Qt6::OpenGL Qt6::OpenGLWidgets libqbsp liblight libvis common TBB::tbb TBB::tbbmalloc fmt::fmt) # from: http://stackoverflow.com/questions/40564443/copying-qt-dlls-to-executable-directory-on-windows-using-cmake # Copy Qt DLL's to bin directory for debugging if (WIN32) add_custom_command( TARGET lightpreview POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $ $/$ COMMAND ${CMAKE_COMMAND} -E create_symlink $ $/$ COMMAND ${CMAKE_COMMAND} -E create_symlink $ $/$ COMMAND ${CMAKE_COMMAND} -E create_symlink $ $/$ COMMAND ${CMAKE_COMMAND} -E create_symlink $ $/$ COMMAND ${CMAKE_COMMAND} -E make_directory $/plugins/platforms COMMAND ${CMAKE_COMMAND} -E create_symlink $ $/plugins/platforms/$ ) # HACK: copy .dll dependencies add_custom_command(TARGET lightpreview POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "$" "$" COMMAND ${CMAKE_COMMAND} -E copy_if_different "$" "$" COMMAND ${CMAKE_COMMAND} -E copy_if_different "$" "$" ) if (NOT EMBREE_TBB_DLL STREQUAL EMBREE_TBB_DLL-NOTFOUND) add_custom_command(TARGET lightpreview POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${EMBREE_TBB_DLL}" "$") endif() endif() copy_mingw_dlls(lightpreview) add_loader_path_to_rpath(lightpreview) # Install Qt DLL's if (WIN32) install(FILES $ DESTINATION .) install(FILES $ DESTINATION .) install(FILES $ DESTINATION .) install(FILES $ DESTINATION .) install(FILES $ DESTINATION .) install(FILES "$" DESTINATION plugins/platforms) endif () function(apple_install_lib SRC_TARGET_NAME DEST_PATH) # SRC_TARGET_NAME - a target name, e.g. Qt6::Widgets # DEST_PATH - destination path to install the library to get_target_property(SO_FILE_SYMLINK ${SRC_TARGET_NAME} IMPORTED_LOCATION_RELEASE) message(STATUS "${SRC_TARGET_NAME} .so symlink: ${SO_FILE_SYMLINK}") get_filename_component(SO_FILE_SYMLINK_NAME "${SO_FILE_SYMLINK}" NAME) message(STATUS "${SRC_TARGET_NAME} .so symlink name: ${SO_FILE_SYMLINK_NAME}") get_filename_component(SO_FILE "${SO_FILE_SYMLINK}" REALPATH) message(STATUS "${SRC_TARGET_NAME} .so file: ${SO_FILE}, renaming to: ${SO_FILE_SYMLINK_NAME} and installing in: ${DEST_PATH}") install(FILES ${SO_FILE} DESTINATION "${DEST_PATH}" RENAME "${SO_FILE_SYMLINK_NAME}") endfunction() if (APPLE) apple_install_lib(TBB::tbb "$") apple_install_lib(TBB::tbbmalloc "$") apple_install_lib(embree "$") # TODO: this should be replaced with macdeployqt apple_install_lib(Qt6::Core "$/QtCore.framework/Versions/A") apple_install_lib(Qt6::Widgets "$/QtWidgets.framework/Versions/A") apple_install_lib(Qt6::Gui "$/QtGui.framework/Versions/A") apple_install_lib(Qt6::OpenGL "$/QtOpenGL.framework/Versions/A") apple_install_lib(Qt6::OpenGLWidgets "$/QtOpenGLWidgets.framework/Versions/A") apple_install_lib(Qt6::QCocoaIntegrationPlugin "$/platforms") # these are required by QCocoaIntegrationPlugin find_package(Qt6DBus REQUIRED) find_package(Qt6PrintSupport REQUIRED) apple_install_lib(Qt6::PrintSupport "$/QtPrintSupport.framework/Versions/A") apple_install_lib(Qt6::DBus "$/QtDBus.framework/Versions/A") endif () install(TARGETS lightpreview RUNTIME DESTINATION . BUNDLE DESTINATION .)