mirror of
https://github.com/facebook/zstd.git
synced 2025-03-06 16:56:49 +02:00
Meson always returns -pthread in dependency('threads') on non-MSVC compilers. On Windows we use Windows threading primitives, so we don't need this. Avoid adding -pthread to libzstd's link flags, either as a Meson subproject or via pkg-config Libs.private, so the application doesn't inadvertently depend on winpthreads. Add a Meson MinGW cross-compile CI test that checks for this. It turns out that pzstd fails to build in that environment, so have the test skip building contrib for now.
151 lines
5.0 KiB
Meson
151 lines
5.0 KiB
Meson
# #############################################################################
|
|
# Copyright (c) 2018-present Dima Krasner <dima@dimakrasner.com>
|
|
# lzutao <taolzu(at)gmail.com>
|
|
# All rights reserved.
|
|
#
|
|
# This source code is licensed under both the BSD-style license (found in the
|
|
# LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
|
# in the COPYING file in the root directory of this source tree).
|
|
# #############################################################################
|
|
|
|
project('zstd',
|
|
['c', 'cpp'],
|
|
license: ['BSD', 'GPLv2'],
|
|
default_options : [
|
|
# There shouldn't be any need to force a C standard convention for zstd
|
|
# but in case one would want that anyway, this can be done here.
|
|
# 'c_std=gnu99',
|
|
# c++11 standard is useful for pzstd
|
|
'cpp_std=c++11',
|
|
'buildtype=release',
|
|
'warning_level=3',
|
|
# -Wdocumentation does not actually pass, nor do the test binaries,
|
|
# so this isn't safe
|
|
#'werror=true'
|
|
],
|
|
version: run_command(
|
|
find_program('GetZstdLibraryVersion.py'), '../../lib/zstd.h',
|
|
check: true).stdout().strip(),
|
|
meson_version: '>=0.50.0')
|
|
|
|
cc = meson.get_compiler('c')
|
|
cxx = meson.get_compiler('cpp')
|
|
pkgconfig = import('pkgconfig')
|
|
windows_mod = import('windows')
|
|
|
|
host_machine_os = host_machine.system()
|
|
os_windows = 'windows'
|
|
os_linux = 'linux'
|
|
os_darwin = 'darwin'
|
|
os_freebsd = 'freebsd'
|
|
os_sun = 'sunos'
|
|
|
|
cc_id = cc.get_id()
|
|
compiler_gcc = 'gcc'
|
|
compiler_clang = 'clang'
|
|
compiler_msvc = 'msvc'
|
|
|
|
zstd_version = meson.project_version()
|
|
|
|
zstd_libversion = zstd_version
|
|
|
|
# =============================================================================
|
|
# Installation directories
|
|
# =============================================================================
|
|
|
|
zstd_prefix = get_option('prefix')
|
|
zstd_bindir = get_option('bindir')
|
|
zstd_datadir = get_option('datadir')
|
|
zstd_mandir = get_option('mandir')
|
|
zstd_docdir = join_paths(zstd_datadir, 'doc', meson.project_name())
|
|
|
|
# =============================================================================
|
|
# Project options
|
|
# =============================================================================
|
|
|
|
# Built-in options
|
|
use_debug = get_option('debug')
|
|
buildtype = get_option('buildtype')
|
|
default_library_type = get_option('default_library')
|
|
|
|
# Custom options
|
|
debug_level = get_option('debug_level')
|
|
legacy_level = get_option('legacy_level')
|
|
use_backtrace = get_option('backtrace')
|
|
use_static_runtime = get_option('static_runtime')
|
|
|
|
bin_programs = get_option('bin_programs')
|
|
bin_contrib = get_option('bin_contrib')
|
|
bin_tests = get_option('bin_tests')
|
|
|
|
feature_multi_thread = get_option('multi_thread')
|
|
feature_zlib = get_option('zlib')
|
|
feature_lzma = get_option('lzma')
|
|
feature_lz4 = get_option('lz4')
|
|
|
|
# =============================================================================
|
|
# Dependencies
|
|
# =============================================================================
|
|
|
|
libm_dep = cc.find_library('m', required: false)
|
|
if host_machine_os == os_windows
|
|
thread_dep = dependency('', required: false)
|
|
use_multi_thread = not feature_multi_thread.disabled()
|
|
else
|
|
thread_dep = dependency('threads', required: feature_multi_thread)
|
|
use_multi_thread = thread_dep.found()
|
|
endif
|
|
# Arguments in dependency should be equivalent to those passed to pkg-config
|
|
zlib_dep = dependency('zlib', required: feature_zlib)
|
|
use_zlib = zlib_dep.found()
|
|
lzma_dep = dependency('liblzma', required: feature_lzma)
|
|
use_lzma = lzma_dep.found()
|
|
lz4_dep = dependency('liblz4', required: feature_lz4)
|
|
use_lz4 = lz4_dep.found()
|
|
|
|
# =============================================================================
|
|
# Compiler flags
|
|
# =============================================================================
|
|
|
|
add_project_arguments('-DXXH_NAMESPACE=ZSTD_', language: ['c'])
|
|
|
|
pzstd_warning_flags = []
|
|
if [compiler_gcc, compiler_clang].contains(cc_id)
|
|
common_warning_flags = [ '-Wundef', '-Wshadow', '-Wcast-align', '-Wcast-qual' ]
|
|
pzstd_warning_flags = ['-Wno-shadow', '-Wno-deprecated-declarations']
|
|
if cc_id == compiler_clang
|
|
common_warning_flags += ['-Wconversion', '-Wno-sign-conversion', '-Wdocumentation']
|
|
endif
|
|
cc_compile_flags = cc.get_supported_arguments(common_warning_flags + ['-Wstrict-prototypes'])
|
|
cxx_compile_flags = cxx.get_supported_arguments(common_warning_flags)
|
|
add_project_arguments(cc_compile_flags, language : 'c')
|
|
add_project_arguments(cxx_compile_flags, language : 'cpp')
|
|
elif cc_id == compiler_msvc
|
|
msvc_compile_flags = [ '/D_UNICODE', '/DUNICODE' ]
|
|
if use_multi_thread
|
|
msvc_compile_flags += '/MP'
|
|
endif
|
|
if use_static_runtime
|
|
msvc_compile_flags += '/MT'
|
|
endif
|
|
add_project_arguments(msvc_compile_flags, language: ['c', 'cpp'])
|
|
endif
|
|
|
|
# =============================================================================
|
|
# Subdirs
|
|
# =============================================================================
|
|
|
|
subdir('lib')
|
|
|
|
if bin_programs or bin_tests
|
|
subdir('programs')
|
|
endif
|
|
|
|
if bin_tests
|
|
subdir('tests')
|
|
endif
|
|
|
|
if bin_contrib
|
|
subdir('contrib')
|
|
endif
|