2024-11-11 19:59:39 +01:00
|
|
|
project('dxvk', ['c', 'cpp'], version : 'v2.5.0', meson_version : '>= 0.58', default_options : [ 'cpp_std=c++17', 'b_vscrt=static_from_buildtype', 'warning_level=2' ])
|
2017-10-10 23:32:13 +02:00
|
|
|
|
2023-03-31 16:23:03 +02:00
|
|
|
pkg = import('pkgconfig')
|
2017-12-12 12:50:52 +01:00
|
|
|
cpu_family = target_machine.cpu_family()
|
2022-04-19 19:41:57 +02:00
|
|
|
platform = target_machine.system()
|
2024-02-05 01:37:42 +01:00
|
|
|
fs = import('fs')
|
2017-12-12 12:50:52 +01:00
|
|
|
|
2022-02-22 23:34:02 +01:00
|
|
|
cpp = meson.get_compiler('cpp')
|
|
|
|
cc = meson.get_compiler('c')
|
2024-01-19 01:59:47 +01:00
|
|
|
dxvk_is_msvc = cpp.get_argument_syntax() == 'msvc'
|
2022-02-22 23:34:02 +01:00
|
|
|
|
|
|
|
compiler_args = [
|
|
|
|
'-msse',
|
|
|
|
'-msse2',
|
|
|
|
'-msse3',
|
|
|
|
'-mfpmath=sse',
|
|
|
|
'-Wimplicit-fallthrough',
|
2022-09-10 23:04:36 +02:00
|
|
|
# gcc
|
|
|
|
'-Wno-missing-field-initializers',
|
|
|
|
'-Wno-unused-parameter',
|
|
|
|
'-Wno-cast-function-type', # Needed for GetProcAddress.
|
2022-02-22 23:34:02 +01:00
|
|
|
# clang
|
|
|
|
'-Wno-unused-private-field',
|
|
|
|
'-Wno-microsoft-exception-spec',
|
2022-09-10 23:26:18 +02:00
|
|
|
'-Wno-extern-c-compat',
|
|
|
|
'-Wno-unused-const-variable',
|
|
|
|
'-Wno-missing-braces',
|
2022-02-22 23:34:02 +01:00
|
|
|
]
|
|
|
|
|
2022-04-19 19:41:57 +02:00
|
|
|
link_args = []
|
2020-03-18 04:47:55 +01:00
|
|
|
|
2022-02-22 23:34:02 +01:00
|
|
|
if get_option('build_id')
|
|
|
|
link_args += [
|
|
|
|
'-Wl,--build-id',
|
|
|
|
]
|
2020-07-17 10:30:00 +02:00
|
|
|
endif
|
|
|
|
|
2024-02-05 01:37:42 +01:00
|
|
|
dxvk_include_dirs = ['./include']
|
|
|
|
if fs.is_dir('./include/vulkan/include')
|
|
|
|
dxvk_include_dirs += ['./include/vulkan/include']
|
|
|
|
elif not cpp.check_header('vulkan/vulkan.h')
|
|
|
|
error('Missing Vulkan-Headers')
|
|
|
|
endif
|
|
|
|
if fs.is_dir('./include/spirv/include')
|
|
|
|
dxvk_include_dirs += ['./include/spirv/include']
|
|
|
|
elif not cpp.check_header('spirv/unified1/spirv.hpp')
|
|
|
|
error('Missing SPIRV-Headers')
|
|
|
|
endif
|
2022-08-21 21:08:49 +02:00
|
|
|
|
2024-01-29 23:39:48 +01:00
|
|
|
dep_displayinfo = dependency(
|
|
|
|
'libdisplay-info',
|
|
|
|
version: ['>= 0.0.0', '< 0.2.0'],
|
|
|
|
fallback: ['libdisplay-info', 'di_dep'],
|
|
|
|
default_options: ['default_library=static'],
|
|
|
|
)
|
2022-11-17 17:45:42 +01:00
|
|
|
|
2022-04-19 19:41:57 +02:00
|
|
|
if platform == 'windows'
|
2023-03-31 16:01:43 +02:00
|
|
|
dxvk_so_version = {'name_prefix': ''}
|
2023-12-12 17:58:12 +01:00
|
|
|
|
2022-04-19 19:41:57 +02:00
|
|
|
compiler_args += [
|
|
|
|
'-DNOMINMAX',
|
|
|
|
'-D_WIN32_WINNT=0xa00',
|
|
|
|
]
|
|
|
|
|
2024-01-19 02:02:50 +01:00
|
|
|
if not dxvk_is_msvc
|
2022-04-19 19:41:57 +02:00
|
|
|
link_args += [
|
2024-01-19 02:02:50 +01:00
|
|
|
'-static',
|
|
|
|
'-static-libgcc',
|
|
|
|
'-static-libstdc++',
|
|
|
|
# We need to set the section alignment for debug symbols to
|
|
|
|
# work properly as well as avoiding a memcpy from the Wine loader.
|
|
|
|
'-Wl,--file-alignment=4096',
|
2023-08-01 23:41:49 +02:00
|
|
|
]
|
2024-01-19 02:02:50 +01:00
|
|
|
|
|
|
|
# Wine's built-in back traces only work with dwarf4 symbols
|
|
|
|
if get_option('debug')
|
|
|
|
compiler_args += [
|
|
|
|
'-gdwarf-4',
|
|
|
|
]
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Enable stdcall fixup on 32-bit
|
|
|
|
if cpu_family == 'x86'
|
|
|
|
link_args += [
|
|
|
|
'-Wl,--enable-stdcall-fixup',
|
|
|
|
'-Wl,--kill-at',
|
|
|
|
]
|
|
|
|
endif
|
2024-01-19 02:04:55 +01:00
|
|
|
else
|
2024-07-26 17:53:54 +02:00
|
|
|
# setup file alignment + enable PDB output for MSVC builds
|
|
|
|
# PDBs are useful for Windows consumers of DXVK
|
|
|
|
compiler_args += [
|
2024-11-10 21:31:49 +01:00
|
|
|
'/Z7'
|
|
|
|
]
|
2024-01-19 02:04:55 +01:00
|
|
|
link_args += [
|
|
|
|
'/FILEALIGN:4096',
|
2024-07-26 17:53:54 +02:00
|
|
|
'/DEBUG:FULL'
|
2024-01-19 02:04:55 +01:00
|
|
|
]
|
2022-04-19 19:41:57 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
lib_d3d9 = cpp.find_library('d3d9')
|
|
|
|
lib_d3d11 = cpp.find_library('d3d11')
|
|
|
|
lib_dxgi = cpp.find_library('dxgi')
|
|
|
|
|
|
|
|
if dxvk_is_msvc
|
|
|
|
lib_d3dcompiler_47 = cpp.find_library('d3dcompiler')
|
|
|
|
else
|
|
|
|
lib_d3dcompiler_47 = cpp.find_library('d3dcompiler_47')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if dxvk_is_msvc
|
|
|
|
res_ext = '.res'
|
|
|
|
wrc = find_program('rc')
|
|
|
|
wrc_generator = generator(wrc,
|
|
|
|
output : [ '@BASENAME@' + res_ext ],
|
|
|
|
arguments : [ '/fo', '@OUTPUT@', '@INPUT@' ],
|
|
|
|
)
|
|
|
|
else
|
|
|
|
res_ext = '.o'
|
|
|
|
wrc = find_program('windres')
|
|
|
|
wrc_generator = generator(wrc,
|
|
|
|
output : [ '@BASENAME@' + res_ext ],
|
|
|
|
arguments : [ '-i', '@INPUT@', '-o', '@OUTPUT@' ],
|
|
|
|
)
|
|
|
|
endif
|
|
|
|
|
2022-10-05 22:04:59 +02:00
|
|
|
dxvk_name_prefix = ''
|
2022-08-09 14:19:36 +02:00
|
|
|
compiler_args += ['-DDXVK_WSI_WIN32']
|
2022-04-19 19:41:57 +02:00
|
|
|
else
|
2023-12-12 17:58:12 +01:00
|
|
|
dxvk_abi_version = '0'
|
2024-07-03 14:57:30 +02:00
|
|
|
dxvk_version_raw = meson.project_version().strip('v').split('.')
|
|
|
|
dxvk_version = [ dxvk_version_raw[0] ]
|
|
|
|
foreach i : [ 1, 2 ]
|
|
|
|
padded = dxvk_version_raw[i]
|
|
|
|
if padded.to_int() < 10
|
|
|
|
padded = '0' + padded
|
|
|
|
endif
|
|
|
|
dxvk_version += [ padded ]
|
|
|
|
endforeach
|
2023-12-12 17:58:12 +01:00
|
|
|
dxvk_so_version = {'version': dxvk_abi_version + '.' + dxvk_version[0] + dxvk_version[1] + dxvk_version[2]}
|
|
|
|
|
2022-04-19 19:41:57 +02:00
|
|
|
wrc = find_program('touch')
|
|
|
|
wrc_generator = generator(wrc, output : [ '@BASENAME@_ignored.h' ], arguments : [ '@OUTPUT@' ] )
|
|
|
|
|
2022-08-21 23:22:43 +02:00
|
|
|
dxvk_include_dirs += [
|
|
|
|
'./include/native',
|
|
|
|
'./include/native/windows',
|
|
|
|
'./include/native/directx'
|
|
|
|
]
|
2022-08-21 22:34:19 +02:00
|
|
|
|
2024-10-05 21:23:11 +02:00
|
|
|
lib_sdl3 = dependency('SDL3', required: false)
|
2024-02-10 19:06:33 +01:00
|
|
|
lib_sdl2 = dependency('SDL2', required: false)
|
|
|
|
lib_glfw = dependency('glfw', required: false)
|
2024-10-05 21:23:11 +02:00
|
|
|
if lib_sdl3.found()
|
|
|
|
compiler_args += ['-DDXVK_WSI_SDL3']
|
|
|
|
endif
|
2023-12-08 07:18:54 +01:00
|
|
|
if lib_sdl2.found()
|
2022-12-03 04:11:43 +01:00
|
|
|
compiler_args += ['-DDXVK_WSI_SDL2']
|
2023-12-08 07:18:54 +01:00
|
|
|
endif
|
|
|
|
if lib_glfw.found()
|
2022-12-03 04:11:43 +01:00
|
|
|
compiler_args += ['-DDXVK_WSI_GLFW']
|
|
|
|
endif
|
2024-10-05 21:23:11 +02:00
|
|
|
if (not lib_sdl3.found() and not lib_sdl2.found() and not lib_glfw.found())
|
|
|
|
error('SDL3, SDL2, or GLFW are required to build dxvk-native')
|
2023-12-08 07:18:54 +01:00
|
|
|
endif
|
2022-12-03 04:11:43 +01:00
|
|
|
|
2023-03-31 16:01:43 +02:00
|
|
|
dxvk_name_prefix = 'dxvk_'
|
2023-03-31 16:23:03 +02:00
|
|
|
dxvk_pkg_prefix = 'dxvk-'
|
2022-10-06 02:25:38 +02:00
|
|
|
|
|
|
|
link_args += [
|
|
|
|
'-static-libgcc',
|
|
|
|
'-static-libstdc++',
|
|
|
|
]
|
2021-02-17 16:18:28 +01:00
|
|
|
endif
|
|
|
|
|
2022-08-21 23:22:43 +02:00
|
|
|
dxvk_include_path = include_directories(dxvk_include_dirs)
|
|
|
|
|
2022-02-22 23:34:02 +01:00
|
|
|
add_project_arguments(cpp.get_supported_arguments(compiler_args), language: 'cpp')
|
|
|
|
add_project_arguments(cc.get_supported_arguments(compiler_args), language: 'c')
|
|
|
|
add_project_link_arguments(cpp.get_supported_link_arguments(link_args), language: 'cpp')
|
|
|
|
add_project_link_arguments(cc.get_supported_link_arguments(link_args), language: 'c')
|
2022-03-09 22:37:33 +01:00
|
|
|
|
2020-04-20 17:30:57 +02:00
|
|
|
exe_ext = ''
|
|
|
|
def_spec_ext = '.def'
|
|
|
|
|
2023-07-27 15:41:28 +02:00
|
|
|
glsl_compiler = find_program('glslang', 'glslangValidator')
|
2022-10-21 13:42:15 +02:00
|
|
|
glsl_args = [
|
|
|
|
'--quiet',
|
2024-04-19 13:36:32 +02:00
|
|
|
'--target-env', 'vulkan1.3',
|
2022-10-21 13:42:15 +02:00
|
|
|
'--vn', '@BASENAME@',
|
2022-10-21 13:47:36 +02:00
|
|
|
'--depfile', '@DEPFILE@',
|
2022-10-21 13:42:15 +02:00
|
|
|
'@INPUT@',
|
|
|
|
'-o', '@OUTPUT@',
|
|
|
|
]
|
2022-10-21 13:47:36 +02:00
|
|
|
glsl_generator = generator(
|
|
|
|
glsl_compiler,
|
2018-01-13 03:53:33 +01:00
|
|
|
output : [ '@BASENAME@.h' ],
|
2022-10-21 13:47:36 +02:00
|
|
|
depfile : '@BASENAME@.h.d',
|
2022-02-22 23:34:02 +01:00
|
|
|
arguments : glsl_args,
|
|
|
|
)
|
2018-01-13 03:53:33 +01:00
|
|
|
|
2018-07-11 19:26:45 +02:00
|
|
|
dxvk_version = vcs_tag(
|
2018-09-30 22:19:05 +02:00
|
|
|
command: ['git', 'describe', '--dirty=+'],
|
2018-07-11 17:24:30 +02:00
|
|
|
input: 'version.h.in',
|
2022-02-22 23:34:02 +01:00
|
|
|
output: 'version.h',
|
|
|
|
)
|
2018-07-11 17:24:30 +02:00
|
|
|
|
2024-11-10 13:56:23 +01:00
|
|
|
conf_data = configuration_data()
|
|
|
|
conf_data.set('BUILD_COMPILER', cpp.get_id())
|
|
|
|
conf_data.set('BUILD_COMPILER_VERSION', cpp.version())
|
|
|
|
conf_data.set('BUILD_TARGET', cpu_family)
|
|
|
|
dxvk_buildenv = configure_file(
|
|
|
|
configuration : conf_data,
|
|
|
|
input: 'buildenv.h.in',
|
|
|
|
output: 'buildenv.h',
|
|
|
|
)
|
|
|
|
|
2023-03-31 16:36:07 +02:00
|
|
|
if platform != 'windows'
|
|
|
|
subdir('include/native')
|
|
|
|
endif
|
|
|
|
|
2017-10-10 23:32:13 +02:00
|
|
|
subdir('src')
|