weston/libweston/meson.build
Pekka Paalanen 4e952328ca build: turn vertex-clipping.c into a dependency
Making this into a dependency object not only carries the .c files with it, but
it also brings the include directories as well, which means the users can
simply use the object without guessing the paths.

This should help with moving GL-renderer into a new subdirectory.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2019-04-18 12:50:55 +03:00

496 lines
13 KiB
Meson

deps_libweston = [
dep_wayland_server,
dep_pixman,
dep_libm,
dep_libdl,
dep_libdrm_headers,
dep_xkbcommon,
]
srcs_libweston = [
git_version_h,
'animation.c',
'bindings.c',
'clipboard.c',
'compositor.c',
'data-device.c',
'input.c',
'linux-dmabuf.c',
'linux-explicit-synchronization.c',
'linux-sync-file.c',
'log.c',
'noop-renderer.c',
'pixel-formats.c',
'pixman-renderer.c',
'plugin-registry.c',
'screenshooter.c',
'timeline.c',
'touch-calibration.c',
'weston-debug.c',
'zoom.c',
'../shared/matrix.c',
linux_dmabuf_unstable_v1_protocol_c,
linux_dmabuf_unstable_v1_server_protocol_h,
linux_explicit_synchronization_unstable_v1_protocol_c,
linux_explicit_synchronization_unstable_v1_server_protocol_h,
input_method_unstable_v1_protocol_c,
input_method_unstable_v1_server_protocol_h,
input_timestamps_unstable_v1_protocol_c,
input_timestamps_unstable_v1_server_protocol_h,
presentation_time_protocol_c,
presentation_time_server_protocol_h,
pointer_constraints_unstable_v1_protocol_c,
pointer_constraints_unstable_v1_server_protocol_h,
relative_pointer_unstable_v1_protocol_c,
relative_pointer_unstable_v1_server_protocol_h,
weston_screenshooter_protocol_c,
weston_screenshooter_server_protocol_h,
text_cursor_position_protocol_c,
text_cursor_position_server_protocol_h,
text_input_unstable_v1_protocol_c,
text_input_unstable_v1_server_protocol_h,
weston_touch_calibration_protocol_c,
weston_touch_calibration_server_protocol_h,
viewporter_protocol_c,
viewporter_server_protocol_h,
weston_debug_protocol_c,
weston_debug_server_protocol_h,
]
if get_option('renderer-gl')
dep_egl = dependency('egl', required: false)
if not dep_egl.found()
error('libweston + gl-renderer requires egl which was not found. Or, you can use \'-Drenderer-gl=false\'.')
endif
deps_libweston += dep_egl
endif
lib_weston = shared_library(
'weston-@0@'.format(libweston_major),
srcs_libweston,
include_directories: [ include_directories('..', '../shared'), public_inc ],
link_args: [ '-Wl,-export-dynamic' ],
install: true,
version: '0.0.@0@'.format(libweston_revision),
link_whole: lib_libshared,
dependencies: deps_libweston
)
dep_libweston = declare_dependency(
link_with: lib_weston,
include_directories: [ include_directories('.'), public_inc ],
dependencies: deps_libweston
)
# XXX: We should be able to use dep_libweston.partial_dependency() instead
# of this, but a Meson bug makes it not work. It will be fixed with
# https://github.com/mesonbuild/meson/pull/5167
# in hopefully Meson 0.51.
dep_libweston_h = declare_dependency(
include_directories: [ include_directories('.'), public_inc ],
dependencies: [
dep_pixman.partial_dependency(compile_args: true),
dep_xkbcommon.partial_dependency(compile_args: true),
dep_wayland_server.partial_dependency(compile_args: true)
]
)
pkgconfig.generate(
lib_weston,
filebase: 'libweston-@0@'.format(libweston_major),
name: 'libweston API',
version: version_weston,
description: 'Header files for libweston compositors development',
requires_private: [ dep_wayland_server, dep_pixman, dep_xkbcommon ],
subdirs: dir_include_libweston
)
pkgconfig.generate(
filebase: 'libweston-@0@-protocols'.format(libweston_major),
name: 'libWeston Protocols',
version: version_weston,
description: 'libWeston protocol files',
variables: [
'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
'pkgdatadir=' + join_paths('${pc_sysrootdir}${datarootdir}', dir_protocol_libweston)
],
install_dir: dir_data_pc
)
srcs_session_helper = [
'launcher-direct.c',
'launcher-util.c',
'launcher-weston-launch.c',
]
deps_session_helper = [ dep_libweston_h ]
if get_option('backend-drm')
deps_session_helper += dep_libdrm
endif
systemd_dep = dependency('', required: false)
if get_option('launcher-logind')
systemd_dep = dependency('libsystemd', version: '>= 209', required: false)
if systemd_dep.found()
config_h.set('HAVE_SYSTEMD_LOGIN_209', '1')
else
systemd_dep = dependency('libsystemd-login', version: '>= 198', required: false)
if not systemd_dep.found()
error('logind support requires libsystemd or libsystemd-login but neither was found. Or, you can use \'-Dlauncher-logind=false\'')
endif
endif
dbus_dep = dependency('dbus-1', version: '>= 1.6', required: false)
if not dbus_dep.found()
error('logind support requires dbus-1 >= 1.6 which was not found. Or, you can use \'-Dlauncher-logind=false\'')
endif
config_h.set('HAVE_DBUS', '1')
config_h.set('HAVE_SYSTEMD_LOGIN', '1')
srcs_session_helper += [
'dbus.c',
'launcher-logind.c',
]
deps_session_helper += [
dbus_dep,
systemd_dep,
]
endif
lib_session_helper = static_library(
'session-helper',
srcs_session_helper,
include_directories: include_directories('..', '../shared'),
dependencies: deps_session_helper,
install: false
)
dep_session_helper = declare_dependency(link_with: lib_session_helper)
if get_option('backend-drm')
config_h.set('BUILD_DRM_COMPOSITOR', '1')
srcs_drm = [
'compositor-drm.c',
'libbacklight.c',
'libinput-device.c',
'libinput-seat.c',
linux_dmabuf_unstable_v1_protocol_c,
linux_dmabuf_unstable_v1_server_protocol_h,
presentation_time_server_protocol_h,
]
deps_drm = [
dep_libweston,
dep_session_helper,
dep_libdrm,
dep_libinput,
dependency('libudev', version: '>= 136'),
]
# XXX: Actually let DRM-backend build without GBM, it really should
if true # get_option('renderer-gl')
dep_gbm = dependency('gbm', required: false)
if not dep_gbm.found()
error('drm-backend requires gbm which was not found. Or, you can use \'-Dbackend-drm=false\'.')
endif
if dep_gbm.version().version_compare('>= 17.1')
config_h.set('HAVE_GBM_MODIFIERS', '1')
endif
if dep_gbm.version().version_compare('>= 17.2')
config_h.set('HAVE_GBM_FD_IMPORT', '1')
endif
deps_drm += dep_gbm
endif
if get_option('backend-drm-screencast-vaapi')
foreach name : [ 'libva', 'libva-drm' ]
d = dependency(name, version: '>= 0.34.0', required: false)
if not d.found()
error('VA-API recorder requires @0@ >= 0.34.0 which was not found. Or, you can use \'-Dbackend-drm-screencast-vaapi=false\'.'.format(name))
endif
deps_drm += d
endforeach
srcs_drm += 'vaapi-recorder.c'
deps_drm += dependency('threads')
config_h.set('BUILD_VAAPI_RECORDER', '1')
endif
if dep_libdrm.version().version_compare('>= 2.4.71')
config_h.set('HAVE_DRM_ADDFB2_MODIFIERS', '1')
endif
if dep_libdrm.version().version_compare('>= 2.4.78')
config_h.set('HAVE_DRM_ATOMIC', '1')
endif
if dep_libdrm.version().version_compare('>= 2.4.83')
config_h.set('HAVE_DRM_FORMATS_BLOB', '1')
endif
plugin_drm = shared_library(
'drm-backend',
srcs_drm,
include_directories: include_directories('..', '../shared'),
dependencies: deps_drm,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'drm-backend.so=@0@;'.format(plugin_drm.full_path())
install_headers(backend_drm_h, subdir: dir_include_libweston_install)
endif
if get_option('backend-headless')
config_h.set('BUILD_HEADLESS_COMPOSITOR', '1')
srcs_headless = [
'compositor-headless.c',
presentation_time_server_protocol_h,
]
plugin_headless = shared_library(
'headless-backend',
srcs_headless,
include_directories: include_directories('..', '../shared'),
dependencies: dep_libweston,
name_prefix: '',
install: true,
install_dir: dir_module_libweston,
)
env_modmap += 'headless-backend.so=@0@;'.format(plugin_headless.full_path())
install_headers(backend_headless_h, subdir: dir_include_libweston_install)
endif
if get_option('backend-rdp')
config_h.set('BUILD_RDP_COMPOSITOR', '1')
dep_frdp = dependency('freerdp2', version: '>= 2.0.0', required: false)
if not dep_frdp.found()
error('RDP-backend requires freerdp2 which was not found. Or, you can use \'-Dbackend-rdp=false\'.')
endif
if cc.has_header('freerdp/version.h', dependencies: dep_frdp)
config_h.set('HAVE_FREERDP_VERSION_H', '1')
endif
if cc.has_member(
'SURFACE_BITS_COMMAND', 'bmp',
dependencies : dep_frdp,
prefix : '#include <freerdp/update.h>'
)
config_h.set('HAVE_SURFACE_BITS_BMP', '1')
endif
deps_rdp = [
dep_libweston,
dep_frdp,
]
plugin_rdp = shared_library(
'rdp-backend',
'compositor-rdp.c',
include_directories: include_directories('..', '../shared'),
dependencies: deps_rdp,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'rdp-backend.so=@0@;'.format(plugin_rdp.full_path())
install_headers(backend_rdp_h, subdir: dir_include_libweston_install)
endif
if get_option('backend-wayland')
config_h.set('BUILD_WAYLAND_COMPOSITOR', '1')
srcs_wlwl = [
'compositor-wayland.c',
fullscreen_shell_unstable_v1_client_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
presentation_time_protocol_c,
presentation_time_server_protocol_h,
xdg_shell_server_protocol_h,
xdg_shell_protocol_c,
]
deps_wlwl = [
dependency('wayland-client'),
dependency('wayland-cursor'),
dep_pixman,
dep_libweston,
dep_lib_cairo_shared,
]
if get_option('renderer-gl')
d = dependency('wayland-egl', required: false)
if not d.found()
error('wayland-backend + gl-renderer requires wayland-egl which was not found. Or, you can use \'-Dbackend-wayland=false\' or \'-Drenderer-gl=false\'.')
endif
deps_wlwl += d
endif
plugin_wlwl = shared_library(
'wayland-backend',
srcs_wlwl,
include_directories: include_directories('..', '../shared'),
dependencies: deps_wlwl,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'wayland-backend.so=@0@;'.format(plugin_wlwl.full_path())
install_headers(backend_wayland_h, subdir: dir_include_libweston_install)
endif
if get_option('backend-x11')
config_h.set('BUILD_X11_COMPOSITOR', '1')
srcs_x11 = [
'compositor-x11.c',
presentation_time_server_protocol_h,
]
dep_x11_xcb = dependency('xcb', version: '>= 1.8', required: false)
if not dep_x11_xcb.found()
error('x11-backend requires xcb >= 1.8 which was not found. Or, you can use \'-Dbackend-x11=false\'.')
endif
deps_x11 = [
dep_libweston,
dep_x11_xcb,
dep_lib_cairo_shared,
dep_pixman,
]
foreach name : [ 'xcb-shm', 'x11', 'x11-xcb' ]
d = dependency(name, required: false)
if not d.found()
error('x11-backend requires @0@ which was not found. Or, you can use \'-Dbackend-x11=false\'.'.format(name))
endif
deps_x11 += d
endforeach
dep_xcb_xkb = dependency('xcb-xkb', version: '>= 1.9', required: false)
if dep_xcb_xkb.found()
deps_x11 += dep_xcb_xkb
config_h.set('HAVE_XCB_XKB', '1')
endif
if get_option('renderer-gl')
if not dep_egl.found()
error('x11-backend + gl-renderer requires egl which was not found. Or, you can use \'-Dbackend-x11=false\' or \'-Drenderer-gl=false\'.')
endif
deps_x11 += dep_egl
endif
plugin_x11 = shared_library(
'x11-backend',
srcs_x11,
include_directories: include_directories('..', '../shared'),
dependencies: deps_x11,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'x11-backend.so=@0@;'.format(plugin_x11.full_path())
install_headers(backend_x11_h, subdir: dir_include_libweston_install)
endif
if get_option('backend-fbdev')
config_h.set('BUILD_FBDEV_COMPOSITOR', '1')
srcs_fbdev = [
'compositor-fbdev.c',
'libinput-device.c',
'libinput-seat.c',
presentation_time_server_protocol_h,
]
deps_fbdev = [
dep_libweston,
dep_session_helper,
dep_libinput,
dependency('libudev', version: '>= 136'),
]
plugin_fbdev = shared_library(
'fbdev-backend',
srcs_fbdev,
include_directories: include_directories('..', '../shared'),
dependencies: deps_fbdev,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'fbdev-backend.so=@0@;'.format(plugin_fbdev.full_path())
install_headers(backend_fbdev_h, subdir: dir_include_libweston_install)
endif
dep_vertex_clipping = declare_dependency(
sources: 'vertex-clipping.c',
include_directories: include_directories('.')
)
if get_option('renderer-gl')
config_h.set('ENABLE_EGL', '1')
srcs_renderer_gl = [
'gl-renderer.c',
'linux-sync-file.c',
'../shared/matrix.c',
linux_dmabuf_unstable_v1_protocol_c,
linux_dmabuf_unstable_v1_server_protocol_h,
]
deps_renderer_gl = [
dep_pixman,
dep_libweston,
dep_libdrm_headers,
dep_vertex_clipping
]
foreach name : [ 'egl', 'glesv2' ]
d = dependency(name, required: false)
if not d.found()
error('gl-renderer requires @0@ which was not found. Or, you can use \'-Drenderer-gl=false\'.'.format(name))
endif
deps_renderer_gl += d
endforeach
plugin_gl = shared_library(
'gl-renderer',
srcs_renderer_gl,
include_directories: include_directories('..', '../shared'),
dependencies: deps_renderer_gl,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'gl-renderer.so=@0@;'.format(plugin_gl.full_path())
endif
if get_option('weston-launch')
dep_pam = cc.find_library('pam')
if not cc.has_function('pam_open_session', dependencies: dep_pam)
error('pam_open_session not found for weston-launch')
endif
executable(
'weston-launch',
'weston-launch.c',
dependencies: [dep_pam, systemd_dep, dep_libdrm],
include_directories: include_directories('..'),
install: true
)
meson.add_install_script('echo', 'REMINDER: You are installing weston-launch, please make it setuid-root.')
endif