Files
cpp-project-template/third_party/microprofile/meson.build
tqcq c8b9782baa
Some checks failed
sm-rpc / build (Debug, aarch64-linux-gnu) (push) Failing after 13m15s
sm-rpc / build (Release, mipsel-linux-gnu) (push) Failing after 13m1s
sm-rpc / build (Release, host.gcc) (push) Failing after 13m14s
sm-rpc / build (Release, arm-linux-gnueabihf) (push) Failing after 13m35s
sm-rpc / build (Release, aarch64-linux-gnu) (push) Failing after 13m56s
sm-rpc / build (Debug, mipsel-linux-gnu) (push) Failing after 14m22s
sm-rpc / build (Debug, host.gcc) (push) Failing after 14m49s
sm-rpc / build (Debug, arm-linux-gnueabihf) (push) Failing after 15m13s
feat add microprile, remove prometheus
2025-08-25 11:23:55 +08:00

121 lines
3.0 KiB
Meson

# SPDX-FileCopyrightText: 2021 Andrea Pappacoda <andrea@pappacoda.it>
#
# SPDX-License-Identifier: MIT
project(
'microprofile',
'cpp',
default_options: [
'warning_level=3',
'b_lto=true',
'b_ndebug=if-release',
'cpp_std=c++11'
],
license: 'MIT',
meson_version: '>=0.46.0'
)
# Dependencies
deps = [dependency('threads')]
extra_args = []
compiler = meson.get_compiler('cpp')
stb_dep = dependency('stb', required: false)
if stb_dep.found()
deps += stb_dep
extra_args += '-DMICROPROFILE_SYSTEM_STB'
endif
if host_machine.system() == 'windows'
deps += compiler.find_library('ws2_32')
endif
# Check if -latomic is needed - https://github.com/pistacheio/pistache/blob/8545c0ca5a65fcc2415bf3f886e9f9f0699fd4ff/meson.build#L45
compiler_id = compiler.get_id()
cxx_atomics_check_code = '''
#include <atomic>
std::atomic<int> x;
std::atomic<short> y;
std::atomic<char> z;
int main() {
++z;
++y;
return ++x;
}
'''
has_working_cxx_atomics = compiler.links(cxx_atomics_check_code, name: 'std::atomic')
if (compiler_id == 'clang' or compiler_id == 'gcc') and not has_working_cxx_atomics
libatomic_dep = compiler.find_library('atomic')
has_working_cxx_atomics = compiler.links(cxx_atomics_check_code, dependencies: libatomic_dep, name: 'std::atomic with libatomic')
assert(has_working_cxx_atomics, 'Host compiler must support std::atomic')
deps += libatomic_dep
endif
cxx_atomics64_check_code = '''
#include <atomic>
#include <cstdint>
std::atomic<uint64_t> x (0);
int main() {
uint64_t i = x.load(std::memory_order_relaxed);
(void)i;
return 0;
}
'''
has_working_cxx_atomics64 = compiler.links(cxx_atomics64_check_code, name: 'std::atomic<uint64_t>')
if (compiler_id == 'clang' or compiler_id == 'gcc') and not has_working_cxx_atomics64
libatomic_dep = compiler.find_library('atomic')
has_working_cxx_atomics = compiler.links(cxx_atomics64_check_code, dependencies: libatomic_dep, name: 'std::atomic<uint64_t> with libatomic')
assert(has_working_cxx_atomics, 'Host compiler must support 64-bit std::atomic')
deps += libatomic_dep
endif
include_dir = include_directories('.')
# Custom config
if get_option('microprofile_use_config')
extra_args += '-DMICROPROFILE_USE_CONFIG'
install_headers('microprofile.config.h')
endif
# Main build target
libmicroprofile = library(
'microprofile',
'microprofile.cpp',
cpp_args: extra_args,
dependencies: deps,
include_directories: include_dir,
install: true
)
# Headers and pkg-config installation
install_headers(
'microprofile.h',
'microprofile_html.h'
)
import('pkgconfig').generate(
libmicroprofile,
description: 'microprofile is an embeddable profiler',
extra_cflags: extra_args,
url: 'https://github.com/jonasmr/microprofile'
)
# Declaring the dependency so that microprofile can be used as a subproject
microprofile_dep = declare_dependency(
compile_args: extra_args,
include_directories: include_dir,
link_with: libmicroprofile
)
if meson.version().version_compare('>=0.54.0')
meson.override_dependency('microprofile', microprofile_dep)
endif