xref: /aosp_15_r20/external/libdav1d/tests/libfuzzer/meson.build (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
1*c0909341SAndroid Build Coastguard Worker# Copyright © 2020, VideoLAN and dav1d authors
2*c0909341SAndroid Build Coastguard Worker# All rights reserved.
3*c0909341SAndroid Build Coastguard Worker#
4*c0909341SAndroid Build Coastguard Worker# Redistribution and use in source and binary forms, with or without
5*c0909341SAndroid Build Coastguard Worker# modification, are permitted provided that the following conditions are met:
6*c0909341SAndroid Build Coastguard Worker#
7*c0909341SAndroid Build Coastguard Worker# 1. Redistributions of source code must retain the above copyright notice, this
8*c0909341SAndroid Build Coastguard Worker#    list of conditions and the following disclaimer.
9*c0909341SAndroid Build Coastguard Worker#
10*c0909341SAndroid Build Coastguard Worker# 2. Redistributions in binary form must reproduce the above copyright notice,
11*c0909341SAndroid Build Coastguard Worker#    this list of conditions and the following disclaimer in the documentation
12*c0909341SAndroid Build Coastguard Worker#    and/or other materials provided with the distribution.
13*c0909341SAndroid Build Coastguard Worker#
14*c0909341SAndroid Build Coastguard Worker# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15*c0909341SAndroid Build Coastguard Worker# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16*c0909341SAndroid Build Coastguard Worker# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17*c0909341SAndroid Build Coastguard Worker# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
18*c0909341SAndroid Build Coastguard Worker# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19*c0909341SAndroid Build Coastguard Worker# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20*c0909341SAndroid Build Coastguard Worker# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21*c0909341SAndroid Build Coastguard Worker# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22*c0909341SAndroid Build Coastguard Worker# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23*c0909341SAndroid Build Coastguard Worker# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24*c0909341SAndroid Build Coastguard Worker
25*c0909341SAndroid Build Coastguard Worker#
26*c0909341SAndroid Build Coastguard Worker# Build definition for the dav1d fuzzing binaries
27*c0909341SAndroid Build Coastguard Worker#
28*c0909341SAndroid Build Coastguard Worker
29*c0909341SAndroid Build Coastguard Workerif fuzzing_engine == 'none' and not have_fseeko
30*c0909341SAndroid Build Coastguard Worker    subdir_done()
31*c0909341SAndroid Build Coastguard Workerendif
32*c0909341SAndroid Build Coastguard Worker
33*c0909341SAndroid Build Coastguard Workerdav1d_fuzzer_sources =  files('dav1d_fuzzer.c')
34*c0909341SAndroid Build Coastguard Workerfuzzer_ldflags = []
35*c0909341SAndroid Build Coastguard Workerfuzzer_link_lang = {}
36*c0909341SAndroid Build Coastguard Worker
37*c0909341SAndroid Build Coastguard Workerif get_option('fuzzer_ldflags') != ''
38*c0909341SAndroid Build Coastguard Worker    fuzzer_ldflags += [get_option('fuzzer_ldflags')]
39*c0909341SAndroid Build Coastguard Workerendif
40*c0909341SAndroid Build Coastguard Worker
41*c0909341SAndroid Build Coastguard Workerif fuzzing_engine == 'none'
42*c0909341SAndroid Build Coastguard Worker    dav1d_fuzzer_sources += files('main.c')
43*c0909341SAndroid Build Coastguard Workerelif fuzzing_engine == 'libfuzzer'
44*c0909341SAndroid Build Coastguard Worker    fuzzer_ldflags += ['-fsanitize=fuzzer']
45*c0909341SAndroid Build Coastguard Workerelif fuzzing_engine == 'oss-fuzz'
46*c0909341SAndroid Build Coastguard Worker    # libFuzzingEngine needs c++
47*c0909341SAndroid Build Coastguard Worker    add_languages('cpp')
48*c0909341SAndroid Build Coastguard Worker    fuzzer_link_lang = {'link_language': 'cpp'}
49*c0909341SAndroid Build Coastguard Workerendif
50*c0909341SAndroid Build Coastguard Worker
51*c0909341SAndroid Build Coastguard Workerdav1d_fuzzer = executable('dav1d_fuzzer',
52*c0909341SAndroid Build Coastguard Worker    dav1d_fuzzer_sources,
53*c0909341SAndroid Build Coastguard Worker    include_directories: dav1d_inc_dirs,
54*c0909341SAndroid Build Coastguard Worker    link_args: fuzzer_ldflags,
55*c0909341SAndroid Build Coastguard Worker    link_with : libdav1d,
56*c0909341SAndroid Build Coastguard Worker    build_by_default: true,
57*c0909341SAndroid Build Coastguard Worker    dependencies : [thread_dependency],
58*c0909341SAndroid Build Coastguard Worker    kwargs: fuzzer_link_lang
59*c0909341SAndroid Build Coastguard Worker    )
60*c0909341SAndroid Build Coastguard Worker
61*c0909341SAndroid Build Coastguard Workerdav1d_fuzzer_mt = executable('dav1d_fuzzer_mt',
62*c0909341SAndroid Build Coastguard Worker    dav1d_fuzzer_sources,
63*c0909341SAndroid Build Coastguard Worker    include_directories: dav1d_inc_dirs,
64*c0909341SAndroid Build Coastguard Worker    c_args: ['-DDAV1D_MT_FUZZING'],
65*c0909341SAndroid Build Coastguard Worker    link_args: fuzzer_ldflags,
66*c0909341SAndroid Build Coastguard Worker    link_with : libdav1d,
67*c0909341SAndroid Build Coastguard Worker    build_by_default: true,
68*c0909341SAndroid Build Coastguard Worker    dependencies : [thread_dependency],
69*c0909341SAndroid Build Coastguard Worker    kwargs: fuzzer_link_lang
70*c0909341SAndroid Build Coastguard Worker    )
71*c0909341SAndroid Build Coastguard Worker
72*c0909341SAndroid Build Coastguard Workerobjcopy = find_program('objcopy',
73*c0909341SAndroid Build Coastguard Worker                       required: false)
74*c0909341SAndroid Build Coastguard Workerif (objcopy.found() and
75*c0909341SAndroid Build Coastguard Worker    not get_option('b_lto') and
76*c0909341SAndroid Build Coastguard Worker    get_option('default_library') == 'static' and
77*c0909341SAndroid Build Coastguard Worker    cc.has_function('posix_memalign', prefix : '#include <stdlib.h>', args : test_args))
78*c0909341SAndroid Build Coastguard Worker
79*c0909341SAndroid Build Coastguard Worker    libdav1d_af = custom_target('libdav1d_af',
80*c0909341SAndroid Build Coastguard Worker                                input: libdav1d,
81*c0909341SAndroid Build Coastguard Worker                                output: 'libdav1d_af.a',
82*c0909341SAndroid Build Coastguard Worker                                depends: libdav1d,
83*c0909341SAndroid Build Coastguard Worker                                command: [objcopy,
84*c0909341SAndroid Build Coastguard Worker                                          '--redefine-sym', 'malloc=__wrap_malloc',
85*c0909341SAndroid Build Coastguard Worker                                          '--redefine-sym', 'posix_memalign=__wrap_posix_memalign',
86*c0909341SAndroid Build Coastguard Worker                                          '--redefine-sym', 'pthread_create=__wrap_pthread_create',
87*c0909341SAndroid Build Coastguard Worker                                          '--redefine-sym', 'pthread_cond_init=__wrap_pthread_cond_init',
88*c0909341SAndroid Build Coastguard Worker                                          '--redefine-sym', 'pthread_mutex_init=__wrap_pthread_mutex_init',
89*c0909341SAndroid Build Coastguard Worker                                          '@INPUT@', '@OUTPUT@'])
90*c0909341SAndroid Build Coastguard Worker
91*c0909341SAndroid Build Coastguard Worker    dav1d_fuzzer_mem = executable('dav1d_fuzzer_mem',
92*c0909341SAndroid Build Coastguard Worker        dav1d_fuzzer_sources + ['alloc_fail.c'],
93*c0909341SAndroid Build Coastguard Worker        include_directories: dav1d_inc_dirs,
94*c0909341SAndroid Build Coastguard Worker        c_args: ['-DDAV1D_ALLOC_FAIL'],
95*c0909341SAndroid Build Coastguard Worker        link_args: fuzzer_ldflags + [join_paths(libdav1d_af.full_path())],
96*c0909341SAndroid Build Coastguard Worker        link_depends: libdav1d_af,
97*c0909341SAndroid Build Coastguard Worker        build_by_default: false,
98*c0909341SAndroid Build Coastguard Worker        dependencies : [thread_dependency],
99*c0909341SAndroid Build Coastguard Worker        kwargs: fuzzer_link_lang
100*c0909341SAndroid Build Coastguard Worker        )
101*c0909341SAndroid Build Coastguard Workerendif
102