blob: accce38ba4935c73d44e62c8c38d9e19de54f38e [file] [log] [blame]
Aushim Nagarkattiae8f6d92025-01-29 17:34:44 -08001cmake = import('cmake')
2
John Chung197ea122024-05-03 19:57:55 +08003gtest = dependency('gtest', main: true, disabler: true, required: false)
4gmock = 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'),
12 gtest_proj.dependency('gtest_main'),
Ed Tanousc833a3a2024-07-15 11:53:53 -070013 ],
John Chung197ea122024-05-03 19:57:55 +080014 )
15 gmock = gtest_proj.dependency('gmock')
16 else
17 assert(
18 not get_option('tests').allowed(),
Ed Tanousc833a3a2024-07-15 11:53:53 -070019 'Googletest is required if tests are enabled',
John Chung197ea122024-05-03 19:57:55 +080020 )
21 endif
22endif
23
Aushim Nagarkattiae8f6d92025-01-29 17:34:44 -080024nlohmann_json_dep = dependency(
25 'nlohmann_json',
26 required: false,
27 version: '>=3.11.2',
28 include_type: 'system',
29)
30if not nlohmann_json_dep.found()
31 nlohmann_proj = subproject('nlohmann_json', required: true)
32 nlohmann_json_dep = nlohmann_proj.get_variable('nlohmann_json_dep')
33endif
34
35valijson_dep = dependency('valijson', required: false)
36if not valijson_dep.found()
37 valijson_proj = cmake.subproject('valijson')
38 valijson_dep = valijson_proj.get_variable('valijson_dep')
39endif
40
Ed Tanous10eb6de2024-10-03 17:23:12 -070041sources = ['ir-tests.cpp', 'test-utils.cpp', 'base64_test.cpp']
John Chung197ea122024-05-03 19:57:55 +080042
Thu Nguyene42fb482024-10-15 14:43:11 +000043test_include_dirs = ['.', '../include']
John Chung197ea122024-05-03 19:57:55 +080044
Ed Tanousa84fc932024-07-15 13:48:35 -070045cper_tests = executable(
46 'cper-tests',
47 sources,
48 implicit_include_directories: false,
49 include_directories: include_directories(test_include_dirs),
50 cpp_args: '-fpermissive',
Ed Tanous10eb6de2024-10-03 17:23:12 -070051 dependencies: [
52 libcper_parse_dep,
53 libcper_generate_dep,
54 json_c_dep,
55 gtest,
56 gmock,
Aushim Nagarkattiae8f6d92025-01-29 17:34:44 -080057 nlohmann_json_dep,
Aushim Nagarkatti517282f2025-03-03 17:08:31 -080058 valijson_dep,
Ed Tanous10eb6de2024-10-03 17:23:12 -070059 ],
John Chung197ea122024-05-03 19:57:55 +080060)
Karthik Rajagopalan9fe2cb52024-08-08 15:12:29 -070061test('test-cper-tests', cper_tests)
Ed Tanous6070e1b2025-03-14 11:20:35 -070062
Ed Tanous8121f7e2025-03-06 14:39:07 -080063cxx = meson.get_compiler('cpp')
Ed Tanous6070e1b2025-03-14 11:20:35 -070064
65# Fuzzing only works on linux at this moment. osx clang doesn't have leak detector
66is_darwin = host_machine.system().startswith('darwin')
67if (cxx.get_id() == 'clang') and get_option('fuzz').allowed() and not is_darwin
68 sanitize = ['fuzzer', 'address', 'leak']
Ed Tanous8121f7e2025-03-06 14:39:07 -080069 fuzz_args = [
Ed Tanous6070e1b2025-03-14 11:20:35 -070070 '-fsanitize=' + ','.join(sanitize),
Ed Tanous8121f7e2025-03-06 14:39:07 -080071 '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION',
72 ]
73
74 foreach fuzzer_test : ['fuzz_cper_buf_to_ir']
75 fuzz_exe = executable(
76 fuzzer_test,
77 [fuzzer_test + '.cpp'] + libcper_parse_sources + edk_sources,
78 implicit_include_directories: false,
79 include_directories: include_directories(test_include_dirs),
80 cpp_args: fuzz_args,
81 c_args: fuzz_args,
82 link_args: fuzz_args,
83 dependencies: [
84 json_c_dep,
85 gtest,
86 gmock,
87 nlohmann_json_dep,
88 valijson_dep,
89 ],
90 )
91 test(
92 fuzzer_test,
93 fuzz_exe,
94 args: [
95 '-max_total_time=10',
96 '-max_len=131072',
97 '-error_exitcode=1',
98 '-timeout_exitcode=2',
99 ],
100 )
101 endforeach
102endif