blob: 99beb23b4e90a27d108defd6f7fe5aaf1ae0de38 [file] [log] [blame]
# Copyright 2023 Android Open Source Project
# SPDX-License-Identifier: MIT
project('gfxstream_backend', 'cpp', 'c',
version : '0.1.2',
license : 'MIT OR Apache-2.0',
default_options : ['cpp_std=gnu++17'])
cc = meson.get_compiler('cpp')
prog_python = import('python').find_installation('python3')
#===============#
# Configuration #
#===============#
c_args = []
cpp_args = []
default_cpp_args = [
'-D_FILE_OFFSET_BITS=64',
'-Wno-unused-parameter',
'-Wno-unused-function',
'-Wno-unused-variable',
'-Wno-ignored-qualifiers',
'-Wno-mismatched-tags',
'-Wno-missing-field-initializers',
'-Wno-implicit-fallthrough',
]
if host_machine.system() == 'qnx'
default_cpp_args += '-D_QNX_SOURCE'
qnx_target = get_option('qnx_target')
if qnx_target == ''
error('option qnx_target is not set')
endif
endif
#===============#
# Dependencies #
#===============#
if host_machine.system() == 'qnx'
## have not yet got pkgconfig to work with cross-compile,
## finding libraries manually in the meantime.
## ERROR: Dependency "screen" not found, tried pkgconfig
# qnx_screen_dep = dependency('screen')
rel_path_prefix = meson.get_external_property('qnx_path_prefix')
abs_path_prefix = meson.current_source_dir() + '/' + rel_path_prefix
aemu_libs_path = abs_path_prefix + '/aemu/install/lib'
incl_aemu_headers = include_directories([
rel_path_prefix + '/aemu/install/include',
rel_path_prefix + '/aemu/install/include/aemu/host-common',
rel_path_prefix + '/aemu/install/include/aemu/snapshot',
])
aemu_base_lib = cc.find_library('aemu-base', dirs: aemu_libs_path)
aemu_base_dep = declare_dependency(include_directories : incl_aemu_headers, dependencies : [aemu_base_lib])
aemu_common_lib = cc.find_library('aemu-host-common', dirs: aemu_libs_path)
aemu_common_dep = declare_dependency(include_directories : incl_aemu_headers, dependencies : [aemu_common_lib])
aemu_logging_lib = cc.find_library('aemu-logging', dirs: aemu_libs_path)
aemu_logging_dep = declare_dependency(include_directories : incl_aemu_headers, dependencies : [aemu_logging_lib])
aemu_snapshot_lib = cc.find_library('aemu-snapshot', dirs: aemu_libs_path)
aemu_snapshot_dep = declare_dependency(include_directories : incl_aemu_headers, dependencies : [aemu_snapshot_lib])
inc_qnx_headers = include_directories(join_paths(qnx_target, 'usr/include'))
qnx_screen_lib = cc.find_library('screen', required : true)
qnx_screen_dep = declare_dependency(include_directories: inc_qnx_headers, dependencies: [qnx_screen_lib])
qnx_egl_lib = cc.find_library('EGL', required : true)
qnx_egl_dep = declare_dependency(include_directories: inc_qnx_headers, dependencies: [qnx_egl_lib])
qnx_gles2_lib = cc.find_library('GLESv2', required : true)
qnx_gles2_dep = declare_dependency(include_directories: inc_qnx_headers, dependencies: [qnx_gles2_lib])
else
aemu_base_dep = dependency('aemu_base')
aemu_common_dep = dependency('aemu_host_common')
aemu_logging_dep = dependency('aemu_logging')
aemu_snapshot_dep = dependency('aemu_snapshot')
dl_dep = dependency('dl')
thread_dep = dependency('threads')
endif
#========================#
# Logging + error report #
#========================#
log_level = get_option('log-level')
if log_level == 'error'
default_cpp_args += '-DSTREAM_RENDERER_LOG_LEVEL=1'
elif log_level == 'warn'
default_cpp_args += '-DSTREAM_RENDERER_LOG_LEVEL=2'
elif log_level == 'info'
default_cpp_args += '-DSTREAM_RENDERER_LOG_LEVEL=3'
endif
#===============#
# Decoders #
#===============#
decoders = get_option('decoders')
use_auto = decoders.contains('auto')
use_gles = decoders.contains('gles')
use_vulkan = decoders.contains('vulkan')
use_magma = decoders.contains('magma')
use_composer = decoders.contains('composer')
if use_auto and (use_gles or use_vulkan or use_magma)
error('Can not specify auto and custom options are same time')
endif
if use_auto
use_gles = true
use_vulkan = true
use_composer = true
use_magma = host_machine.system() == 'linux'
endif
if use_magma
default_cpp_args += '-DUSE_MAGMA=1'
drm_dep = dependency('libdrm')
else
default_cpp_args += '-DUSE_MAGMA=0'
endif
#===============#
# Includes #
#===============#
gfxstream_headers = files(
'host/include/gfxstream/virtio-gpu-gfxstream-renderer.h',
'host/include/gfxstream/virtio-gpu-gfxstream-renderer-unstable.h')
inc_root = include_directories('.')
inc_include = include_directories('include')
inc_utils = include_directories('utils/include')
if use_vulkan
inc_vulkan_headers = include_directories('common/vulkan/include')
inc_renderdoc_external = include_directories('third-party/renderdoc/include')
endif
if use_magma
inc_magma_external = include_directories('third-party/fuchsia/magma/include')
inc_magma_external_lib = include_directories('third-party/fuchsia/magma/include/lib')
endif
inc_glm = include_directories('third-party/glm/include')
#================#
# Subdirectories #
#================#
subdir('gl-host-common')
subdir('host')
#================#
# Summary #
#================#
summary({'prefix': get_option('prefix'),
'libdir': get_option('libdir'),
}, section: 'Directories')
summary({'c_args': (' ').join(get_option('c_args')),
'cpp_args': (' ').join(get_option('cpp_args')),
'buildtype': get_option('buildtype'),
'log-level': log_level,
'gles': use_gles,
'vulkan': use_vulkan,
'magma': use_magma,
'composer': use_composer,
}, section: 'Configuration')