blob: 6a4d16c7003c4c1c15e57c1fb3c1237ef09e0167 [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 Tanous8121f7e2025-03-06 14:39:07 -080062cxx = meson.get_compiler('cpp')
63if (cxx.get_id() == 'clang') and get_option('fuzz').allowed()
64 fuzz_args = [
65 '-fsanitize=fuzzer,address,leak',
66 '-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION',
67 ]
68
69 foreach fuzzer_test : ['fuzz_cper_buf_to_ir']
70 fuzz_exe = executable(
71 fuzzer_test,
72 [fuzzer_test + '.cpp'] + libcper_parse_sources + edk_sources,
73 implicit_include_directories: false,
74 include_directories: include_directories(test_include_dirs),
75 cpp_args: fuzz_args,
76 c_args: fuzz_args,
77 link_args: fuzz_args,
78 dependencies: [
79 json_c_dep,
80 gtest,
81 gmock,
82 nlohmann_json_dep,
83 valijson_dep,
84 ],
85 )
86 test(
87 fuzzer_test,
88 fuzz_exe,
89 args: [
90 '-max_total_time=10',
91 '-max_len=131072',
92 '-error_exitcode=1',
93 '-timeout_exitcode=2',
94 ],
95 )
96 endforeach
97endif