hl2sdk-starter/meson.build

234 lines
5.6 KiB
Meson
Raw Normal View History

2024-04-25 03:33:15 +03:00
project(
'hl2sdk-starter',
'cpp',
default_options: [
2024-04-25 04:52:16 +03:00
'cpp_std=c++17',
2024-04-25 03:33:15 +03:00
],
)
cpp = meson.get_compiler('cpp')
compiler_args = []
linker_args = []
compiler = cpp.get_id()
host_system = host_machine.system()
arch = get_option('arch')
buildtype = get_option('buildtype')
2024-04-28 16:22:53 +03:00
# Sanity checks
if compiler != 'gcc' and compiler != 'clang'
error('Unsupported compiler "@0@"', compiler)
endif
if host_system != 'linux' and host_system != 'windows'
error('Unsupported host system system "@0@"', host_system)
endif
if arch != 'x86' and arch != 'x64'
error('Unsupported arch "@0@"', arch)
endif
# Compiler specific defines
if compiler == 'gcc' or compiler == 'clang'
2024-04-25 03:33:15 +03:00
compiler_args += [
'-DGNUC'
]
endif
# Warnings
compiler_args += [
'-Wall',
]
2024-04-25 04:33:53 +03:00
if compiler == 'msvc'
compiler_args += [
# '/WX',
]
elif compiler == 'gcc'
compiler_args += [
# '-Werror',
2024-04-25 04:33:53 +03:00
'-Wno-overloaded-virtual',
]
2024-04-28 16:22:53 +03:00
elif compiler == 'clang'
compiler_args += [
# '-Werror',
'-Wno-overloaded-virtual',
'-fms-extensions', # narrowing casts
]
2024-04-25 04:33:53 +03:00
endif
2024-04-25 03:33:15 +03:00
# Debug/Release target
if buildtype == 'debug'
compiler_args += [
'-DDEBUG',
'-D_DEBUG',
]
2024-04-25 04:33:53 +03:00
if compiler == 'msvc'
compiler_args += [
'/Od',
]
2024-04-28 16:22:53 +03:00
elif compiler == 'gcc' or compiler == 'clang'
2024-04-25 04:33:53 +03:00
compiler_args += [
'-g',
'-O0',
]
endif
2024-04-25 03:33:15 +03:00
else
compiler_args += [
'-DNDEBUG',
]
2024-04-25 04:33:53 +03:00
if compiler == 'msvc'
compiler_args += [
'/O2',
]
2024-04-28 16:22:53 +03:00
elif compiler == 'gcc' or compiler == 'clang'
2024-04-25 04:33:53 +03:00
compiler_args += [
'-O3',
]
endif
2024-04-25 03:33:15 +03:00
endif
# OS
if host_system == 'windows'
compiler_args += [
'-D_WINDOWS',
]
if arch == 'x86'
compiler_args += [
'-DWIN32',
'-D_WIN32',
]
else
compiler_args += [
'-DWIN64',
'-D_WIN64',
]
endif
elif host_system == 'linux'
compiler_args += [
'-DLINUX',
'-D_LINUX',
'-DPOSIX',
'-D_finite=finite',
'-Dstricmp=strcasecmp',
'-D_stricmp=strcasecmp',
'-D_strnicmp=strncasecmp',
'-Dstrnicmp=strncasecmp',
'-D_vsnprintf=vsnprintf',
'-D_alloca=alloca',
'-Dstrcmpi=strcasecmp',
'-DNO_MALLOC_OVERRIDE',
'-msse',
'-fPIC',
'-fpermissive',
2024-04-25 03:33:15 +03:00
]
linker_args += [
'-static-libgcc',
]
endif
# CPU architecture
if arch == 'x86'
2024-04-28 16:22:53 +03:00
if compiler == 'gcc' or compiler == 'clang'
2024-04-25 04:33:53 +03:00
compiler_args += [
'-m32',
]
linker_args += [
'-m32',
]
endif
2024-04-25 03:33:15 +03:00
elif arch == 'x64'
compiler_args += [
'-DX64BITS',
'-DPLATFORM_64BITS',
]
2024-04-28 16:22:53 +03:00
if compiler == 'gcc' or compiler == 'clang'
2024-04-25 04:33:53 +03:00
compiler_args += [
'-m64',
]
linker_args += [
'-m64',
]
endif
2024-04-25 03:33:15 +03:00
endif
# Target specific workarounds
if host_system == 'linux' and buildtype == 'release'
compiler_args += [
'-Wno-strict-aliasing',
]
endif
if host_system == 'linux' and arch == 'x64'
compiler_args += [
# CThreadSpinRWLock() COMPILE_TIME_ASSERT wrong LockInfo_t size
'-U_DEBUG',
]
endif
# Common SDK directories to include
sdk_includes = include_directories([
'include/hl2sdk/public',
'include/hl2sdk/public/engine',
'include/hl2sdk/public/game/server',
2024-04-27 14:21:18 +03:00
'include/hl2sdk/public/mathlib',
2024-04-25 03:33:15 +03:00
'include/hl2sdk/public/tier0',
'include/hl2sdk/public/tier1',
2024-04-27 14:21:18 +03:00
'include/hl2sdk/public/vstdlib',
2024-04-25 03:33:15 +03:00
])
# SDK libraries
sdk_deps = []
if host_system == 'windows'
if arch == 'x86'
2024-04-25 03:55:18 +03:00
dir_x86 = join_paths(meson.current_source_dir(), 'include/hl2sdk/lib/public')
2024-04-25 03:33:15 +03:00
sdk_deps += [
cpp.find_library('mathlib', dirs: [dir_x86], required: true),
cpp.find_library('tier0', dirs: [dir_x86], required: true),
cpp.find_library('tier1', dirs: [dir_x86], required: true),
cpp.find_library('vstdlib', dirs: [dir_x86], required: true),
]
elif arch == 'x64'
2024-04-25 03:55:18 +03:00
dir_x64 = join_paths(meson.current_source_dir(), 'include/hl2sdk/lib/public/win64')
2024-04-25 03:33:15 +03:00
sdk_deps += [
cpp.find_library('mathlib', dirs: [dir_x64], required: true),
cpp.find_library('tier0', dirs: [dir_x64], required: true),
cpp.find_library('tier1', dirs: [dir_x64], required: true),
cpp.find_library('vstdlib', dirs: [dir_x64], required: true),
]
endif
elif host_system == 'linux'
if arch == 'x86'
dirs_x86 = [
join_paths(meson.current_source_dir(), 'include/hl2sdk/lib/linux'),
join_paths(meson.current_source_dir(), 'include/hl2sdk/lib/public/linux32'),
]
2024-04-25 03:33:15 +03:00
sdk_deps += [
cpp.find_library('mathlib', dirs: [dirs_x86], required: false),
cpp.find_library('mathlib_i486', dirs: [dirs_x86], required: false),
cpp.find_library('tier0', dirs: [dirs_x86], required: false),
cpp.find_library('tier0_i486', dirs: [dirs_x86], required: false),
cpp.find_library('tier0_srv', dirs: [dirs_x86], required: false),
cpp.find_library('tier1', dirs: [dirs_x86], required: false),
cpp.find_library('tier1_i486', dirs: [dirs_x86], required: false),
cpp.find_library('vstdlib', dirs: [dirs_x86], required: false),
cpp.find_library('vstdlib_i486', dirs: [dirs_x86], required: false),
cpp.find_library('vstdlib_srv', dirs: [dirs_x86], required: false),
2024-04-25 03:33:15 +03:00
]
elif arch == 'x64'
dir_x64 = join_paths(meson.current_source_dir(), 'include/hl2sdk/lib/linux64')
sdk_deps += [
cpp.find_library('mathlib', dirs: [dir_x64], required: true),
2024-04-27 14:21:18 +03:00
cpp.find_library('tier0_srv', dirs: [dir_x64], required: true),
2024-04-25 03:33:15 +03:00
cpp.find_library('tier1', dirs: [dir_x64], required: true),
2024-04-27 14:21:18 +03:00
cpp.find_library('vstdlib_srv', dirs: [dir_x64], required: true),
2024-04-25 03:33:15 +03:00
]
endif
endif
add_project_arguments(cpp.get_supported_arguments(compiler_args), language: 'cpp')
add_project_link_arguments(cpp.get_supported_link_arguments(linker_args), language: 'cpp')
add_project_dependencies(sdk_deps, language: 'cpp')
subdir('src')