1*01826a49SYabin Cui# ############################################################################# 2*01826a49SYabin Cui# Copyright (c) 2018-present Dima Krasner <[email protected]> 3*01826a49SYabin Cui# lzutao <taolzu(at)gmail.com> 4*01826a49SYabin Cui# All rights reserved. 5*01826a49SYabin Cui# 6*01826a49SYabin Cui# This source code is licensed under both the BSD-style license (found in the 7*01826a49SYabin Cui# LICENSE file in the root directory of this source tree) and the GPLv2 (found 8*01826a49SYabin Cui# in the COPYING file in the root directory of this source tree). 9*01826a49SYabin Cui# ############################################################################# 10*01826a49SYabin Cui 11*01826a49SYabin Cuiproject('zstd', 12*01826a49SYabin Cui ['c', 'cpp'], 13*01826a49SYabin Cui license: ['BSD', 'GPLv2'], 14*01826a49SYabin Cui default_options : [ 15*01826a49SYabin Cui # There shouldn't be any need to force a C standard convention for zstd 16*01826a49SYabin Cui # but in case one would want that anyway, this can be done here. 17*01826a49SYabin Cui # 'c_std=gnu99', 18*01826a49SYabin Cui # c++11 standard is useful for pzstd 19*01826a49SYabin Cui 'cpp_std=c++11', 20*01826a49SYabin Cui 'buildtype=release', 21*01826a49SYabin Cui 'warning_level=3', 22*01826a49SYabin Cui # -Wdocumentation does not actually pass, nor do the test binaries, 23*01826a49SYabin Cui # so this isn't safe 24*01826a49SYabin Cui #'werror=true' 25*01826a49SYabin Cui ], 26*01826a49SYabin Cui version: run_command( 27*01826a49SYabin Cui find_program('GetZstdLibraryVersion.py'), '../../lib/zstd.h', 28*01826a49SYabin Cui check: true).stdout().strip(), 29*01826a49SYabin Cui meson_version: '>=0.50.0') 30*01826a49SYabin Cui 31*01826a49SYabin Cuicc = meson.get_compiler('c') 32*01826a49SYabin Cuicxx = meson.get_compiler('cpp') 33*01826a49SYabin Cuipkgconfig = import('pkgconfig') 34*01826a49SYabin Cuiwindows_mod = import('windows') 35*01826a49SYabin Cui 36*01826a49SYabin Cuihost_machine_os = host_machine.system() 37*01826a49SYabin Cuios_windows = 'windows' 38*01826a49SYabin Cuios_linux = 'linux' 39*01826a49SYabin Cuios_darwin = 'darwin' 40*01826a49SYabin Cuios_freebsd = 'freebsd' 41*01826a49SYabin Cuios_sun = 'sunos' 42*01826a49SYabin Cui 43*01826a49SYabin Cuicc_id = cc.get_id() 44*01826a49SYabin Cuicompiler_gcc = 'gcc' 45*01826a49SYabin Cuicompiler_clang = 'clang' 46*01826a49SYabin Cuicompiler_msvc = 'msvc' 47*01826a49SYabin Cui 48*01826a49SYabin Cuizstd_version = meson.project_version() 49*01826a49SYabin Cui 50*01826a49SYabin Cuizstd_libversion = zstd_version 51*01826a49SYabin Cui 52*01826a49SYabin Cui# ============================================================================= 53*01826a49SYabin Cui# Installation directories 54*01826a49SYabin Cui# ============================================================================= 55*01826a49SYabin Cui 56*01826a49SYabin Cuizstd_prefix = get_option('prefix') 57*01826a49SYabin Cuizstd_bindir = get_option('bindir') 58*01826a49SYabin Cuizstd_datadir = get_option('datadir') 59*01826a49SYabin Cuizstd_mandir = get_option('mandir') 60*01826a49SYabin Cuizstd_docdir = join_paths(zstd_datadir, 'doc', meson.project_name()) 61*01826a49SYabin Cui 62*01826a49SYabin Cui# ============================================================================= 63*01826a49SYabin Cui# Project options 64*01826a49SYabin Cui# ============================================================================= 65*01826a49SYabin Cui 66*01826a49SYabin Cui# Built-in options 67*01826a49SYabin Cuiuse_debug = get_option('debug') 68*01826a49SYabin Cuibuildtype = get_option('buildtype') 69*01826a49SYabin Cuidefault_library_type = get_option('default_library') 70*01826a49SYabin Cui 71*01826a49SYabin Cui# Custom options 72*01826a49SYabin Cuidebug_level = get_option('debug_level') 73*01826a49SYabin Cuilegacy_level = get_option('legacy_level') 74*01826a49SYabin Cuiuse_backtrace = get_option('backtrace') 75*01826a49SYabin Cuiuse_static_runtime = get_option('static_runtime') 76*01826a49SYabin Cui 77*01826a49SYabin Cuibin_programs = get_option('bin_programs') 78*01826a49SYabin Cuibin_contrib = get_option('bin_contrib') 79*01826a49SYabin Cuibin_tests = get_option('bin_tests') 80*01826a49SYabin Cui 81*01826a49SYabin Cuifeature_multi_thread = get_option('multi_thread') 82*01826a49SYabin Cuifeature_zlib = get_option('zlib') 83*01826a49SYabin Cuifeature_lzma = get_option('lzma') 84*01826a49SYabin Cuifeature_lz4 = get_option('lz4') 85*01826a49SYabin Cui 86*01826a49SYabin Cui# ============================================================================= 87*01826a49SYabin Cui# Dependencies 88*01826a49SYabin Cui# ============================================================================= 89*01826a49SYabin Cui 90*01826a49SYabin Cuilibm_dep = cc.find_library('m', required: false) 91*01826a49SYabin Cuithread_dep = dependency('threads', required: feature_multi_thread) 92*01826a49SYabin Cuiuse_multi_thread = thread_dep.found() 93*01826a49SYabin Cui# Arguments in dependency should be equivalent to those passed to pkg-config 94*01826a49SYabin Cuizlib_dep = dependency('zlib', required: feature_zlib) 95*01826a49SYabin Cuiuse_zlib = zlib_dep.found() 96*01826a49SYabin Cuilzma_dep = dependency('liblzma', required: feature_lzma) 97*01826a49SYabin Cuiuse_lzma = lzma_dep.found() 98*01826a49SYabin Cuilz4_dep = dependency('liblz4', required: feature_lz4) 99*01826a49SYabin Cuiuse_lz4 = lz4_dep.found() 100*01826a49SYabin Cui 101*01826a49SYabin Cui# ============================================================================= 102*01826a49SYabin Cui# Compiler flags 103*01826a49SYabin Cui# ============================================================================= 104*01826a49SYabin Cui 105*01826a49SYabin Cuiadd_project_arguments('-DXXH_NAMESPACE=ZSTD_', language: ['c']) 106*01826a49SYabin Cui 107*01826a49SYabin Cuipzstd_warning_flags = [] 108*01826a49SYabin Cuiif [compiler_gcc, compiler_clang].contains(cc_id) 109*01826a49SYabin Cui common_warning_flags = [ '-Wundef', '-Wshadow', '-Wcast-align', '-Wcast-qual' ] 110*01826a49SYabin Cui pzstd_warning_flags = ['-Wno-shadow', '-Wno-deprecated-declarations'] 111*01826a49SYabin Cui if cc_id == compiler_clang 112*01826a49SYabin Cui common_warning_flags += ['-Wconversion', '-Wno-sign-conversion', '-Wdocumentation'] 113*01826a49SYabin Cui endif 114*01826a49SYabin Cui cc_compile_flags = cc.get_supported_arguments(common_warning_flags + ['-Wstrict-prototypes']) 115*01826a49SYabin Cui cxx_compile_flags = cxx.get_supported_arguments(common_warning_flags) 116*01826a49SYabin Cui add_project_arguments(cc_compile_flags, language : 'c') 117*01826a49SYabin Cui add_project_arguments(cxx_compile_flags, language : 'cpp') 118*01826a49SYabin Cuielif cc_id == compiler_msvc 119*01826a49SYabin Cui msvc_compile_flags = [ '/D_UNICODE', '/DUNICODE' ] 120*01826a49SYabin Cui if use_multi_thread 121*01826a49SYabin Cui msvc_compile_flags += '/MP' 122*01826a49SYabin Cui endif 123*01826a49SYabin Cui if use_static_runtime 124*01826a49SYabin Cui msvc_compile_flags += '/MT' 125*01826a49SYabin Cui endif 126*01826a49SYabin Cui add_project_arguments(msvc_compile_flags, language: ['c', 'cpp']) 127*01826a49SYabin Cuiendif 128*01826a49SYabin Cui 129*01826a49SYabin Cui# ============================================================================= 130*01826a49SYabin Cui# Subdirs 131*01826a49SYabin Cui# ============================================================================= 132*01826a49SYabin Cui 133*01826a49SYabin Cuisubdir('lib') 134*01826a49SYabin Cui 135*01826a49SYabin Cuiif bin_programs or bin_tests 136*01826a49SYabin Cui subdir('programs') 137*01826a49SYabin Cuiendif 138*01826a49SYabin Cui 139*01826a49SYabin Cuiif bin_tests 140*01826a49SYabin Cui subdir('tests') 141*01826a49SYabin Cuiendif 142*01826a49SYabin Cui 143*01826a49SYabin Cuiif bin_contrib 144*01826a49SYabin Cui subdir('contrib') 145*01826a49SYabin Cuiendif 146