blob: 0123dc23ce5c23980811816ef6ffef2dc05a6fd7 [file] [log] [blame]
Aushim Nagarkattiae8f6d92025-01-29 17:34:44 -08001cmake = import('cmake')
2
Erwin Tsaur8870c072025-02-28 12:57:12 -08003gtest = dependency('gtest', disabler: true, required: false)
John Chung197ea122024-05-03 19:57:55 +08004gmock = dependency('gmock', disabler: true, required: false)
5if not gtest.found() or not gmock.found()
6 gtest_proj = import('cmake').subproject('googletest', required: false)
7 if gtest_proj.found()
8 gtest = declare_dependency(
9 dependencies: [
10 dependency('threads'),
11 gtest_proj.dependency('gtest'),
Ed Tanousc833a3a2024-07-15 11:53:53 -070012 ],
John Chung197ea122024-05-03 19:57:55 +080013 )
14 gmock = gtest_proj.dependency('gmock')
15 else
16 assert(
17 not get_option('tests').allowed(),
Ed Tanousc833a3a2024-07-15 11:53:53 -070018 'Googletest is required if tests are enabled',
John Chung197ea122024-05-03 19:57:55 +080019 )
20 endif
21endif
22
Ed Tanousedee0a32025-03-16 17:40:04 -070023jsonc_daccord = dependency(
24 'jsoncdac',
25 default_options: ['default_library=static'],
26)
Aushim Nagarkattiae8f6d92025-01-29 17:34:44 -080027
Ed Tanousedee0a32025-03-16 17:40:04 -070028test_sources = ['test-utils.c', 'base64_test.cpp']
John Chung197ea122024-05-03 19:57:55 +080029
Thu Nguyene42fb482024-10-15 14:43:11 +000030test_include_dirs = ['.', '../include']
John Chung197ea122024-05-03 19:57:55 +080031
Ed Tanousa84fc932024-07-15 13:48:35 -070032cper_tests = executable(
33 'cper-tests',
Ed Tanousd6b62632025-03-14 15:30:07 -070034 'ir-tests.cpp',
35 test_sources,
Ed Tanousa84fc932024-07-15 13:48:35 -070036 implicit_include_directories: false,
37 include_directories: include_directories(test_include_dirs),
Ed Tanous10eb6de2024-10-03 17:23:12 -070038 dependencies: [
Ed Tanousa3663052025-03-16 12:54:36 -070039 json_c_dep,
40 jsonc_daccord,
Ed Tanous10eb6de2024-10-03 17:23:12 -070041 libcper_parse_dep,
42 libcper_generate_dep,
Ed Tanous10eb6de2024-10-03 17:23:12 -070043 gtest,
44 gmock,
45 ],
John Chung197ea122024-05-03 19:57:55 +080046)
Ed Tanousedee0a32025-03-16 17:40:04 -070047test('test-cper-tests', cper_tests, protocol: 'gtest')
Ed Tanous6070e1b2025-03-14 11:20:35 -070048
Ed Tanous8121f7e2025-03-06 14:39:07 -080049cxx = meson.get_compiler('cpp')
Ed Tanous6070e1b2025-03-14 11:20:35 -070050
51# Fuzzing only works on linux at this moment. osx clang doesn't have leak detector
52is_darwin = host_machine.system().startswith('darwin')
53if (cxx.get_id() == 'clang') and get_option('fuzz').allowed() and not is_darwin
Ed Tanous7a531ff2025-03-14 17:06:49 -070054 sanitize = ['fuzzer']
Ed Tanous8121f7e2025-03-06 14:39:07 -080055 fuzz_args = [
Ed Tanous8121f7e2025-03-06 14:39:07 -080056 '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION',
Ed Tanousedee0a32025-03-16 17:40:04 -070057 '-fsanitize=fuzzer,address,leak',
Ed Tanous8121f7e2025-03-06 14:39:07 -080058 ]
59
60 foreach fuzzer_test : ['fuzz_cper_buf_to_ir']
61 fuzz_exe = executable(
62 fuzzer_test,
Ed Tanousedee0a32025-03-16 17:40:04 -070063 [fuzzer_test + '.c'] + libcper_parse_sources + edk_sources + 'test-utils.c' + libcper_generate_sources,
Ed Tanous8121f7e2025-03-06 14:39:07 -080064 implicit_include_directories: false,
65 include_directories: include_directories(test_include_dirs),
66 cpp_args: fuzz_args,
67 c_args: fuzz_args,
68 link_args: fuzz_args,
Ed Tanousedee0a32025-03-16 17:40:04 -070069 dependencies: [json_c_dep, jsonc_daccord],
Ed Tanous8121f7e2025-03-06 14:39:07 -080070 )
71 test(
72 fuzzer_test,
73 fuzz_exe,
74 args: [
75 '-max_total_time=10',
76 '-max_len=131072',
77 '-error_exitcode=1',
78 '-timeout_exitcode=2',
79 ],
80 )
81 endforeach
82endif