yapb-noob-edition/meson.build

336 lines
8.7 KiB
Meson
Raw Normal View History

2020-06-12 18:52:38 +03:00
#
# YaPB - Counter-Strike Bot based on PODBot by Markus Klinge.
2024-02-24 02:20:02 +03:00
# Copyright © YaPB Project Developers <yapb@jeefo.net>.
2020-06-12 18:52:38 +03:00
#
# SPDX-License-Identifier: MIT
2020-06-12 18:52:38 +03:00
#
# version is now passed into the bot dll
project(
'yapb',
'cpp',
version: '4.5',
license: 'MIT',
default_options: [
'buildtype=release',
'b_ndebug=if-release',
'cpp_std=c++17',
'warning_level=3',
'werror=true',
'backend=ninja',
'optimization=3',
'default_library=static',
'cpp_eh=none',
'cpp_rtti=false',
2021-09-11 02:03:49 +03:00
'b_vscrt=static_from_buildtype',
2021-09-12 13:07:11 +03:00
'b_lto=true',
'b_lto_mode=default',
2021-09-12 16:29:49 +03:00
'b_lundef=true',
],
meson_version: '>=0.58.0')
2020-06-12 18:52:38 +03:00
find_program('ninja', required: true)
2020-06-12 18:52:38 +03:00
compiler= meson.get_compiler('cpp')
cross = meson.is_cross_build ()
os = host_machine.system()
cpu = host_machine.cpu_family()
cxx = compiler.get_id()
build_type = get_option ('buildtype')
2020-06-12 18:52:38 +03:00
opt_64bit = get_option('64bit')
opt_native = get_option('native')
opt_winxp = get_option('winxp')
opt_nosimd = get_option('nosimd')
opt_static_linkent = get_option('static_linkent')
# cpp and ldflags from scratch
cxxflags = []
ldflags = []
2020-06-12 18:52:38 +03:00
# custom flags
flags_versioned = ['-DVERSION_GENERATED']
# git is optional, but it's setups our version info
git = find_program('git', required: false)
if git.found()
run_command('git', 'config', '--global', '--add', 'safe.directory', '*', check: false)
2020-06-12 18:52:38 +03:00
# get the commit data
count = run_command('git', 'rev-list', '--count', 'HEAD', check: false).stdout().strip()
hash = run_command ('git', 'rev-parse', '--short', 'HEAD', check: false).stdout().strip()
author = run_command ('git', 'log', '--pretty="%ae"', '-1', check: false).stdout().strip()
2020-06-12 18:52:38 +03:00
hostname = find_program('hostname', required: false)
2020-06-12 18:52:38 +03:00
if hostname.found()
machine = run_command('hostname', check: false).stdout().strip()
else
machine = 'unknown'
endif
2020-06-12 18:52:38 +03:00
bot_version = meson.project_version()
cxx_version = compiler.version()
if os == 'windows'
winver = ','.join(bot_version.split('.'))
else
winver = bot_version
endif
2020-06-12 18:52:38 +03:00
cxxflags += flags_versioned
version_data = configuration_data()
2020-06-12 18:52:38 +03:00
version_data.set('BUILD_COUNT', count)
version_data.set('BUILD_HASH', hash)
version_data.set('BUILD_AUTHOR', author)
version_data.set('BUILD_MACHINE', machine)
version_data.set('BUILD_VERSION', bot_version)
version_data.set('BUILD_WINVER', winver)
version_data.set('BUILD_COMPILER', '@0@ @1@'.format(cxx, cxx_version))
2020-06-12 18:52:38 +03:00
configure_file(input: 'inc/version.h.in', output: 'version.build.h', configuration: version_data)
endif
2020-06-12 18:52:38 +03:00
# define crlib native build
if opt_native
cxxflags += ['-DCR_NATIVE_BUILD']
endif
# globally disables all simd optimizations
if opt_nosimd
cxxflags += ['-DCR_DISABLE_SIMD']
endif
# configure flags gcc and clang
if cxx == 'clang' or cxx == 'gcc'
cxxflags += [
'-pipe',
'-fno-threadsafe-statics',
'-pthread'
]
2021-09-11 02:03:49 +03:00
if not opt_native and cpu != 'arm' and not cpu.startswith('ppc')
cxxflags += '-mtune=generic'
endif
if cpu == 'aarch64'
cxxflags += [
'-march=armv8-a+fp+simd',
]
elif cpu != 'arm' and not cpu.startswith('ppc')
if not opt_nosimd
cxxflags += [
'-msse', '-msse2', '-msse3', '-msse3', '-mfpmath=sse'
]
endif
if opt_native
cxxflags += '-march=native'
elif opt_64bit
cxxflags += '-march=x86-64'
else
cxxflags += '-march=i686'
endif
endif
cxx_version = compiler.version()
2021-09-11 02:03:49 +03:00
# setup optimization flags
if build_type == 'release'
cxxflags += [
'-funroll-loops', '-fomit-frame-pointer', '-fno-stack-protector', '-fvisibility=hidden', '-fvisibility-inlines-hidden', '-fno-math-errno'
]
if os != 'darwin' and os != 'windows' and cpu != 'aarch64' and cpu != 'arm' and not cpu.startswith('ppc')
if not opt_static_linkent
cxxflags += [
'-fdata-sections',
'-ffunction-sections',
'-fcf-protection=none',
'-fno-plt',
'-Wa,--noexecstack'
]
2021-09-11 02:03:49 +03:00
ldflags += [
'-Wl,--version-script=' + meson.project_source_root() + '/ext/ldscripts/version.lds',
'-Wl,--gc-sections',
'-Wl,-z,noexecstack'
]
else
cxxflags += ['-DLINKENT_STATIC']
endif
if cxx == 'gcc'
cxxflags += [
'-fgraphite-identity', '-floop-nest-optimize'
]
2021-09-11 02:03:49 +03:00
ldflags += [
'-fgraphite-identity', '-floop-nest-optimize'
2021-09-11 02:03:49 +03:00
]
endif
endif
2023-07-03 17:29:08 +03:00
# disable lto partitioning on gcc to get symver working
if os != 'darwin' and os != 'windows' and cxx == 'gcc' and cxx_version.version_compare('<11.0')
ldflags += [
'-flto-partition=none'
]
endif
else
cxxflags += ['-g3', '-ggdb', '-DDEBUG']
endif
# special script for mingw-64 builds
if os == 'windows' and cxx == 'gcc' and cxx_version.version_compare('<12.0')
ldflags += [
2024-02-24 02:20:02 +03:00
'-Xlinker', '--script', '-Xlinker', meson.project_source_root() + '/ext/ldscripts/i386pe.lds'
]
endif
2020-06-12 18:52:38 +03:00
# always statically link libgcc on non darwin platforms
if os != 'darwin'
if cross or (cxx != 'clang' and os == 'windows')
ldflags += '-static-libgcc'
endif
else
cxxflags += '-mmacosx-version-min=10.9'
ldflags += [
'-lstdc++', '-mmacosx-version-min=10.9'
]
endif
2021-09-11 02:03:49 +03:00
# by default we buid 32bit binaries
if not opt_64bit and cpu != 'aarch64' and cpu != 'arm' and not cpu.startswith('ppc')
cxxflags += '-m32'
ldflags += '-m32'
if cross and cxx == 'clang' and os == 'windows'
ldflags += '-Wl,/MACHINE:X86'
cxxflags += '-Wl,/MACHINE:X86'
2021-09-11 02:03:49 +03:00
endif
2023-04-25 00:06:24 +03:00
else
cxxflags += '-fPIC'
ldflags += '-fPIC'
endif
2021-09-11 02:03:49 +03:00
# link needed libraries
if os == 'linux'
ldflags += [
2023-06-05 20:44:33 +03:00
'-lm', '-ldl', '-lpthread'
]
elif os == 'windows'
if cxx == 'gcc' or (cross and cxx == 'clang')
ldflags += '-Wl,--kill-at'
endif
ldflags += [
'-luser32', '-lws2_32'
]
endif
elif os == 'windows' and (cxx =='msvc' or cxx == 'clang-cl')
# define for building on winxp on msvc
if opt_winxp
cxxflags += [
'/TP', '/DCR_HAS_WINXP_SUPPORT', '/D_WIN32_WINNT=0x0501', '/D_USING_V110_SDK71_'
]
ldflags += ['/SUBSYSTEM:WINDOWS,5.01']
endif
if not opt_64bit and cxx == 'clang'
cxxflags += '/MACHINE:X86'
ldflags += '/MACHINE:X86'
endif
2020-06-12 18:52:38 +03:00
# minor optimizations for release build
if build_type == 'release'
cxxflags += [
'/Zc:threadSafeInit-', '/GS-', '/Ob2', '/Oy', '/Oi', '/Ot', '/fp:precise', '/GF', '/Gw', '/arch:SSE2', '/Zi', '/guard:ehcont-', '/guard:cf-'
]
# add wpo if msvc
if cxx == 'msvc'
cxxflags += [
'/GL', '/DEBUG'
]
endif
# add linker flags
ldflags += [
'/OPT:REF,ICF', '/GUARD:NO ', '/LTCG', 'delayimp.lib', '/DELAYLOAD:user32.dll', '/DELAYLOAD:ws2_32.dll',
]
endif
ldflags += [
'user32.lib', 'ws2_32.lib'
]
2020-06-12 18:52:38 +03:00
endif
# pass our hell to meson
add_global_arguments(cxxflags, language: 'cpp')
add_global_link_arguments(ldflags, language: 'cpp')
2020-06-12 18:52:38 +03:00
# add the sources
sources = files(
'src/analyze.cpp',
'src/botlib.cpp',
'src/chatlib.cpp',
'src/combat.cpp',
'src/config.cpp',
'src/control.cpp',
'src/engine.cpp',
'src/fakeping.cpp',
'src/graph.cpp',
'src/hooks.cpp',
'src/linkage.cpp',
'src/manager.cpp',
'src/module.cpp',
'src/message.cpp',
'src/navigate.cpp',
'src/planner.cpp',
'src/practice.cpp',
aim: verify camp angles from nav data before using them aim: tweaked a bit grenade handling, so bots should use them more aim: reduce time between selecting grenade and throwing it away aim: removed hacks in look angles code, due to removing yb_whoose_your_daddy cvar aim: use direct enemy origin from visibility check, and not re-calculate it aim: update enemy prediction, so it now depends on frame interval for a bot aim: additional height offset are tweaked, and now used only for difficulty 4 nav: tweaked a bit player avoidance code, and it's not preventing bot from checking terrain nav: do not check banned nodes, when bucket sizes re too low nav: cover nodes are now selected depending on total bots on server nav: let bot enter pause task after long jump nav: extend velocity by a little for a jump, like it was in first versions of bot nav: stuck checking is now taken in account lower minimal speed if bot is ducking fix: navigation reachability timers, so bots will have correct current node index while camping fix: bots are unable to finish pickup or destroy breakable task, if target is not reachable fix: cover nodes are now calculated as they should fix: manual calling bots add_[t/ct] now ignores yb_join_team cvar bot: tweaked a little difficulty levels, so level 4 is now nightmare level, and 3 is very heard bot: minor refactoring and moving functions to correct source file bot: add yb_economics_disrespect_percent, so bots can ignore economics and buy more different guns bot: add yb_check_darkness that allows to disable darkness checks for bot, thus disallowing usage of flashlight bot: camp buttons are now lightly depends on bot health chat: welcome chat message from bots is now sent during first freeze time period crlib: switch over to stdint.h and remove crlib-own types crlib: fixed alignment in sse code
2023-04-07 14:46:49 +03:00
'src/sounds.cpp',
'src/storage.cpp',
'src/support.cpp',
'src/tasks.cpp',
'src/vision.cpp',
'src/vistable.cpp'
2020-06-12 18:52:38 +03:00
)
# add the include directories
includes = include_directories([
'.', 'inc', 'ext', 'ext/crlib', 'ext/linkage'
2020-06-12 18:52:38 +03:00
], is_system: true)
# if have git and on windows add windows-specific version info
if os == 'windows' and git.found()
sources += import('windows').compile_resources(
'vc/yapb.rc',
include_directories: includes,
args: flags_versioned
)
2020-06-12 18:52:38 +03:00
endif
target_name = meson.project_name()
# xash specific postfix for binaries
if cpu == 'aarch64'
target_name += '_arm64'
elif opt_64bit
target_name += '_amd64'
endif
# instruct meson we're want our little shared lib bot
shared_library(
target_name,
sources,
include_directories: includes,
gnu_symbol_visibility: 'hidden',
name_prefix: ''
)
2020-11-11 16:54:58 +03:00
run_target('package',
command: ['python3', meson.project_source_root() + '/package.py', '@0@.@1@'.format(bot_version, count)])