2022-03-04 15:34:32 +00:00
|
|
|
project('vkd3d-proton', ['c'], version : '2.6', meson_version : '>= 0.49', default_options : [
|
2020-06-26 20:32:39 +01:00
|
|
|
'warning_level=2',
|
|
|
|
])
|
2020-06-23 01:47:41 +01:00
|
|
|
|
|
|
|
cpu_family = target_machine.cpu_family()
|
|
|
|
|
2020-07-02 16:41:57 +01:00
|
|
|
vkd3d_compiler = meson.get_compiler('c')
|
2021-05-06 21:21:20 +01:00
|
|
|
vkd3d_is_msvc = vkd3d_compiler.get_id() == 'msvc' or vkd3d_compiler.get_id() == 'clang-cl'
|
2021-03-03 17:50:40 +00:00
|
|
|
vkd3d_is_clang = vkd3d_compiler.get_id() == 'clang'
|
2021-02-06 09:51:58 +00:00
|
|
|
vkd3d_c_std = 'c11'
|
2020-07-02 16:41:57 +01:00
|
|
|
vkd3d_platform = target_machine.system()
|
|
|
|
|
2021-03-01 14:44:50 +00:00
|
|
|
vkd3d_buildtype = get_option('buildtype')
|
|
|
|
vkd3d_debug = vkd3d_buildtype == 'debug' or vkd3d_buildtype == 'debugoptimized'
|
|
|
|
|
2020-07-02 16:41:57 +01:00
|
|
|
enable_tests = get_option('enable_tests')
|
|
|
|
enable_extras = get_option('enable_extras')
|
2020-11-04 19:34:51 +00:00
|
|
|
enable_d3d12 = get_option('enable_d3d12')
|
2020-07-17 11:53:36 +01:00
|
|
|
enable_profiling = get_option('enable_profiling')
|
2020-09-09 11:18:46 +01:00
|
|
|
enable_renderdoc = get_option('enable_renderdoc')
|
2020-12-05 11:51:19 +00:00
|
|
|
enable_descriptor_qa = get_option('enable_descriptor_qa')
|
2021-03-01 14:44:50 +00:00
|
|
|
enable_trace = get_option('enable_trace')
|
2020-07-02 16:43:25 +01:00
|
|
|
|
2020-11-04 19:34:51 +00:00
|
|
|
if enable_d3d12 == 'auto'
|
2021-03-01 14:37:50 +00:00
|
|
|
enable_d3d12 = vkd3d_platform == 'windows'
|
2020-11-04 19:34:51 +00:00
|
|
|
else
|
2021-03-01 14:37:50 +00:00
|
|
|
enable_d3d12 = enable_d3d12 == 'true'
|
2020-11-04 19:34:51 +00:00
|
|
|
endif
|
|
|
|
|
2021-03-01 14:44:50 +00:00
|
|
|
if enable_trace == 'auto'
|
|
|
|
enable_trace = vkd3d_debug
|
|
|
|
else
|
|
|
|
enable_trace = enable_trace == 'true'
|
|
|
|
endif
|
|
|
|
|
2020-11-04 19:34:51 +00:00
|
|
|
if vkd3d_platform != 'windows' and enable_d3d12
|
2020-07-02 16:43:25 +01:00
|
|
|
error('Standalone D3D12 is only supported on Windows.')
|
|
|
|
endif
|
2020-07-02 16:41:57 +01:00
|
|
|
|
2020-06-23 01:47:41 +01:00
|
|
|
add_project_arguments('-D_GNU_SOURCE', language : 'c')
|
|
|
|
add_project_arguments('-DPACKAGE_VERSION="' + meson.project_version() + '"', language : 'c')
|
|
|
|
|
2020-09-08 07:16:00 +01:00
|
|
|
if vkd3d_platform == 'windows'
|
|
|
|
add_project_arguments('-D_WIN32_WINNT=0x600', language : 'c')
|
|
|
|
endif
|
|
|
|
|
2020-11-04 19:34:51 +00:00
|
|
|
if enable_d3d12
|
2020-07-02 16:43:25 +01:00
|
|
|
add_project_arguments('-DVKD3D_BUILD_STANDALONE_D3D12', language : 'c')
|
|
|
|
endif
|
|
|
|
|
2020-07-17 11:53:36 +01:00
|
|
|
if enable_profiling
|
|
|
|
add_project_arguments('-DVKD3D_ENABLE_PROFILING', language : 'c')
|
|
|
|
endif
|
|
|
|
|
2020-09-09 11:18:46 +01:00
|
|
|
if enable_renderdoc
|
|
|
|
add_project_arguments('-DVKD3D_ENABLE_RENDERDOC', language : 'c')
|
|
|
|
endif
|
|
|
|
|
2020-12-05 11:51:19 +00:00
|
|
|
if enable_descriptor_qa
|
|
|
|
add_project_arguments('-DVKD3D_ENABLE_DESCRIPTOR_QA', language : 'c')
|
|
|
|
endif
|
|
|
|
|
2021-03-01 14:44:50 +00:00
|
|
|
if not enable_trace
|
|
|
|
add_project_arguments('-DVKD3D_NO_TRACE_MESSAGES', language : 'c')
|
|
|
|
endif
|
|
|
|
|
2022-02-07 15:12:49 +00:00
|
|
|
enable_breadcrumbs = enable_trace
|
|
|
|
if enable_breadcrumbs
|
|
|
|
add_project_arguments('-DVKD3D_ENABLE_BREADCRUMBS', language : 'c')
|
|
|
|
endif
|
|
|
|
|
2020-06-23 01:47:41 +01:00
|
|
|
vkd3d_external_includes = [ './subprojects/Vulkan-Headers/include', './subprojects/SPIRV-Headers/include' ]
|
|
|
|
vkd3d_public_includes = [ './include' ] + vkd3d_external_includes
|
|
|
|
vkd3d_private_includes = [ './include/private' ] + vkd3d_public_includes
|
|
|
|
|
|
|
|
vkd3d_external_includes = include_directories(vkd3d_external_includes)
|
|
|
|
vkd3d_public_includes = include_directories(vkd3d_public_includes)
|
|
|
|
vkd3d_private_includes = include_directories(vkd3d_private_includes)
|
|
|
|
|
|
|
|
idl_compiler = find_program('widl')
|
|
|
|
idl_generator = generator(idl_compiler,
|
|
|
|
output : [ '@BASENAME@.h' ],
|
|
|
|
arguments : [ '-h', '-o', '@OUTPUT@', '@INPUT@' ])
|
|
|
|
|
2020-06-24 05:44:51 +01:00
|
|
|
glsl_compiler = find_program('glslangValidator')
|
2022-02-18 12:22:11 +00:00
|
|
|
glsl_args = [ '-V', '--target-env', 'vulkan1.1', '--vn', '@BASENAME@', '@INPUT@', '-o', '@OUTPUT@' ]
|
2022-02-09 23:34:13 +00:00
|
|
|
if run_command(glsl_compiler, [ '--quiet', '--version' ], check : false).returncode() == 0
|
2021-04-21 11:08:42 +01:00
|
|
|
glsl_args += [ '--quiet' ]
|
|
|
|
endif
|
2020-06-24 05:44:51 +01:00
|
|
|
glsl_generator = generator(glsl_compiler,
|
|
|
|
output : [ '@BASENAME@.h' ],
|
2021-04-21 11:08:42 +01:00
|
|
|
arguments : glsl_args)
|
2020-06-24 05:44:51 +01:00
|
|
|
|
2020-06-23 01:47:41 +01:00
|
|
|
threads_dep = dependency('threads')
|
2020-07-02 16:41:57 +01:00
|
|
|
lib_d3d12 = vkd3d_compiler.find_library('d3d12', required : false)
|
2020-06-23 01:47:41 +01:00
|
|
|
|
|
|
|
if vkd3d_platform == 'linux'
|
|
|
|
lib_dl = vkd3d_compiler.find_library('dl')
|
|
|
|
vkd3d_extra_libs = [ lib_dl, threads_dep ]
|
|
|
|
elif vkd3d_platform == 'windows'
|
|
|
|
lib_dxgi = vkd3d_compiler.find_library('dxgi')
|
|
|
|
vkd3d_extra_libs = [ threads_dep ]
|
|
|
|
else
|
|
|
|
error('Unknown platform')
|
|
|
|
endif
|
|
|
|
|
|
|
|
add_project_arguments(vkd3d_compiler.get_supported_arguments([
|
2020-10-01 20:03:42 +01:00
|
|
|
'-fvisibility=hidden',
|
2021-03-04 15:37:26 +00:00
|
|
|
# For some reason, the use of VLAs isn't in all+extra+pedantic
|
|
|
|
# We don't want to use these accidentally from consts...
|
|
|
|
'-Wvla',
|
2020-06-23 01:47:41 +01:00
|
|
|
'-Wno-format',
|
2020-06-29 15:46:41 +01:00
|
|
|
'-Wno-missing-field-initializers',
|
2020-07-14 11:01:39 +01:00
|
|
|
'-Wno-unused-parameter',
|
2020-10-28 09:56:05 +00:00
|
|
|
'-Wdeclaration-after-statement',
|
2020-07-14 11:01:39 +01:00
|
|
|
'/wd4244', # Narrowing conversion
|
|
|
|
'/wd4101', # Unreferenced local variable
|
|
|
|
'/wd4267', # Another narrowing conversion
|
|
|
|
'/wd4996', # Secure no warnings
|
|
|
|
'/wd4334', # Result of 32-bit shift cast to 64-bit
|
|
|
|
'/wd4146', # Unary minus on unsigned
|
|
|
|
'/wd4305', # Truncation from double to float
|
|
|
|
]),
|
2020-06-23 01:47:41 +01:00
|
|
|
language : 'c')
|
|
|
|
|
2020-07-07 16:39:27 +01:00
|
|
|
if cpu_family == 'x86'
|
|
|
|
add_global_link_arguments(vkd3d_compiler.get_supported_link_arguments([
|
|
|
|
'-Wl,--add-stdcall-alias',
|
|
|
|
'-Wl,--enable-stdcall-fixup']),
|
|
|
|
language : [ 'c', 'cpp' ])
|
2021-02-16 07:48:40 +00:00
|
|
|
|
|
|
|
# Need to link against libatomic for 64-bit atomic emulation on x86
|
|
|
|
# when using clang.
|
2021-03-03 17:50:40 +00:00
|
|
|
if vkd3d_is_clang
|
2021-02-16 07:48:40 +00:00
|
|
|
lib_atomic = vkd3d_compiler.find_library('atomic')
|
|
|
|
vkd3d_extra_libs += lib_atomic
|
|
|
|
endif
|
2020-07-07 16:39:27 +01:00
|
|
|
endif
|
|
|
|
|
2021-03-03 17:53:52 +00:00
|
|
|
if not vkd3d_is_msvc
|
|
|
|
# We need to set the section alignment for debug symbols to
|
|
|
|
# work properly as well as avoiding a memcpy from the Wine loader.
|
|
|
|
if vkd3d_compiler.has_link_argument('-Wl,--file-alignment=4096')
|
|
|
|
add_global_link_arguments('-Wl,--file-alignment=4096', language : [ 'c', 'cpp' ])
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2020-10-27 18:14:34 +00:00
|
|
|
vkd3d_build = vcs_tag(
|
|
|
|
command : ['git', 'describe', '--always', '--exclude=*', '--abbrev=15', '--dirty=0'],
|
|
|
|
input : 'vkd3d_build.h.in',
|
|
|
|
output : 'vkd3d_build.h')
|
|
|
|
|
2020-06-23 01:47:41 +01:00
|
|
|
vkd3d_version = vcs_tag(
|
2020-10-27 18:14:34 +00:00
|
|
|
command : ['git', 'describe', '--always', '--tags', '--dirty=+'],
|
|
|
|
input : 'vkd3d_version.h.in',
|
|
|
|
output : 'vkd3d_version.h')
|
2020-06-23 01:47:41 +01:00
|
|
|
|
2020-06-26 16:18:30 +01:00
|
|
|
dxil_spirv = subproject('dxil-spirv')
|
|
|
|
dxil_spirv_dep = dxil_spirv.get_variable('dxil_spirv_dep')
|
2020-06-23 01:47:41 +01:00
|
|
|
|
2020-11-05 15:39:43 +00:00
|
|
|
subdir('include')
|
|
|
|
subdir('libs')
|
|
|
|
|
2020-07-22 10:52:49 +01:00
|
|
|
if vkd3d_platform == 'linux'
|
|
|
|
pkg = import('pkgconfig')
|
2020-11-05 15:39:43 +00:00
|
|
|
pkg.generate(vkd3d_lib, filebase : 'libvkd3d-proton', subdirs : 'vkd3d-proton', description : 'The VKD3D-Proton 3D Graphics Library')
|
|
|
|
pkg.generate(vkd3d_utils_lib, filebase : 'libvkd3d-proton-utils', subdirs : 'vkd3d-proton', description : 'The VKD3D-Proton 3D Graphics Utility Library')
|
2020-07-22 10:52:49 +01:00
|
|
|
|
2020-10-28 13:21:05 +00:00
|
|
|
install_headers('include/vkd3d.h', 'include/vkd3d_sonames.h', 'include/vkd3d_types.h', 'include/vkd3d_utils.h', 'include/vkd3d_win32.h', 'include/vkd3d_windows.h', subdir : 'vkd3d-proton')
|
2020-07-22 10:52:49 +01:00
|
|
|
endif
|
|
|
|
|
2020-07-30 15:17:20 +01:00
|
|
|
if vkd3d_platform == 'windows'
|
2020-11-04 19:34:51 +00:00
|
|
|
if enable_d3d12
|
2020-07-30 15:17:20 +01:00
|
|
|
lib_d3d12 = d3d12_dep
|
|
|
|
elif not lib_d3d12.found()
|
|
|
|
lib_d3d12 = vkd3d_utils_dep
|
|
|
|
if enable_extras
|
|
|
|
warning('No d3d12 lib, falling back to vkd3d_utils for extras ...')
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
endif
|
|
|
|
|
2020-06-23 01:47:41 +01:00
|
|
|
if enable_tests
|
|
|
|
subdir('tests')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if enable_extras
|
2020-07-01 18:56:01 +01:00
|
|
|
if vkd3d_platform == 'linux'
|
|
|
|
lib_m = vkd3d_compiler.find_library('m')
|
|
|
|
lib_xcb = vkd3d_compiler.find_library('xcb')
|
|
|
|
lib_xcbkeysyms = vkd3d_compiler.find_library('xcb-keysyms')
|
|
|
|
endif
|
2020-06-29 15:43:05 +01:00
|
|
|
|
2020-06-23 01:47:41 +01:00
|
|
|
subdir('demos')
|
|
|
|
subdir('programs')
|
2020-07-07 16:39:27 +01:00
|
|
|
endif
|