xref: /oneTBB/examples/common/gui/CMakeLists.txt (revision 4bb8938d)
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