1
0
mirror of https://github.com/alliedmodders/metamod-source.git synced 2025-02-20 13:54:14 +01:00

Sketch out what a meson build might look like.

This commit is contained in:
David Anderson 2023-10-01 08:25:32 -07:00
parent 45d906ad28
commit f66867e535
4 changed files with 359 additions and 0 deletions

47
core/meson.build Normal file
View File

@ -0,0 +1,47 @@
core_builds = []
core_sources = [
'metamod.cpp',
'metamod_console.cpp',
'metamod_oslink.cpp',
'metamod_plugins.cpp',
'metamod_util.cpp',
'provider/provider_base.cpp',
'sourcehook/sourcehook.cpp',
'sourcehook/sourcehook_impl_chookidman.cpp',
'sourcehook/sourcehook_impl_chookmaninfo.cpp',
'sourcehook/sourcehook_impl_cproto.cpp',
'sourcehook/sourcehook_impl_cvfnptr.cpp',
'gamedll_bridge.cpp',
'vsp_bridge.cpp'
]
if target_machine.cpu_family() == 'x86'
core_sources += [
'sourcehook/sourcehook_hookmangen.cpp',
]
endif
foreach sdk : SDKs
core_binary_name = 'metamod.2.' + sdk['name']
sdk_core_sources = core_sources
if sdk['name'] == 'cs2' or sdk['name'] == 'dota'
sdk_core_sources += [
'provider/source2/provider_source2.cpp',
]
else
sdk_core_sources += [
'provider/source/provider_source.cpp',
'provider/source/provider_source_console.cpp',
]
endif
shared_module(core_binary_name,
sdk_core_sources,
versionlib_header,
name_prefix: '',
cpp_args: sdk['rules']['cpp_args'],
link_args: sdk['rules']['link_args'],
include_directories: sdk['rules']['include_directories'])
endforeach

33
loader/meson.build Normal file
View File

@ -0,0 +1,33 @@
loader_srcs = [
'loader.cpp',
'gamedll.cpp',
'serverplugin.cpp',
'utility.cpp',
]
loader_cpp_args = []
loader_include_directories = [
SourcehookIncludes
]
loader_link_args = ['-lgcc_eh']
if target_machine.system() == 'linux'
if target_machine.cpu_family() == 'x86_64'
shared_module('libserver', loader_srcs,
include_directories: loader_include_directories,
link_args: loader_link_args,
name_prefix: '',
cpp_args: ['-DLIB_PREFIX="lib"', '-DLIB_SUFFIX=".so"'])
elif target_machine.cpu_family() == 'x86'
shared_module('server_i486', loader_srcs,
include_directories: loader_include_directories,
link_args: loader_link_args,
name_prefix: '',
cpp_args: ['-DLIB_PREFIX=""', '-DLIB_SUFFIX="_i486.so"'])
endif
endif
shared_module('server', loader_srcs,
include_directories: loader_include_directories,
link_args: loader_link_args,
name_prefix: '',
cpp_args: ['-DLIB_PREFIX="lib"', '-DLIB_SUFFIX=".so"'])

252
meson.build Normal file
View File

