1# Copyright (c) 2020-2023 Intel Corporation 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15cmake_minimum_required(VERSION 3.5) 16 17set(EXAMPLES_UI_MODE "con" CACHE STRING "EXAMPLES_UI_MODE") 18 19if (WIN32) 20 set_property(CACHE EXAMPLES_UI_MODE PROPERTY STRINGS "con" "gdi" "d2d") 21elseif (APPLE) 22 set_property(CACHE EXAMPLES_UI_MODE PROPERTY STRINGS "con" "mac") 23else() 24 set_property(CACHE EXAMPLES_UI_MODE PROPERTY STRINGS "con" "x") 25endif() 26 27get_property(_available_ui_modes CACHE EXAMPLES_UI_MODE PROPERTY STRINGS) 28 29list(FIND _available_ui_modes ${EXAMPLES_UI_MODE} _find_index) 30if (NOT _find_index EQUAL -1) 31 add_library(UI_LIB_${PROJECT_NAME} STATIC ${CMAKE_CURRENT_LIST_DIR}/${EXAMPLES_UI_MODE}video.cpp) 32 33 if (EXAMPLES_UI_MODE STREQUAL "mac") 34 enable_language(C) 35 add_library(UI_LIB_OBJECT_${PROJECT_NAME} OBJECT 36 ${CMAKE_CURRENT_LIST_DIR}/xcode/tbbExample/main.m 37 ${CMAKE_CURRENT_LIST_DIR}/xcode/tbbExample/OpenGLView.m 38 ${CMAKE_CURRENT_LIST_DIR}/xcode/tbbExample/tbbAppDelegate.m 39 ) 40 target_sources(UI_LIB_${PROJECT_NAME} PUBLIC $<TARGET_OBJECTS:UI_LIB_OBJECT_${PROJECT_NAME}>) 41 endif() 42else() 43 string(REPLACE ";" ", " _available_ui_modes "${_available_ui_modes}") 44 message(FATAL_ERROR 45 "Selected UI mode (${EXAMPLES_UI_MODE}) is not supported on ${CMAKE_SYSTEM_NAME}. 46 Supported UI modes: ${_available_ui_modes}" 47 ) 48endif() 49 50macro(set_gdi_ui_project_settings) 51 find_program(RC rc REQUIRED) 52 add_custom_command(TARGET UI_LIB_${PROJECT_NAME} PRE_BUILD COMMAND 53 ${RC} /r -fo ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.res ${PROJECT_SOURCE_DIR}/gui/${PROJECT_NAME}.rc 54 ) 55 56 set_target_properties(${PROJECT_NAME} PROPERTIES WIN32_EXECUTABLE TRUE) 57 if (COMMAND target_link_options) 58 target_link_options(UI_LIB_${PROJECT_NAME} PUBLIC ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.res) 59 else() 60 set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.res) 61 endif() 62endmacro() 63 64macro(set_d2d_ui_project_settings) 65 set_gdi_ui_project_settings() 66 67 if (IS_DIRECTORY $ENV{DXSDK_DIR}) 68 target_include_directories(UI_LIB_${PROJECT_NAME} PUBLIC $ENV{DXSDK_DIR}\\include) 69 target_link_directories(UI_LIB_${PROJECT_NAME} PUBLIC $ENV{DXSDK_DIR}\\lib\\x64) 70 else() 71 message(FATAL_ERROR "Cannot find the DirectX library (required by the 'd2d' UI mode)") 72 endif() 73endmacro() 74 75macro(set_x_ui_project_settings) 76 find_package(X11 REQUIRED) 77 target_link_libraries(UI_LIB_${PROJECT_NAME} PUBLIC ${X11_LIBRARIES}) 78 target_include_directories(UI_LIB_${PROJECT_NAME} PUBLIC ${X11_INCLUDE_DIR}) 79 80 find_library(LIB_Xext Xext PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH ENV DYLD_LIBRARY_PATH) 81 if (LIB_Xext) 82 target_link_libraries(UI_LIB_${PROJECT_NAME} PUBLIC ${LIB_Xext}) 83 else() 84 target_compile_definitions(UI_LIB_${PROJECT_NAME} PUBLIC -DX_NOSHMEM) 85 endif() 86endmacro() 87 88macro(set_mac_ui_project_settings) 89 find_package(OpenGL REQUIRED) 90 91 find_library(FOUNDATION_LIBRARY Foundation PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH ENV DYLD_LIBRARY_PATH) 92 if (NOT FOUNDATION_LIBRARY) 93 message(FATAL_ERROR "Cannot find the Foundation library (required by the 'mac' UI mode)") 94 endif() 95 96 find_library(COCOA_LIBRARY Cocoa PATHS ENV LIBRARY_PATH ENV LD_LIBRARY_PATH ENV DYLD_LIBRARY_PATH) 97 if (NOT COCOA_LIBRARY) 98 message(FATAL_ERROR "Cannot find the Cocoa library (required by the 'mac' UI mode)") 99 endif() 100 101 target_link_libraries(UI_LIB_${PROJECT_NAME} PUBLIC ${OPENGL_LIBRARIES} ${FOUNDATION_LIBRARY} ${COCOA_LIBRARY}) 102 target_include_directories(UI_LIB_${PROJECT_NAME} PUBLIC ${OPENGL_INCLUDE_DIR}) 103 104 file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MacUI/${PROJECT_NAME}.app/Contents/Resources) 105 file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MacUI/${PROJECT_NAME}.app/Contents/MacOS) 106 107 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../../common/gui/xcode/tbbExample/PkgInfo DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MacUI/${PROJECT_NAME}.app/Contents) 108 file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../../common/gui/xcode/tbbExample/en.lproj DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MacUI/${PROJECT_NAME}.app/Contents/Resources) 109 configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../../common/gui/xcode/tbbExample/tbbExample-Info.plist ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/MacUI/${PROJECT_NAME}.app/Contents/Info.plist COPYONLY) 110 111 set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "MacUI/${PROJECT_NAME}.app/Contents/MacOS/") 112endmacro() 113 114if (NOT _find_index EQUAL -1) 115 if ("${EXAMPLES_UI_MODE}" STREQUAL "gdi") 116 set_gdi_ui_project_settings() 117 elseif ("${EXAMPLES_UI_MODE}" STREQUAL "d2d") 118 set_d2d_ui_project_settings() 119 elseif ("${EXAMPLES_UI_MODE}" STREQUAL "mac") 120 set_mac_ui_project_settings() 121 elseif ("${EXAMPLES_UI_MODE}" STREQUAL "x") 122 set_x_ui_project_settings() 123 endif() 124 target_compile_options(UI_LIB_${PROJECT_NAME} PRIVATE ${TBB_CXX_STD_FLAG}) 125endif() 126 127unset(_available_ui_modes) 128unset(_find_index) 129