1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-11-29 01:24:11 +01:00
dxvk/meson.build

217 lines
5.5 KiB
Meson
Raw Normal View History

2024-11-17 00:12:17 +01:00
project('dxvk', ['c', 'cpp'], version : 'v2.5.1', 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
pkg = import('pkgconfig')
2017-12-12 12:50:52 +01:00
cpu_family = target_machine.cpu_family()
platform = target_machine.system()
fs = import('fs')
2017-12-12 12:50:52 +01:00
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',
build: Disable stdcall alias-ing and use kill-at Disable stdcall aliasing and enable kill-at to ensure our exported functions don't have the @8, @40, etc suffixes. This still keeps `--enable-stdcall-fixup` as otherwise the linker can get confused trying to find exports from the .def. This does not result in aliases being added, just for them to be found to add to the export table. This also switches d3d11 to use the MinGW provided dxgi.lib for linking and d3d10 to use the MinGW provided d3d11.lib for linking. Unfortunately the .a's we output seem to still have the @blah that we killed so we cannot use them for internal linkage since using kill-at. Tested that what we get out of MinGW now is what we want with dllexp. Supercedes: #3590 Exports ``` ➜ build git:(master) ✗ winedump -j export src/dxgi/dxgi.dll Contents of src/dxgi/dxgi.dll: 129505860 bytes Name: DXGI.DLL Characteristics: 00000000 TimeDateStamp: 64C97A2D Tue Aug 1 22:33:33 2023 Version: 0.00 Ordinal base: 9 # of functions: 9 # of Names: 5 Addresses of functions: 00423028 Addresses of name ordinals: 00423060 Addresses of names: 0042304C Entry Pt Ordn Name 00007C17 9 CreateDXGIFactory 00007BF3 10 CreateDXGIFactory1 00007B62 11 CreateDXGIFactory2 00007C3B 16 DXGIDeclareAdapterRemovalSupport 00007CD8 17 DXGIGetDebugInterface1 Done dumping src/dxgi/dxgi.dll ``` ``` ➜ build git:(fix-stdcall-32-bit) winedump -j export src/d3d11/d3d11.dll Contents of src/d3d11/d3d11.dll: 263021637 bytes Name: D3D11.DLL Characteristics: 00000000 TimeDateStamp: 64C97A2E Tue Aug 1 22:33:34 2023 Version: 0.00 Ordinal base: 18 # of functions: 7 # of Names: 4 Addresses of functions: 005E3028 Addresses of name ordinals: 005E3054 Addresses of names: 005E3044 Entry Pt Ordn Name 00020045 18 D3D11CoreCreateDevice 000200AA 22 D3D11CreateDevice 0002010E 23 D3D11CreateDeviceAndSwapChain 0002025F 24 D3D11On12CreateDevice Done dumping src/d3d11/d3d11.dll ``` Import of DXGI in D3D11 ``` offset 005e1014 dxgi.dll Hint/Name Table: 005E408C TimeDateStamp: 00000000 (Thu Jan 1 01:00:00 1970) ForwarderChain: 00000000 First thunk RVA: 005E4300 Thunk Ordn Name 005e4300 4 CreateDXGIFactory1 ```
2023-08-01 23:41:49 +02: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
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
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_sdl3 = dependency('SDL3', required: false)
lib_sdl2 = dependency('SDL2', required: false)
lib_glfw = dependency('glfw', required: false)
if lib_sdl3.found()
compiler_args += ['-DDXVK_WSI_SDL3']
endif
if lib_sdl2.found()
2022-12-03 04:11:43 +01:00
compiler_args += ['-DDXVK_WSI_SDL2']
endif
if lib_glfw.found()
2022-12-03 04:11:43 +01:00
compiler_args += ['-DDXVK_WSI_GLFW']
endif
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')
endif
2022-12-03 04:11:43 +01:00
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',
)
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',
)
if platform != 'windows'
subdir('include/native')
endif
2017-10-10 23:32:13 +02:00
subdir('src')