2a2ca3292a
Always unset these variables after use as they could interfere with other checks made afterwards.
551 lines
12 KiB
CMake
551 lines
12 KiB
CMake
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
# Copyright 2006 Blender Foundation. All rights reserved.
|
|
|
|
set(INC
|
|
.
|
|
../clog
|
|
../../source/blender/blenlib
|
|
../../source/blender/imbuf
|
|
../../source/blender/makesdna
|
|
)
|
|
|
|
set(INC_SYS
|
|
${Epoxy_INCLUDE_DIRS}
|
|
)
|
|
|
|
set(SRC
|
|
intern/GHOST_Buttons.cpp
|
|
intern/GHOST_C-api.cpp
|
|
intern/GHOST_CallbackEventConsumer.cpp
|
|
intern/GHOST_Context.cpp
|
|
intern/GHOST_ContextNone.cpp
|
|
intern/GHOST_DisplayManager.cpp
|
|
intern/GHOST_EventManager.cpp
|
|
intern/GHOST_ISystem.cpp
|
|
intern/GHOST_ISystemPaths.cpp
|
|
intern/GHOST_ModifierKeys.cpp
|
|
intern/GHOST_Path-api.cpp
|
|
intern/GHOST_PathUtils.cpp
|
|
intern/GHOST_Rect.cpp
|
|
intern/GHOST_System.cpp
|
|
intern/GHOST_TimerManager.cpp
|
|
intern/GHOST_Window.cpp
|
|
intern/GHOST_WindowManager.cpp
|
|
|
|
GHOST_C-api.h
|
|
GHOST_IContext.h
|
|
GHOST_IEvent.h
|
|
GHOST_IEventConsumer.h
|
|
GHOST_ISystem.h
|
|
GHOST_ISystemPaths.h
|
|
GHOST_ITimerTask.h
|
|
GHOST_IWindow.h
|
|
GHOST_Path-api.h
|
|
GHOST_Rect.h
|
|
GHOST_Types.h
|
|
|
|
intern/GHOST_Buttons.h
|
|
intern/GHOST_CallbackEventConsumer.h
|
|
intern/GHOST_Context.h
|
|
intern/GHOST_ContextNone.h
|
|
intern/GHOST_Debug.h
|
|
intern/GHOST_DisplayManager.h
|
|
intern/GHOST_Event.h
|
|
intern/GHOST_EventButton.h
|
|
intern/GHOST_EventCursor.h
|
|
intern/GHOST_EventDragnDrop.h
|
|
intern/GHOST_EventKey.h
|
|
intern/GHOST_EventManager.h
|
|
intern/GHOST_EventString.h
|
|
intern/GHOST_EventTrackpad.h
|
|
intern/GHOST_EventWheel.h
|
|
intern/GHOST_ModifierKeys.h
|
|
intern/GHOST_PathUtils.h
|
|
intern/GHOST_System.h
|
|
intern/GHOST_SystemPaths.h
|
|
intern/GHOST_TimerManager.h
|
|
intern/GHOST_TimerTask.h
|
|
intern/GHOST_Util.h
|
|
intern/GHOST_Window.h
|
|
intern/GHOST_WindowManager.h
|
|
intern/GHOST_utildefines.h
|
|
intern/GHOST_utildefines_variadic.h
|
|
)
|
|
|
|
set(LIB
|
|
${Epoxy_LIBRARIES}
|
|
)
|
|
|
|
if(WITH_GHOST_DEBUG)
|
|
list(APPEND SRC
|
|
intern/GHOST_EventPrinter.cpp
|
|
|
|
intern/GHOST_EventPrinter.h
|
|
)
|
|
add_definitions(-DWITH_GHOST_DEBUG)
|
|
endif()
|
|
|
|
if(WITH_INPUT_NDOF)
|
|
add_definitions(-DWITH_INPUT_NDOF)
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_NDOFManager.cpp
|
|
|
|
intern/GHOST_EventNDOF.h
|
|
intern/GHOST_NDOFManager.h
|
|
)
|
|
|
|
list(APPEND INC_SYS
|
|
${NDOF_INCLUDE_DIRS}
|
|
)
|
|
list(APPEND LIB
|
|
${NDOF_LIBRARIES}
|
|
)
|
|
endif()
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_DisplayManagerNULL.h
|
|
intern/GHOST_SystemHeadless.h
|
|
intern/GHOST_WindowNULL.h
|
|
)
|
|
|
|
if(WITH_HEADLESS)
|
|
add_definitions(-DWITH_HEADLESS)
|
|
elseif (WITH_GHOST_SDL)
|
|
list(APPEND SRC
|
|
intern/GHOST_ContextSDL.cpp
|
|
intern/GHOST_DisplayManagerSDL.cpp
|
|
intern/GHOST_SystemSDL.cpp
|
|
intern/GHOST_WindowSDL.cpp
|
|
|
|
intern/GHOST_ContextSDL.h
|
|
intern/GHOST_DisplayManagerSDL.h
|
|
intern/GHOST_SystemSDL.h
|
|
intern/GHOST_WindowSDL.h
|
|
)
|
|
add_definitions(-DWITH_GHOST_SDL)
|
|
|
|
list(APPEND INC_SYS
|
|
${SDL_INCLUDE_DIR}
|
|
)
|
|
if(WITH_SDL_DYNLOAD)
|
|
list(APPEND LIB
|
|
extern_sdlew
|
|
)
|
|
else()
|
|
list(APPEND LIB
|
|
${SDL_LIBRARY}
|
|
)
|
|
endif()
|
|
|
|
elseif(APPLE AND NOT WITH_GHOST_X11)
|
|
if(WITH_INPUT_IME)
|
|
add_definitions(-DWITH_INPUT_IME)
|
|
endif()
|
|
list(APPEND SRC
|
|
intern/GHOST_DisplayManagerCocoa.mm
|
|
intern/GHOST_SystemCocoa.mm
|
|
intern/GHOST_WindowCocoa.mm
|
|
|
|
intern/GHOST_DisplayManagerCocoa.h
|
|
intern/GHOST_SystemCocoa.h
|
|
intern/GHOST_WindowCocoa.h
|
|
intern/GHOST_WindowViewCocoa.h
|
|
)
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_ContextCGL.mm
|
|
|
|
intern/GHOST_ContextCGL.h
|
|
)
|
|
|
|
if(WITH_INPUT_NDOF)
|
|
list(APPEND SRC
|
|
intern/GHOST_NDOFManagerCocoa.mm
|
|
|
|
intern/GHOST_NDOFManagerCocoa.h
|
|
)
|
|
endif()
|
|
|
|
elseif(WITH_GHOST_X11 OR WITH_GHOST_WAYLAND)
|
|
if(WITH_GHOST_X11)
|
|
list(APPEND INC_SYS
|
|
${X11_X11_INCLUDE_PATH}
|
|
)
|
|
|
|
list(APPEND LIB
|
|
${X11_X11_LIB}
|
|
${X11_Xrender_LIB}
|
|
)
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_DisplayManagerX11.cpp
|
|
intern/GHOST_SystemX11.cpp
|
|
intern/GHOST_TaskbarX11.cpp
|
|
intern/GHOST_WindowX11.cpp
|
|
|
|
intern/GHOST_DisplayManagerX11.h
|
|
intern/GHOST_IconX11.h
|
|
intern/GHOST_SystemX11.h
|
|
intern/GHOST_TaskbarX11.h
|
|
intern/GHOST_WindowX11.h
|
|
)
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_ContextGLX.cpp
|
|
|
|
intern/GHOST_ContextGLX.h
|
|
)
|
|
|
|
if(WITH_GHOST_XDND)
|
|
add_definitions(-DWITH_XDND)
|
|
|
|
list(APPEND LIB
|
|
extern_xdnd
|
|
)
|
|
|
|
list(APPEND INC
|
|
../../extern/xdnd
|
|
)
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_DropTargetX11.cpp
|
|
|
|
intern/GHOST_DropTargetX11.h
|
|
)
|
|
endif()
|
|
|
|
if(X11_XF86keysym_INCLUDE_PATH)
|
|
add_definitions(-DWITH_XF86KEYSYM)
|
|
list(APPEND INC_SYS
|
|
${X11_XF86keysym_INCLUDE_PATH}
|
|
)
|
|
endif()
|
|
|
|
if(WITH_X11_XF86VMODE)
|
|
add_definitions(-DWITH_X11_XF86VMODE)
|
|
list(APPEND INC_SYS
|
|
${X11_Xxf86vmode_INCLUDE_PATH}
|
|
)
|
|
list(APPEND LIB
|
|
${X11_Xxf86vmode_LIB}
|
|
)
|
|
endif()
|
|
|
|
if(WITH_X11_XFIXES)
|
|
add_definitions(-DWITH_X11_XFIXES)
|
|
list(APPEND INC_SYS
|
|
${X11_Xfixes_INCLUDE_PATH}
|
|
)
|
|
list(APPEND LIB
|
|
${X11_Xfixes_LIB}
|
|
)
|
|
endif()
|
|
|
|
if(WITH_X11_XINPUT)
|
|
add_definitions(-DWITH_X11_XINPUT)
|
|
list(APPEND INC_SYS
|
|
${X11_Xinput_INCLUDE_PATH}
|
|
)
|
|
list(APPEND LIB
|
|
${X11_Xinput_LIB}
|
|
)
|
|
endif()
|
|
|
|
add_definitions(-DWITH_GHOST_X11)
|
|
endif()
|
|
|
|
if(WITH_GHOST_WAYLAND)
|
|
list(APPEND INC_SYS
|
|
${wayland-client_INCLUDE_DIRS}
|
|
${wayland-egl_INCLUDE_DIRS}
|
|
${xkbcommon_INCLUDE_DIRS}
|
|
${wayland-cursor_INCLUDE_DIRS}
|
|
)
|
|
|
|
if(WITH_GHOST_WAYLAND_DYNLOAD)
|
|
list(APPEND INC_SYS
|
|
../../intern/wayland_dynload/extern
|
|
)
|
|
list(APPEND LIB
|
|
bf_intern_wayland_dynload
|
|
)
|
|
add_definitions(-DWITH_GHOST_WAYLAND_DYNLOAD)
|
|
endif()
|
|
|
|
if(WITH_GHOST_WAYLAND_DBUS)
|
|
list(APPEND INC_SYS
|
|
${dbus_INCLUDE_DIRS}
|
|
)
|
|
endif()
|
|
|
|
if(WITH_GHOST_WAYLAND_LIBDECOR)
|
|
list(APPEND INC_SYS
|
|
${libdecor_INCLUDE_DIRS}
|
|
)
|
|
endif()
|
|
|
|
include(CheckSymbolExists)
|
|
set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
|
|
check_symbol_exists(memfd_create "sys/mman.h" HAVE_MEMFD_CREATE)
|
|
unset(CMAKE_REQUIRED_DEFINITIONS)
|
|
if(HAVE_MEMFD_CREATE)
|
|
add_definitions(-DHAVE_MEMFD_CREATE)
|
|
endif()
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_SystemWayland.cpp
|
|
intern/GHOST_WindowWayland.cpp
|
|
|
|
intern/GHOST_SystemWayland.h
|
|
intern/GHOST_WaylandCursorSettings.h
|
|
intern/GHOST_WindowWayland.h
|
|
)
|
|
|
|
pkg_get_variable(WAYLAND_SCANNER wayland-scanner wayland_scanner)
|
|
|
|
pkg_check_modules(wayland-protocols wayland-protocols>=1.15)
|
|
if(${wayland-protocols_FOUND})
|
|
pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
|
|
else()
|
|
find_path(WAYLAND_PROTOCOLS_DIR
|
|
NAMES unstable/xdg-decoration/xdg-decoration-unstable-v1.xml
|
|
PATH_SUFFIXES share/wayland-protocols
|
|
)
|
|
endif()
|
|
|
|
if(NOT EXISTS ${WAYLAND_PROTOCOLS_DIR})
|
|
message(FATAL_ERROR "path to wayland-protocols not found")
|
|
endif()
|
|
|
|
set(INC_DST ${CMAKE_CURRENT_BINARY_DIR}/libwayland)
|
|
|
|
# Generate protocols bindings.
|
|
macro(generate_protocol_bindings PROT_DEF)
|
|
# File name without directory or extension (use for header name).
|
|
get_filename_component(_name ${PROT_DEF} NAME_WLE)
|
|
add_custom_command(
|
|
OUTPUT ${INC_DST}/${_name}-client-protocol.h
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${INC_DST}
|
|
COMMAND ${WAYLAND_SCANNER} client-header ${PROT_DEF} ${INC_DST}/${_name}-client-protocol.h
|
|
)
|
|
add_custom_command(
|
|
OUTPUT ${INC_DST}/${_name}-client-protocol.c
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${INC_DST}
|
|
COMMAND ${WAYLAND_SCANNER} private-code ${PROT_DEF} ${INC_DST}/${_name}-client-protocol.c
|
|
DEPENDS ${INC_DST}/${_name}-client-protocol.h
|
|
)
|
|
list(APPEND SRC
|
|
${INC_DST}/${_name}-client-protocol.c
|
|
${INC_DST}/${_name}-client-protocol.h
|
|
)
|
|
unset(_name)
|
|
endmacro()
|
|
|
|
|
|
list(APPEND INC_SYS
|
|
${INC_DST}
|
|
)
|
|
|
|
if(NOT WITH_GHOST_WAYLAND_LIBDECOR)
|
|
# `xdg-shell`.
|
|
generate_protocol_bindings(
|
|
"${WAYLAND_PROTOCOLS_DIR}/stable/xdg-shell/xdg-shell.xml"
|
|
)
|
|
# `xdg-decoration`.
|
|
generate_protocol_bindings(
|
|
"${WAYLAND_PROTOCOLS_DIR}/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml"
|
|
)
|
|
endif()
|
|
|
|
# `xdg-output`.
|
|
generate_protocol_bindings(
|
|
"${WAYLAND_PROTOCOLS_DIR}/unstable/xdg-output/xdg-output-unstable-v1.xml"
|
|
)
|
|
# Pointer-constraints.
|
|
generate_protocol_bindings(
|
|
"${WAYLAND_PROTOCOLS_DIR}/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml"
|
|
)
|
|
# Relative-pointer.
|
|
generate_protocol_bindings(
|
|
"${WAYLAND_PROTOCOLS_DIR}/unstable/relative-pointer/relative-pointer-unstable-v1.xml"
|
|
)
|
|
# Tablet.
|
|
generate_protocol_bindings(
|
|
"${WAYLAND_PROTOCOLS_DIR}/unstable/tablet/tablet-unstable-v2.xml"
|
|
)
|
|
|
|
add_definitions(-DWITH_GHOST_WAYLAND)
|
|
|
|
unset(INC_DST)
|
|
endif()
|
|
|
|
if(WITH_INPUT_NDOF)
|
|
list(APPEND SRC
|
|
intern/GHOST_NDOFManagerUnix.cpp
|
|
|
|
intern/GHOST_NDOFManagerUnix.h
|
|
)
|
|
endif()
|
|
|
|
if(NOT WITH_INSTALL_PORTABLE)
|
|
add_definitions(-DPREFIX="${CMAKE_INSTALL_PREFIX}")
|
|
endif()
|
|
|
|
|
|
elseif(WIN32)
|
|
# # Warnings as errors, this is too strict!
|
|
# if(MSVC)
|
|
# string(APPEND CMAKE_CXX_FLAGS " /WX")
|
|
# endif()
|
|
|
|
list(APPEND INC_SYS
|
|
${WINTAB_INC}
|
|
)
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_ContextD3D.cpp
|
|
intern/GHOST_DisplayManagerWin32.cpp
|
|
intern/GHOST_DropTargetWin32.cpp
|
|
intern/GHOST_SystemWin32.cpp
|
|
intern/GHOST_TrackpadWin32.cpp
|
|
intern/GHOST_WindowWin32.cpp
|
|
intern/GHOST_Wintab.cpp
|
|
|
|
intern/GHOST_ContextD3D.h
|
|
intern/GHOST_DisplayManagerWin32.h
|
|
intern/GHOST_DropTargetWin32.h
|
|
intern/GHOST_SystemWin32.h
|
|
intern/GHOST_TaskbarWin32.h
|
|
intern/GHOST_TrackpadWin32.h
|
|
intern/GHOST_WindowWin32.h
|
|
intern/GHOST_Wintab.h
|
|
)
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_ContextWGL.cpp
|
|
|
|
intern/GHOST_ContextWGL.h
|
|
)
|
|
|
|
if(WITH_INPUT_IME)
|
|
add_definitions(-DWITH_INPUT_IME)
|
|
|
|
list(APPEND SRC
|
|
intern/GHOST_ImeWin32.cpp
|
|
|
|
intern/GHOST_ImeWin32.h
|
|
)
|
|
endif()
|
|
|
|
if(WITH_INPUT_NDOF)
|
|
list(APPEND SRC
|
|
intern/GHOST_NDOFManagerWin32.cpp
|
|
|
|
intern/GHOST_NDOFManagerWin32.h
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
list(APPEND SRC
|
|
intern/GHOST_ContextEGL.cpp
|
|
|
|
intern/GHOST_ContextEGL.h
|
|
)
|
|
endif()
|
|
|
|
if(APPLE)
|
|
list(APPEND SRC
|
|
intern/GHOST_SystemPathsCocoa.h
|
|
intern/GHOST_SystemPathsCocoa.mm
|
|
)
|
|
|
|
elseif(UNIX)
|
|
list(APPEND SRC
|
|
intern/GHOST_SystemPathsUnix.cpp
|
|
intern/GHOST_SystemPathsUnix.h
|
|
)
|
|
|
|
if(NOT WITH_INSTALL_PORTABLE)
|
|
add_definitions(-DPREFIX="${CMAKE_INSTALL_PREFIX}")
|
|
endif()
|
|
|
|
elseif(WIN32)
|
|
list(APPEND SRC
|
|
intern/GHOST_SystemPathsWin32.cpp
|
|
intern/GHOST_SystemPathsWin32.h
|
|
)
|
|
|
|
list(APPEND INC
|
|
../utfconv
|
|
)
|
|
|
|
endif()
|
|
|
|
if(WITH_XR_OPENXR)
|
|
list(APPEND SRC
|
|
intern/GHOST_Xr.cpp
|
|
intern/GHOST_XrAction.cpp
|
|
intern/GHOST_XrContext.cpp
|
|
intern/GHOST_XrControllerModel.cpp
|
|
intern/GHOST_XrEvent.cpp
|
|
intern/GHOST_XrGraphicsBinding.cpp
|
|
intern/GHOST_XrSession.cpp
|
|
intern/GHOST_XrSwapchain.cpp
|
|
|
|
GHOST_IXrContext.h
|
|
intern/GHOST_IXrGraphicsBinding.h
|
|
intern/GHOST_XrAction.h
|
|
intern/GHOST_XrContext.h
|
|
intern/GHOST_XrControllerModel.h
|
|
intern/GHOST_XrException.h
|
|
intern/GHOST_XrSession.h
|
|
intern/GHOST_XrSwapchain.h
|
|
intern/GHOST_Xr_intern.h
|
|
intern/GHOST_Xr_openxr_includes.h
|
|
|
|
# Header only library.
|
|
../../extern/tinygltf/tiny_gltf.h
|
|
)
|
|
list(APPEND INC
|
|
../../extern/json/include
|
|
../../extern/tinygltf
|
|
)
|
|
list(APPEND INC_SYS
|
|
${EIGEN3_INCLUDE_DIRS}
|
|
${XR_OPENXR_SDK_INCLUDE_DIR}
|
|
)
|
|
list(APPEND LIB
|
|
${XR_OPENXR_SDK_LIBRARIES}
|
|
)
|
|
|
|
set(XR_PLATFORM_DEFINES -DXR_USE_GRAPHICS_API_OPENGL)
|
|
|
|
# Add compiler defines as required by the OpenXR specification.
|
|
if(WIN32)
|
|
list(APPEND XR_PLATFORM_DEFINES
|
|
-DXR_USE_PLATFORM_WIN32
|
|
-DXR_USE_GRAPHICS_API_D3D11
|
|
)
|
|
list(APPEND LIB
|
|
shlwapi
|
|
)
|
|
elseif(UNIX AND NOT APPLE)
|
|
list(APPEND XR_PLATFORM_DEFINES -DXR_OS_LINUX)
|
|
if(WITH_GHOST_WAYLAND)
|
|
list(APPEND XR_PLATFORM_DEFINES -DXR_USE_PLATFORM_WAYLAND)
|
|
endif()
|
|
if(WITH_GHOST_X11)
|
|
list(APPEND XR_PLATFORM_DEFINES -DXR_USE_PLATFORM_EGL)
|
|
list(APPEND XR_PLATFORM_DEFINES -DXR_USE_PLATFORM_XLIB)
|
|
endif()
|
|
endif()
|
|
|
|
add_definitions(-DWITH_XR_OPENXR ${XR_PLATFORM_DEFINES})
|
|
|
|
unset(XR_PLATFORM_DEFINES)
|
|
endif()
|
|
|
|
blender_add_lib(bf_intern_ghost "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
|