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:
parent
45d906ad28
commit
f66867e535
47
core/meson.build
Normal file
47
core/meson.build
Normal 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
33
loader/meson.build
Normal 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
252
meson.build
Normal 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
27
versionlib/meson.build
Normal 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)
|
Loading…
x
Reference in New Issue
Block a user