mirror of
https://github.com/facebook/zstd.git
synced 2025-07-29 11:21:22 +03:00
The `-Wl,-z,noexecstack` and `-Wa,--noexecstack` flags are already set for CMake, but not for Meson. This brings the flags to the Meson build as well. Note that this maintains the discrepancy in behavior between CMake and Meson when it comes to enabling ASM: on CMake, the ZSTD_HAS_NOEXECSTACK variable is set and these flags added for GCC/Clang and MinGW. Then later, the ZSTD_HAS_NOEXECSTACK variable is checked (along with some other conditions) to enable or disable ASM. However on Meson, this logic is restricted to simply checking for GCC/Clang. This patch maintains this behavior; noexecstack is dependent on GCC/Clang only.
157 lines
5.4 KiB
Meson
157 lines
5.4 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
|
|
noexecstack_flags = ['-Wa,--noexecstack' ]
|
|
noexecstack_link_flags = ['-Wl,-z,noexecstack']
|
|
cc_compile_flags = cc.get_supported_arguments(common_warning_flags + noexecstack_flags + ['-Wstrict-prototypes'])
|
|
cxx_compile_flags = cxx.get_supported_arguments(common_warning_flags + noexecstack_flags)
|
|
add_project_arguments(cc_compile_flags, language : 'c')
|
|
add_project_arguments(cxx_compile_flags, language : 'cpp')
|
|
cc_link_flags = cc.get_supported_link_arguments(noexecstack_link_flags)
|
|
cxx_link_flags = cxx.get_supported_link_arguments(noexecstack_link_flags)
|
|
add_project_link_arguments(cc_link_flags, language: 'c')
|
|
add_project_link_arguments(cxx_link_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
|