xref: /aosp_15_r20/external/zstd/build/meson/meson.build (revision 01826a4963a0d8a59bc3812d29bdf0fb76416722)
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