@ -0,0 +1,252 @@
project('metamod', 'c', 'cpp')
fs = import('fs')
compiler = meson.get_compiler('cpp')
if compiler.get_id() == 'clang' or compiler.get_id() == 'gcc'
global_defines = [
'-Dstricmp=strcasecmp',
'-D_stricmp=strcasecmp',
'-D_snprintf=snprintf',
'-D_vsnprintf=vsnprintf',
'-DHAVE_STDINT_H',
'-DGNUC',
]
add_project_arguments(global_defines, language: ['c', 'cpp'])
global_arguments = [
'-pipe',
'-fno-strict-aliasing',
'-Wall',
'-Werror',
'-Wno-uninitialized',
'-Wno-unused',
'-Wno-switch',
'-msse',
'-fPIC',
'-fno-omit-frame-pointer',
]
add_project_arguments(global_arguments, language: ['c', 'cpp'])
global_cxx_arguments = [
'-std=c++14',
'-fno-exceptions',
'-fno-rtti',
'-fno-threadsafe-statics',
'-Wno-non-virtual-dtor',
'-Wno-overloaded-virtual',
]
add_project_arguments(global_cxx_arguments, language: ['cpp'])
if compiler.has_argument('-Wno-delete-non-virtual-dtor')
add_project_arguments('-Wno-delete-non-virtual-dtor', language: 'cpp')
endif
if compiler.has_argument('-mfpmath')
add_project_arguments('-mfpmath=sse', language: 'cpp')
endif
if compiler.has_argument('-Wno-implicit-exception-spec-mismatch')
add_project_arguments('-Wno-implicit-exception-spec-mismatch', language: 'cpp')
endif
if compiler.has_argument('-Wno-expansion-to-defined')
add_project_arguments('-Wno-expansion-to-defined', language: 'cpp')
endif
if compiler.has_argument('-Wno-inconsistent-missing-override')
add_project_arguments('-Wno-inconsistent-missing-override', language: 'cpp')
endif
if compiler.has_argument('-Wno-deprecated-register')
add_project_arguments('-Wno-deprecated-register', language: 'cpp')
elif compiler.has_argument('-Wno-deprecated')
add_project_arguments('-Wno-deprecated', language: 'cpp')
endif
if compiler.has_argument('-Wno-implicit-int-float-conversion')
add_project_arguments('-Wno-implicit-int-float-conversion', language: 'cpp')
endif
if compiler.has_argument('')
add_project_arguments('-Wno-tautological-overlap-compare', language: 'cpp')
endif
add_project_arguments('-D_LINUX', language: 'cpp')
add_project_arguments('-DPOSIX', language: 'cpp')
add_project_arguments('-D_FILE_OFFSET_BITS=64', language: 'cpp')
endif
TargetPlatform = target_machine.system() + '-' + target_machine.cpu_family()
SourcehookIncludes = include_directories('core/sourcehook')
AMTL = include_directories('third_party/amtl')
PossibleSDKs = {
'l4d': {
'sdk_def': 'LEFT4DEAD',
'sdk_code': '13',
'platforms': ['windows-x86', 'linux-x86'],
'linux-x86': {
'dynamic_libs': ['libtier0.so', 'libvstdlib.so'],
}
},
'l4d2': {
'sdk_def': 'LEFT4DEAD2',
'sdk_code': '16',
'platforms': ['windows-x86', 'linux-x86'],
'linux-x86': {
'dynamic_libs': ['libtier0_srv.so', 'libvstdlib_srv.so'],
'flags': ['-DNO_HOOK_MALLOC', '-DNO_MALLOC_OVERRIDE'],
}
},
'csgo': {
'sdk_def': 'CSGO',
'sdk_code': '23',
'platforms': ['windows-x86', 'linux-x86', 'linux-x86_64'],
'linux-x86': {
'interfaces': 'interfaces.a',
'dynamic_libs': ['libtier0.so', 'libvstdlib.so'],
'flags': ['-D_GLIBCXX_USE_CXX11_ABI=0'],
'link_flags': ['-lstdc++'],
},
'linux-x86_64': {
'dynamic_libs': ['libtier0_client.so', 'libvstdlib_client.so'],
'flags': ['-D_GLIBCXX_USE_CXX11_ABI=0'],
'link_flags': ['-lstdc++'],
},
},
'mock': {
'sdk_def': 'MOCK',
'sdk_code': '999',
'platforms': ['windows-x86', 'windows-x86_64', 'linux-x86', 'linux-x86_64'],
'linux-x86': {
'dynamic_libs': ['tier0_i486.so', 'vstdlib_i486.so'],
},
'linux-x86_64': {
'dynamic_libs': ['libtier0_client.so', 'libvstdlib_client.so'],
},
}
}
subdir('versionlib')
SDKDefines = []
foreach sdk_name, sdk : PossibleSDKs
SDKDefines += ['-DSE_' + sdk['sdk_def'] + '=' + sdk['sdk_code']]
endforeach
SDKs = []
foreach sdk_name, sdk : PossibleSDKs
if TargetPlatform not in sdk['platforms']
continue
endif
sdk_dir_name = sdk_name
if 'dir_name' in sdk
sdk_dir_name = sdk['dir_name']
endif
sdk_path = join_paths(fs.parent(meson.source_root()), 'hl2sdk-' + sdk_dir_name)
if not fs.is_dir(sdk_path)
message(sdk_path)
continue
endif
sdk += {
'path': sdk_path,
'name': sdk_name,
}
platform_rules = {}
if TargetPlatform in sdk
platform_rules += sdk[TargetPlatform]
endif
if 'lib_folder' not in platform_rules
if target_machine.system() == 'linux'
if target_machine.cpu_family() == 'x86_64'
platform_rules += { 'lib_folder': join_paths('lib', 'linux64') }
elif target_machine.cpu_family() == 'x86'
platform_rules += { 'lib_folder': join_paths('lib', 'linux') }
endif
endif
endif
if 'tier1_name' not in platform_rules
if target_machine.system() == 'linux'
if target_machine.cpu_family() == 'x86_64'
platform_rules += { 'tier1': 'tier1.a' }
elif target_machine.cpu_family() == 'x86'
platform_rules += { 'tier1': 'tier1_i486.a' }
endif
endif
endif
link_flags = []
if target_machine.system() == 'linux'
if sdk_name == 'mock'
link_flags += ['-Wl,-z,-origin']
endif
link_flags += [join_paths(sdk_path, platform_rules['lib_folder'], platform_rules['tier1'])]
endif
if 'interfaces' in platform_rules
link_flags += [join_paths(sdk_path, platform_rules['lib_folder'], platform_rules['interfaces'])]
endif
if 'mathlib' in platform_rules
link_flags += [join_paths(sdk_path, platform_rules['lib_folder'], platform_rules['mathlib'])]
endif
if target_machine.system() == 'linux'
link_flags = ['-lm'] + link_flags
endif
if 'link_flags' in platform_rules
link_flags += platform_rules['link_flags']
endif
include_dirs = [
AMTL,
SourcehookIncludes,
include_directories('loader'),
include_directories('public'),
]
paths = [
'common',
'public',
join_paths('game', 'shared'),
join_paths('game_shared'),
join_paths('public', 'dlls'),
join_paths('public', 'engine'),
join_paths('public', 'game', 'server'),
join_paths('public', 'mathlib'),
join_paths('public', 'tier0'),
join_paths('public', 'tier1'),
join_paths('public', 'vstdlib'),
]
foreach path : paths
full_path = join_paths(sdk_path, path)
if fs.is_dir(full_path)
include_dirs += [include_directories(full_path)]
endif
endforeach
flags = []
flags += SDKDefines
flags += ['-DSOURCE_ENGINE=' + sdk['sdk_code']]
if compiler.get_id() in ['gcc', 'clang']
flags += ['-DCOMPILER_GCC']
endif
if target_machine.cpu_family() == 'x86_64'
flags += ['-DX64BITS', '-DPLATFORM_64BITS']
endif
if 'flags' in platform_rules
flags += platform_rules['flags']
endif
platform_rules += {
'cpp_args': flags,
'link_args': link_flags,
'include_directories': include_dirs,
}
sdk += { 'rules': platform_rules }
SDKs += [sdk]
endforeach
subdir('loader')
subdir('core')

27
versionlib/meson.build Normal file
View File

@ -0,0 +1,27 @@
python3 = find_program('python3')
versionlib_inputs = [
join_paths('..', 'support', 'buildbot', 'generate_headers.py'),
join_paths('..', 'product.version'),
]
versionlib_cmd = [
python3,
versionlib_inputs[0],
meson.source_root(),
'@OUTDIR@',
]
versionlib_header_tgt = custom_target('versionlib_header',
output: 'metamod_version_auto.h',
input: versionlib_inputs,
command: versionlib_cmd)
versionlib_header = versionlib_header_tgt[0]
versionlib_includes = [
include_directories(join_paths('..', 'public')),
]
versionlib = static_library('version',
['versionlib.cpp'],
versionlib_header,
include_directories: versionlib_includes)