xref: /aosp_15_r20/external/zstd/build/meson/lib/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 Cuizstd_rootdir = '../../..'
12*01826a49SYabin Cui
13*01826a49SYabin Cuilibzstd_includes = [include_directories(join_paths(zstd_rootdir,'lib'),
14*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/common'),
15*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress'),
16*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/decompress'),
17*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/dictBuilder'))]
18*01826a49SYabin Cui
19*01826a49SYabin Cuilibzstd_sources = [join_paths(zstd_rootdir, 'lib/common/entropy_common.c'),
20*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/common/fse_decompress.c'),
21*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/common/threading.c'),
22*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/common/pool.c'),
23*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/common/zstd_common.c'),
24*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/common/error_private.c'),
25*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/common/xxhash.c'),
26*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/hist.c'),
27*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/fse_compress.c'),
28*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/huf_compress.c'),
29*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_compress.c'),
30*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_compress_literals.c'),
31*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_compress_sequences.c'),
32*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_compress_superblock.c'),
33*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstdmt_compress.c'),
34*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_fast.c'),
35*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_double_fast.c'),
36*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_lazy.c'),
37*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_opt.c'),
38*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/compress/zstd_ldm.c'),
39*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/decompress/huf_decompress.c'),
40*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/decompress/zstd_decompress.c'),
41*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/decompress/zstd_decompress_block.c'),
42*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/decompress/zstd_ddict.c'),
43*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/dictBuilder/cover.c'),
44*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/dictBuilder/fastcover.c'),
45*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/dictBuilder/divsufsort.c'),
46*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/dictBuilder/zdict.c')]
47*01826a49SYabin Cui
48*01826a49SYabin Cui# really we need anything that defines __GNUC__ as that is what ZSTD_ASM_SUPPORTED is gated on
49*01826a49SYabin Cui# but these are the two compilers that are supported in tree and actually handle this correctly
50*01826a49SYabin Cui# Otherwise, explicitly disable assembly.
51*01826a49SYabin Cuiif [compiler_gcc, compiler_clang].contains(cc_id)
52*01826a49SYabin Cui  libzstd_sources += join_paths(zstd_rootdir, 'lib/decompress/huf_decompress_amd64.S')
53*01826a49SYabin Cuielse
54*01826a49SYabin Cui  add_project_arguments('-DZSTD_DISABLE_ASM', language: 'c')
55*01826a49SYabin Cuiendif
56*01826a49SYabin Cui
57*01826a49SYabin Cui# Explicit define legacy support
58*01826a49SYabin Cuiadd_project_arguments('-DZSTD_LEGACY_SUPPORT=@0@'.format(legacy_level),
59*01826a49SYabin Cui  language: 'c')
60*01826a49SYabin Cui
61*01826a49SYabin Cuiif legacy_level == 0
62*01826a49SYabin Cui  message('Legacy support: DISABLED')
63*01826a49SYabin Cuielse
64*01826a49SYabin Cui  # See ZSTD_LEGACY_SUPPORT of lib/README.md
65*01826a49SYabin Cui  message('Enable legacy support back to version 0.@0@'.format(legacy_level))
66*01826a49SYabin Cui
67*01826a49SYabin Cui  libzstd_includes += [ include_directories(join_paths(zstd_rootdir, 'lib/legacy')) ]
68*01826a49SYabin Cui  foreach i : [1, 2, 3, 4, 5, 6, 7]
69*01826a49SYabin Cui    if legacy_level <= i
70*01826a49SYabin Cui      libzstd_sources += join_paths(zstd_rootdir, 'lib/legacy/zstd_v0@[email protected]'.format(i))
71*01826a49SYabin Cui    endif
72*01826a49SYabin Cui  endforeach
73*01826a49SYabin Cuiendif
74*01826a49SYabin Cui
75*01826a49SYabin Cuilibzstd_deps = []
76*01826a49SYabin Cuiif use_multi_thread
77*01826a49SYabin Cui  message('Enable multi-threading support')
78*01826a49SYabin Cui  add_project_arguments('-DZSTD_MULTITHREAD', language: 'c')
79*01826a49SYabin Cui  libzstd_deps = [ thread_dep ]
80*01826a49SYabin Cuiendif
81*01826a49SYabin Cui
82*01826a49SYabin Cuilibzstd_c_args = []
83*01826a49SYabin Cuiif cc_id == compiler_msvc
84*01826a49SYabin Cui  if default_library_type != 'static'
85*01826a49SYabin Cui    libzstd_sources += [windows_mod.compile_resources(
86*01826a49SYabin Cui      join_paths(zstd_rootdir, 'build/VS2010/libzstd-dll/libzstd-dll.rc'),
87*01826a49SYabin Cui      include_directories: libzstd_includes)]
88*01826a49SYabin Cui    libzstd_c_args += ['-DZSTD_DLL_EXPORT=1',
89*01826a49SYabin Cui      '-DZSTD_HEAPMODE=0',
90*01826a49SYabin Cui      '-D_CONSOLE',
91*01826a49SYabin Cui      '-D_CRT_SECURE_NO_WARNINGS']
92*01826a49SYabin Cui  else
93*01826a49SYabin Cui    libzstd_c_args += ['-DZSTD_HEAPMODE=0',
94*01826a49SYabin Cui      '-D_CRT_SECURE_NO_WARNINGS']
95*01826a49SYabin Cui  endif
96*01826a49SYabin Cuiendif
97*01826a49SYabin Cui
98*01826a49SYabin Cuimingw_ansi_stdio_flags = []
99*01826a49SYabin Cuiif host_machine_os == os_windows and cc_id == compiler_gcc
100*01826a49SYabin Cui  mingw_ansi_stdio_flags = [ '-D__USE_MINGW_ANSI_STDIO' ]
101*01826a49SYabin Cuiendif
102*01826a49SYabin Cuilibzstd_c_args += mingw_ansi_stdio_flags
103*01826a49SYabin Cui
104*01826a49SYabin Cuilibzstd_debug_cflags = []
105*01826a49SYabin Cuiif use_debug
106*01826a49SYabin Cui  libzstd_c_args += '-DDEBUGLEVEL=@0@'.format(debug_level)
107*01826a49SYabin Cui  if cc_id == compiler_gcc or cc_id == compiler_clang
108*01826a49SYabin Cui    libzstd_debug_cflags = ['-Wstrict-aliasing=1', '-Wswitch-enum',
109*01826a49SYabin Cui      '-Wdeclaration-after-statement', '-Wstrict-prototypes',
110*01826a49SYabin Cui      '-Wundef', '-Wpointer-arith', '-Wvla',
111*01826a49SYabin Cui      '-Wformat=2', '-Winit-self', '-Wfloat-equal', '-Wwrite-strings',
112*01826a49SYabin Cui      '-Wredundant-decls', '-Wmissing-prototypes', '-Wc++-compat']
113*01826a49SYabin Cui  endif
114*01826a49SYabin Cuiendif
115*01826a49SYabin Cuilibzstd_c_args += cc.get_supported_arguments(libzstd_debug_cflags)
116*01826a49SYabin Cui
117*01826a49SYabin Cuilibzstd = library('zstd',
118*01826a49SYabin Cui  libzstd_sources,
119*01826a49SYabin Cui  include_directories: libzstd_includes,
120*01826a49SYabin Cui  c_args: libzstd_c_args,
121*01826a49SYabin Cui  gnu_symbol_visibility: 'hidden',
122*01826a49SYabin Cui  dependencies: libzstd_deps,
123*01826a49SYabin Cui  install: true,
124*01826a49SYabin Cui  version: zstd_libversion)
125*01826a49SYabin Cui
126*01826a49SYabin Cuilibzstd_dep = declare_dependency(link_with: libzstd,
127*01826a49SYabin Cui  include_directories: libzstd_includes)
128*01826a49SYabin Cui
129*01826a49SYabin Cui# we link to both:
130*01826a49SYabin Cui# - the shared library (for public symbols)
131*01826a49SYabin Cui# - the static library (for private symbols)
132*01826a49SYabin Cui#
133*01826a49SYabin Cui# this is needed because internally private symbols are used all the time, and
134*01826a49SYabin Cui# -fvisibility=hidden means those cannot be found
135*01826a49SYabin Cuiif get_option('default_library') == 'static'
136*01826a49SYabin Cui  libzstd_static = libzstd
137*01826a49SYabin Cui  libzstd_internal_dep = libzstd_dep
138*01826a49SYabin Cuielse
139*01826a49SYabin Cui  if get_option('default_library') == 'shared'
140*01826a49SYabin Cui    libzstd_static = static_library('zstd_objlib',
141*01826a49SYabin Cui      objects: libzstd.extract_all_objects(recursive: true),
142*01826a49SYabin Cui      build_by_default: false)
143*01826a49SYabin Cui  else
144*01826a49SYabin Cui    libzstd_static = libzstd.get_static_lib()
145*01826a49SYabin Cui  endif
146*01826a49SYabin Cui
147*01826a49SYabin Cui  if cc_id == compiler_msvc
148*01826a49SYabin Cui    # msvc does not actually support linking to both, but errors out with:
149*01826a49SYabin Cui    #   error LNK2005: ZSTD_<foo> already defined in zstd.lib(zstd-1.dll)
150*01826a49SYabin Cui    libzstd_internal_dep = declare_dependency(link_with: libzstd_static)
151*01826a49SYabin Cui  else
152*01826a49SYabin Cui    libzstd_internal_dep = declare_dependency(link_with: libzstd,
153*01826a49SYabin Cui      # the static library must be linked after the shared one
154*01826a49SYabin Cui      dependencies: declare_dependency(link_with: libzstd_static))
155*01826a49SYabin Cui  endif
156*01826a49SYabin Cuiendif
157*01826a49SYabin Cui
158*01826a49SYabin Cuipkgconfig.generate(libzstd,
159*01826a49SYabin Cui  name: 'libzstd',
160*01826a49SYabin Cui  filebase: 'libzstd',
161*01826a49SYabin Cui  description: 'fast lossless compression algorithm library',
162*01826a49SYabin Cui  version: zstd_libversion,
163*01826a49SYabin Cui  url: 'https://facebook.github.io/zstd/')
164*01826a49SYabin Cui
165*01826a49SYabin Cuiinstall_headers(join_paths(zstd_rootdir, 'lib/zstd.h'),
166*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/zdict.h'),
167*01826a49SYabin Cui  join_paths(zstd_rootdir, 'lib/zstd_errors.h'))
168