mirror of
				https://github.com/facebook/zstd.git
				synced 2025-11-04 00:02:59 -05:00 
			
		
		
		
	This matches the Makefile build. Due to one private xxhash symbol in use by the program, it recompiles a private copy of xxhash. Due to the test binaries making extensive (?) use of private symbols, it doesn't even attempt to link to shared libzstd, and instead, all of the original object files are added to libtestcommon itself for private linkage. This, too, matches the Makefile build. Ref. #2261
		
			
				
	
	
		
			149 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Meson
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			4.8 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 : [
 | 
						|
    'c_std=gnu99',
 | 
						|
    '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: 'DUMMY',
 | 
						|
  meson_version: '>=0.48.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_h_file = join_paths(meson.current_source_dir(), '../../lib/zstd.h')
 | 
						|
GetZstdLibraryVersion_py = find_program('GetZstdLibraryVersion.py', native : true)
 | 
						|
r = run_command(GetZstdLibraryVersion_py, zstd_h_file)
 | 
						|
if r.returncode() == 0
 | 
						|
  zstd_version = r.stdout().strip()
 | 
						|
  message('Project version is now: @0@'.format(zstd_version))
 | 
						|
else
 | 
						|
  error('Cannot find project version in @0@'.format(zstd_h_file))
 | 
						|
endif
 | 
						|
 | 
						|
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: bin_tests)
 | 
						|
thread_dep = dependency('threads', required: feature_multi_thread)
 | 
						|
use_multi_thread = thread_dep.found()
 | 
						|
# 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'])
 | 
						|
 | 
						|
if [compiler_gcc, compiler_clang].contains(cc_id)
 | 
						|
  common_warning_flags = [ '-Wundef', '-Wshadow', '-Wcast-align', '-Wcast-qual' ]
 | 
						|
  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
 | 
						|
  subdir('programs')
 | 
						|
endif
 | 
						|
 | 
						|
if bin_tests
 | 
						|
  subdir('tests')
 | 
						|
endif
 | 
						|
 | 
						|
if bin_contrib
 | 
						|
  subdir('contrib')
 | 
						|
endif
 |