175 lines
5.5 KiB
Meson
175 lines
5.5 KiB
Meson
|
# Copyright (C) 2019-2023 by Sukchan Lee <acetcom@gmail.com>
|
||
|
|
||
|
# This file is part of Open5GS.
|
||
|
|
||
|
# This program is free software: you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU Affero General Public License as published by
|
||
|
# the Free Software Foundation, either version 3 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||
|
|
||
|
project('open5gs', 'c', 'cpp',
|
||
|
version : '2.7.0',
|
||
|
license : 'AGPL-3.0-or-later',
|
||
|
meson_version : '>= 0.43.0',
|
||
|
default_options : [
|
||
|
'warning_level=1',
|
||
|
'c_std=gnu89',
|
||
|
],
|
||
|
)
|
||
|
|
||
|
libogslib_version = '2.7.0'
|
||
|
|
||
|
prefix = get_option('prefix')
|
||
|
bindir = join_paths(prefix, get_option('bindir'))
|
||
|
libdir = join_paths(prefix, get_option('libdir'))
|
||
|
sysconfdir = join_paths(prefix, get_option('sysconfdir'))
|
||
|
localstatedir = join_paths(prefix, get_option('localstatedir'))
|
||
|
|
||
|
open5gs_build_dir = meson.current_build_dir()
|
||
|
|
||
|
cc = meson.get_compiler('c')
|
||
|
host_system = host_machine.system()
|
||
|
|
||
|
git = find_program('git', required: false)
|
||
|
#python = import('python')
|
||
|
#python3 = python.find_installation('python3')
|
||
|
python3 = find_program('python3', 'python')
|
||
|
if meson.version().version_compare('>=0.55.0')
|
||
|
python3_exe = join_paths(python3.full_path())
|
||
|
else
|
||
|
python3_exe = join_paths(python3.path())
|
||
|
endif
|
||
|
mkdir_p = 'import os; os.makedirs("@0@", exist_ok=True) if not os.environ.get("DESTDIR") else False;'
|
||
|
symlink = 'import os; os.symlink("@0@", "@1@") if not os.environ.get("DESTDIR") and not os.path.islink("@1@") else False;'
|
||
|
install_conf = 'import os; import shutil; shutil.copy("@0@", "@1@") if not os.environ.get("DESTDIR") and not os.path.isfile(os.path.join("@1@", os.path.split("@0@")[1])) else False;'
|
||
|
cppcheck = find_program('cppcheck', required: false)
|
||
|
clangtidy = find_program('run-clang-tidy', required: false) # requires clang-tools package
|
||
|
if clangtidy.found() != true
|
||
|
clangtidy = find_program('clang-tidy', required: false)
|
||
|
endif
|
||
|
|
||
|
meson.add_install_script(python3_exe, '-c',
|
||
|
mkdir_p.format(join_paths(localstatedir, 'log', 'open5gs')))
|
||
|
|
||
|
# Compiler flags
|
||
|
if cc.get_id() == 'gcc' or cc.get_id() == 'clang'
|
||
|
possible_cc_flags = [
|
||
|
'-Wextra',
|
||
|
'-Wlogical-op',
|
||
|
'-Werror=pointer-arith',
|
||
|
'-Werror=init-self',
|
||
|
'-Wfloat-equal',
|
||
|
'-Wsuggest-attribute=noreturn',
|
||
|
'-Werror=missing-prototypes',
|
||
|
'-Werror=missing-declarations',
|
||
|
'-Werror=implicit-function-declaration',
|
||
|
'-Werror=return-type',
|
||
|
'-Werror=incompatible-pointer-types',
|
||
|
'-Werror=format=2',
|
||
|
'-Wstrict-prototypes',
|
||
|
'-Wredundant-decls',
|
||
|
'-Wimplicit-fallthrough=5',
|
||
|
'-Wendif-labels',
|
||
|
'-Wstrict-aliasing=3',
|
||
|
'-Wwrite-strings',
|
||
|
'-Werror=overflow',
|
||
|
'-Werror=shift-count-overflow',
|
||
|
'-Werror=shift-overflow=2',
|
||
|
'-Wdate-time',
|
||
|
'-Wnested-externs',
|
||
|
'-Wunused',
|
||
|
'-Wduplicated-branches',
|
||
|
'-Wmisleading-indentation',
|
||
|
|
||
|
'-Wno-sign-compare',
|
||
|
'-Wno-unused-parameter',
|
||
|
|
||
|
'-ffast-math',
|
||
|
'-fdiagnostics-show-option',
|
||
|
## TODO : '-fvisibility=hidden',
|
||
|
'-fstack-protector',
|
||
|
'-fstack-protector-strong',
|
||
|
'--param=ssp-buffer-size=4',
|
||
|
]
|
||
|
|
||
|
if cc.get_id() == 'clang'
|
||
|
possible_cc_flags += [
|
||
|
'-Wno-typedef-redefinition',
|
||
|
'-Wno-gnu-variable-sized-type-not-at-end',
|
||
|
]
|
||
|
endif
|
||
|
|
||
|
if get_option('buildtype') != 'debug'
|
||
|
possible_cc_flags += [
|
||
|
'-ffunction-sections',
|
||
|
'-fdata-sections',
|
||
|
]
|
||
|
endif
|
||
|
else
|
||
|
possible_cc_flags = []
|
||
|
endif
|
||
|
|
||
|
add_project_arguments(
|
||
|
cc.get_supported_arguments(possible_cc_flags),
|
||
|
language : 'c')
|
||
|
|
||
|
subdir('configs')
|
||
|
subdir('lib')
|
||
|
subdir('src')
|
||
|
subdir('misc')
|
||
|
# Don't build the tests unless we can run them (either natively or in an exe wrapper)
|
||
|
build_tests = not meson.is_cross_build() or (meson.is_cross_build() and meson.has_exe_wrapper())
|
||
|
if build_tests
|
||
|
subdir('tests')
|
||
|
endif
|
||
|
|
||
|
# Check if the 'fuzzing' option is defined
|
||
|
if get_option('fuzzing')
|
||
|
subdir('tests/fuzzing')
|
||
|
endif
|
||
|
|
||
|
message('\n'.join([
|
||
|
'',
|
||
|
' prefix: ' + prefix,
|
||
|
' libdir: ' + libdir,
|
||
|
' bindir: ' + bindir,
|
||
|
' sysconfdir: ' + sysconfdir,
|
||
|
' localstatedir: ' + localstatedir,
|
||
|
' build location: ' + meson.current_build_dir(),
|
||
|
' source location: ' + meson.current_source_dir(),
|
||
|
' compiler: ' + cc.get_id(),
|
||
|
' debugging support: ' + get_option('buildtype'),
|
||
|
'',
|
||
|
]))
|
||
|
|
||
|
|
||
|
if cppcheck.found()
|
||
|
run_target('analyze-cppcheck',
|
||
|
command : [ 'misc/static-code-analyze.sh',
|
||
|
meson.version().version_compare('>=0.55.0') ?
|
||
|
cppcheck.full_path() : cppcheck.path(),
|
||
|
meson.current_build_dir(),
|
||
|
meson.current_source_dir()
|
||
|
]
|
||
|
)
|
||
|
endif
|
||
|
|
||
|
if clangtidy.found()
|
||
|
run_target('analyze-clang-tidy',
|
||
|
command : [ 'misc/static-code-analyze.sh',
|
||
|
meson.version().version_compare('>=0.55.0') ?
|
||
|
clangtidy.full_path() : clangtidy.path(),
|
||
|
meson.current_build_dir(),
|
||
|
meson.current_source_dir()
|
||
|
]
|
||
|
)
|
||
|
endif
|