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