mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-03 22:24:13 +01:00
01684d36ba
PDB generation even for release builds takes a little more time, but makes debugging DXVK on Windows easier. As the symbols are not embedded in the DLL it doesn't impact code generation or output binary size.
209 lines
5.2 KiB
Meson
209 lines
5.2 KiB
Meson
project('dxvk', ['c', 'cpp'], version : 'v2.4.1', meson_version : '>= 0.58', default_options : [ 'cpp_std=c++17', 'warning_level=2' ])
|
|
|
|
pkg = import('pkgconfig')
|
|
cpu_family = target_machine.cpu_family()
|
|
platform = target_machine.system()
|
|
fs = import('fs')
|
|
|
|
cpp = meson.get_compiler('cpp')
|
|
cc = meson.get_compiler('c')
|
|
dxvk_is_msvc = cpp.get_argument_syntax() == 'msvc'
|
|
|
|
compiler_args = [
|
|
'-msse',
|
|
'-msse2',
|
|
'-msse3',
|
|
'-mfpmath=sse',
|
|
'-Wimplicit-fallthrough',
|
|
# gcc
|
|
'-Wno-missing-field-initializers',
|
|
'-Wno-unused-parameter',
|
|
'-Wno-cast-function-type', # Needed for GetProcAddress.
|
|
# clang
|
|
'-Wno-unused-private-field',
|
|
'-Wno-microsoft-exception-spec',
|
|
'-Wno-extern-c-compat',
|
|
'-Wno-unused-const-variable',
|
|
'-Wno-missing-braces',
|
|
]
|
|
|
|
link_args = []
|
|
|
|
if get_option('build_id')
|
|
link_args += [
|
|
'-Wl,--build-id',
|
|
]
|
|
endif
|
|
|
|
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
|
|
|
|
dep_displayinfo = dependency(
|
|
'libdisplay-info',
|
|
version: ['>= 0.0.0', '< 0.2.0'],
|
|
fallback: ['libdisplay-info', 'di_dep'],
|
|
default_options: ['default_library=static'],
|
|
)
|
|
|
|
if platform == 'windows'
|
|
dxvk_so_version = {'name_prefix': ''}
|
|
|
|
compiler_args += [
|
|
'-DNOMINMAX',
|
|
'-D_WIN32_WINNT=0xa00',
|
|
]
|
|
|
|
if not dxvk_is_msvc
|
|
link_args += [
|
|
'-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',
|
|
]
|
|
|
|
# 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
|
|
else
|
|
# setup file alignment + enable PDB output for MSVC builds
|
|
# PDBs are useful for Windows consumers of DXVK
|
|
compiler_args += [
|
|
'/Z7'
|
|
]
|
|
link_args += [
|
|
'/FILEALIGN:4096',
|
|
'/DEBUG:FULL'
|
|
]
|
|
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
|
|
|
|
dxvk_name_prefix = ''
|
|
compiler_args += ['-DDXVK_WSI_WIN32']
|
|
else
|
|
dxvk_abi_version = '0'
|
|
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
|
|
dxvk_so_version = {'version': dxvk_abi_version + '.' + dxvk_version[0] + dxvk_version[1] + dxvk_version[2]}
|
|
|
|
wrc = find_program('touch')
|
|
wrc_generator = generator(wrc, output : [ '@BASENAME@_ignored.h' ], arguments : [ '@OUTPUT@' ] )
|
|
|
|
dxvk_include_dirs += [
|
|
'./include/native',
|
|
'./include/native/windows',
|
|
'./include/native/directx'
|
|
]
|
|
|
|
lib_sdl2 = dependency('SDL2', required: false)
|
|
lib_glfw = dependency('glfw', required: false)
|
|
if lib_sdl2.found()
|
|
compiler_args += ['-DDXVK_WSI_SDL2']
|
|
endif
|
|
if lib_glfw.found()
|
|
compiler_args += ['-DDXVK_WSI_GLFW']
|
|
endif
|
|
if (not lib_sdl2.found() and not lib_glfw.found())
|
|
error('SDL2 or GLFW are required to build dxvk-native')
|
|
endif
|
|
|
|
dxvk_name_prefix = 'dxvk_'
|
|
dxvk_pkg_prefix = 'dxvk-'
|
|
|
|
link_args += [
|
|
'-static-libgcc',
|
|
'-static-libstdc++',
|
|
]
|
|
endif
|
|
|
|
dxvk_include_path = include_directories(dxvk_include_dirs)
|
|
|
|
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')
|
|
|
|
exe_ext = ''
|
|
def_spec_ext = '.def'
|
|
|
|
glsl_compiler = find_program('glslang', 'glslangValidator')
|
|
glsl_args = [
|
|
'--quiet',
|
|
'--target-env', 'vulkan1.3',
|
|
'--vn', '@BASENAME@',
|
|
'--depfile', '@DEPFILE@',
|
|
'@INPUT@',
|
|
'-o', '@OUTPUT@',
|
|
]
|
|
glsl_generator = generator(
|
|
glsl_compiler,
|
|
output : [ '@BASENAME@.h' ],
|
|
depfile : '@BASENAME@.h.d',
|
|
arguments : glsl_args,
|
|
)
|
|
|
|
dxvk_version = vcs_tag(
|
|
command: ['git', 'describe', '--dirty=+'],
|
|
input: 'version.h.in',
|
|
output: 'version.h',
|
|
)
|
|
|
|
if platform != 'windows'
|
|
subdir('include/native')
|
|
endif
|
|
|
|
subdir('src')
|