xref: /aosp_15_r20/external/flashrom/subprojects/packagefiles/cmocka-1.1.5/meson.build (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Worker# Copyright © 2018 Intel Corporation
2*0d6140beSAndroid Build Coastguard Worker#
3*0d6140beSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*0d6140beSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*0d6140beSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*0d6140beSAndroid Build Coastguard Worker#
7*0d6140beSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
8*0d6140beSAndroid Build Coastguard Worker#
9*0d6140beSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*0d6140beSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*0d6140beSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*0d6140beSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*0d6140beSAndroid Build Coastguard Worker# limitations under the License.
14*0d6140beSAndroid Build Coastguard Worker
15*0d6140beSAndroid Build Coastguard Workerproject(
16*0d6140beSAndroid Build Coastguard Worker  'cmocka',
17*0d6140beSAndroid Build Coastguard Worker  ['c'],
18*0d6140beSAndroid Build Coastguard Worker  version : '1.1.5',
19*0d6140beSAndroid Build Coastguard Worker  license : 'APLv2',
20*0d6140beSAndroid Build Coastguard Worker  meson_version : '>= 0.48.0',
21*0d6140beSAndroid Build Coastguard Worker  default_options : ['c_std=c99', 'buildtype=debugoptimized'],
22*0d6140beSAndroid Build Coastguard Worker)
23*0d6140beSAndroid Build Coastguard Worker
24*0d6140beSAndroid Build Coastguard Workerlib_version = '0.5.0'
25*0d6140beSAndroid Build Coastguard Worker
26*0d6140beSAndroid Build Coastguard Worker# TODO: pkg-config
27*0d6140beSAndroid Build Coastguard Worker# TODO: cmake-config
28*0d6140beSAndroid Build Coastguard Worker
29*0d6140beSAndroid Build Coastguard Workerinc_include = include_directories('include')
30*0d6140beSAndroid Build Coastguard Worker
31*0d6140beSAndroid Build Coastguard Worker#####################
32*0d6140beSAndroid Build Coastguard Worker# Config Generation #
33*0d6140beSAndroid Build Coastguard Worker#####################
34*0d6140beSAndroid Build Coastguard Worker
35*0d6140beSAndroid Build Coastguard Workercc_dict = {
36*0d6140beSAndroid Build Coastguard Worker    'compiler': meson.get_compiler('c'),
37*0d6140beSAndroid Build Coastguard Worker    'machine': host_machine,
38*0d6140beSAndroid Build Coastguard Worker    'config_h_subdir': 'private',
39*0d6140beSAndroid Build Coastguard Worker    'native': false
40*0d6140beSAndroid Build Coastguard Worker}
41*0d6140beSAndroid Build Coastguard Worker
42*0d6140beSAndroid Build Coastguard Workercc_native_dict = {
43*0d6140beSAndroid Build Coastguard Worker    'compiler': meson.get_compiler('c', native: true),
44*0d6140beSAndroid Build Coastguard Worker    'machine': build_machine,
45*0d6140beSAndroid Build Coastguard Worker    'config_h_subdir': 'private_native',
46*0d6140beSAndroid Build Coastguard Worker    'native': true
47*0d6140beSAndroid Build Coastguard Worker}
48*0d6140beSAndroid Build Coastguard Worker
49*0d6140beSAndroid Build Coastguard Workerconfigurations = [cc_dict, cc_native_dict]
50*0d6140beSAndroid Build Coastguard Worker
51*0d6140beSAndroid Build Coastguard Workerforeach entry : configurations
52*0d6140beSAndroid Build Coastguard Worker  compiler = entry.get('compiler')
53*0d6140beSAndroid Build Coastguard Worker  is_native = entry.get('native')
54*0d6140beSAndroid Build Coastguard Worker  machine = entry.get('machine')
55*0d6140beSAndroid Build Coastguard Worker
56*0d6140beSAndroid Build Coastguard Worker  config = configuration_data()
57*0d6140beSAndroid Build Coastguard Worker
58*0d6140beSAndroid Build Coastguard Worker  if ['gcc', 'clang'].contains(compiler.get_id())
59*0d6140beSAndroid Build Coastguard Worker    add_project_arguments(
60*0d6140beSAndroid Build Coastguard Worker      # I've explicitly skipped the duplicated -W versions when they also test
61*0d6140beSAndroid Build Coastguard Worker      # for the -Werror version
62*0d6140beSAndroid Build Coastguard Worker      compiler.get_supported_arguments(
63*0d6140beSAndroid Build Coastguard Worker        '-Wshadow',
64*0d6140beSAndroid Build Coastguard Worker        '-Wmissing-prototypes',
65*0d6140beSAndroid Build Coastguard Worker        '-Wcast-align',
66*0d6140beSAndroid Build Coastguard Worker        '-Werror=address',
67*0d6140beSAndroid Build Coastguard Worker        '-Werror=strict-prototypes',
68*0d6140beSAndroid Build Coastguard Worker        '-Werror=write-strings',
69*0d6140beSAndroid Build Coastguard Worker        '-Werror=implicit-function-declaration',
70*0d6140beSAndroid Build Coastguard Worker        '-Werror=pointer-arith',
71*0d6140beSAndroid Build Coastguard Worker        '-Werror=declaration-after-statement',
72*0d6140beSAndroid Build Coastguard Worker        '-Werror=return-type',
73*0d6140beSAndroid Build Coastguard Worker        '-Werror=uninitialized',
74*0d6140beSAndroid Build Coastguard Worker        '-Wimplicit-fallthrough',
75*0d6140beSAndroid Build Coastguard Worker        '-Werror=strict-overflow',
76*0d6140beSAndroid Build Coastguard Worker        '-Wstrict-overflow=2',
77*0d6140beSAndroid Build Coastguard Worker        '-Wno-format-zero-length',
78*0d6140beSAndroid Build Coastguard Worker        '-Wformat',
79*0d6140beSAndroid Build Coastguard Worker        '-Werror=format-security',
80*0d6140beSAndroid Build Coastguard Worker        '-Wno-gnu-zero-variadic-macro-arguments',
81*0d6140beSAndroid Build Coastguard Worker        '-fno-common',
82*0d6140beSAndroid Build Coastguard Worker      ),
83*0d6140beSAndroid Build Coastguard Worker      language : ['c'],
84*0d6140beSAndroid Build Coastguard Worker      native: is_native
85*0d6140beSAndroid Build Coastguard Worker    )
86*0d6140beSAndroid Build Coastguard Worker    # We can't test the build type, so we can' add -D_FORTIFY_SOURCE=2 here
87*0d6140beSAndroid Build Coastguard Worker    if machine.system() == 'darwin'
88*0d6140beSAndroid Build Coastguard Worker      if compiler.has_argument('-Wno-deprecated-declarations')
89*0d6140beSAndroid Build Coastguard Worker        add_project_arguments('-Wno-deprecated-declarations', language : ['c'], native: is_native)
90*0d6140beSAndroid Build Coastguard Worker      endif
91*0d6140beSAndroid Build Coastguard Worker    endif
92*0d6140beSAndroid Build Coastguard Worker  elif compiler.get_id() == 'msvc'
93*0d6140beSAndroid Build Coastguard Worker    add_project_arguments(
94*0d6140beSAndroid Build Coastguard Worker      '/D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1',
95*0d6140beSAndroid Build Coastguard Worker      '/D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1',
96*0d6140beSAndroid Build Coastguard Worker      '/D_CRT_NONSTDC_NO_WARNINGS=1',
97*0d6140beSAndroid Build Coastguard Worker      '/D_CRT_SECURE_NO_WARNINGS=1',
98*0d6140beSAndroid Build Coastguard Worker      language : ['c'],
99*0d6140beSAndroid Build Coastguard Worker      native: is_native
100*0d6140beSAndroid Build Coastguard Worker    )
101*0d6140beSAndroid Build Coastguard Worker  endif
102*0d6140beSAndroid Build Coastguard Worker
103*0d6140beSAndroid Build Coastguard Worker  # TODO: solaris extensions
104*0d6140beSAndroid Build Coastguard Worker
105*0d6140beSAndroid Build Coastguard Worker  foreach h : ['assert.h', 'inttypes.h', 'io.h', 'malloc.h', 'memory.h',
106*0d6140beSAndroid Build Coastguard Worker               'setjmp.h', 'signal.h', 'stdarg.h', 'stddef.h', 'stdint.h',
107*0d6140beSAndroid Build Coastguard Worker               'stdio.h', 'stdlib.h', 'string.h', 'strings.h', 'sys/stat.h',
108*0d6140beSAndroid Build Coastguard Worker               'sys/types.h', 'time.h', 'unistd.h']
109*0d6140beSAndroid Build Coastguard Worker    if compiler.check_header(h)
110*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_@0@'.format(h.underscorify().to_upper()), 1)
111*0d6140beSAndroid Build Coastguard Worker    endif
112*0d6140beSAndroid Build Coastguard Worker  endforeach
113*0d6140beSAndroid Build Coastguard Worker
114*0d6140beSAndroid Build Coastguard Worker  if config.get('HAVE_TIME_H', 0) == 1
115*0d6140beSAndroid Build Coastguard Worker    if compiler.has_member('struct timespec', 'tv_sec', prefix : '#include <time.h>')
116*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_STRUCT_TIMESPEC', 1)
117*0d6140beSAndroid Build Coastguard Worker    endif
118*0d6140beSAndroid Build Coastguard Worker  endif
119*0d6140beSAndroid Build Coastguard Worker
120*0d6140beSAndroid Build Coastguard Worker  foreach f : ['calloc', 'exit', 'fprintf', 'free', 'longjmp', 'siglongjmp',
121*0d6140beSAndroid Build Coastguard Worker               'malloc', 'memcpy', 'memset', 'printf', 'setjmp', 'signal',
122*0d6140beSAndroid Build Coastguard Worker               'strsignal', 'strcmp', 'clock_gettime']
123*0d6140beSAndroid Build Coastguard Worker    if compiler.has_function(f)
124*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_@0@'.format(f.underscorify().to_upper()), 1)
125*0d6140beSAndroid Build Coastguard Worker    endif
126*0d6140beSAndroid Build Coastguard Worker  endforeach
127*0d6140beSAndroid Build Coastguard Worker
128*0d6140beSAndroid Build Coastguard Worker  if machine.system() == 'windows'
129*0d6140beSAndroid Build Coastguard Worker  foreach f : ['_vsnprintf_s', '_vsnprtinf', '_snprintf_s', '_snprintf']
130*0d6140beSAndroid Build Coastguard Worker    if compiler.has_function(f)
131*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_@0@'.format(f.underscorify().to_upper()), 1)
132*0d6140beSAndroid Build Coastguard Worker    endif
133*0d6140beSAndroid Build Coastguard Worker  endforeach
134*0d6140beSAndroid Build Coastguard Worker  foreach f : ['snprintf', 'vsnprintf']
135*0d6140beSAndroid Build Coastguard Worker    if compiler.has_header_symbol('stdio.h', f)
136*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_@0@'.format(f.underscorify().to_upper()), 1)
137*0d6140beSAndroid Build Coastguard Worker    endif
138*0d6140beSAndroid Build Coastguard Worker  endforeach
139*0d6140beSAndroid Build Coastguard Workerelse
140*0d6140beSAndroid Build Coastguard Worker  foreach f : ['snprintf', 'vsnprintf']
141*0d6140beSAndroid Build Coastguard Worker    if compiler.has_function(f)
142*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_@0@'.format(f.underscorify().to_upper()), 1)
143*0d6140beSAndroid Build Coastguard Worker    endif
144*0d6140beSAndroid Build Coastguard Worker  endforeach
145*0d6140beSAndroid Build Coastguard Workerendif
146*0d6140beSAndroid Build Coastguard Worker
147*0d6140beSAndroid Build Coastguard Worker  if machine.system() == 'windows'
148*0d6140beSAndroid Build Coastguard Worker    if compiler.compiles('''
149*0d6140beSAndroid Build Coastguard Worker        __declspec(thread) int tls;
150*0d6140beSAndroid Build Coastguard Worker
151*0d6140beSAndroid Build Coastguard Worker        int main(void) {
152*0d6140beSAndroid Build Coastguard Worker          return 0;
153*0d6140beSAndroid Build Coastguard Worker        }''',
154*0d6140beSAndroid Build Coastguard Worker        name : 'Thread Local Storage')
155*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_MSVC_THREAD_LOCAL_STORAGE', 1)
156*0d6140beSAndroid Build Coastguard Worker    endif
157*0d6140beSAndroid Build Coastguard Worker  else
158*0d6140beSAndroid Build Coastguard Worker    if compiler.compiles('''
159*0d6140beSAndroid Build Coastguard Worker        __thread int tls;
160*0d6140beSAndroid Build Coastguard Worker
161*0d6140beSAndroid Build Coastguard Worker        int main(void) {
162*0d6140beSAndroid Build Coastguard Worker          return 0;
163*0d6140beSAndroid Build Coastguard Worker        }''',
164*0d6140beSAndroid Build Coastguard Worker        name : 'Thread Local Storage')
165*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_GCC_THREAD_LOCAL_STORAGE', 1)
166*0d6140beSAndroid Build Coastguard Worker    endif
167*0d6140beSAndroid Build Coastguard Worker  endif
168*0d6140beSAndroid Build Coastguard Worker
169*0d6140beSAndroid Build Coastguard Worker  if (config.get('HAVE_TIME_H', 0) == 1 and
170*0d6140beSAndroid Build Coastguard Worker      config.get('HAVE_STRUCT_TIMESPEC', 0) == 1 and
171*0d6140beSAndroid Build Coastguard Worker      config.get('HAVE_CLOCK_GETTIME', 0) == 1)
172*0d6140beSAndroid Build Coastguard Worker    if compiler.has_header_symbol('time.h', 'CLOCK_REALTIME')
173*0d6140beSAndroid Build Coastguard Worker      config.set('HAVE_CLOCK_REALTIME', 1)
174*0d6140beSAndroid Build Coastguard Worker    endif
175*0d6140beSAndroid Build Coastguard Worker  endif
176*0d6140beSAndroid Build Coastguard Worker
177*0d6140beSAndroid Build Coastguard Worker  config.set('WORDS_SIZEOF_VOID_P', compiler.sizeof('void *'))
178*0d6140beSAndroid Build Coastguard Worker  if machine.endian() == 'big'
179*0d6140beSAndroid Build Coastguard Worker    config.set('WORDS_BIGENDIAN', 1)
180*0d6140beSAndroid Build Coastguard Worker  endif
181*0d6140beSAndroid Build Coastguard Worker
182*0d6140beSAndroid Build Coastguard Worker  # Execute subdir to create config.h for this pass
183*0d6140beSAndroid Build Coastguard Worker  # This requires the use of the variable named "config" for configuration_data(),
184*0d6140beSAndroid Build Coastguard Worker  # as this variable is used in each configuration header subdirectory.
185*0d6140beSAndroid Build Coastguard Worker  subdir(entry.get('config_h_subdir'))
186*0d6140beSAndroid Build Coastguard Worker
187*0d6140beSAndroid Build Coastguard Workerendforeach
188*0d6140beSAndroid Build Coastguard Worker
189*0d6140beSAndroid Build Coastguard Worker###########################
190*0d6140beSAndroid Build Coastguard Worker# Subdirectory Processing #
191*0d6140beSAndroid Build Coastguard Worker###########################
192*0d6140beSAndroid Build Coastguard Worker
193*0d6140beSAndroid Build Coastguard Workersubdir('src')
194*0d6140beSAndroid Build Coastguard Worker
195*0d6140beSAndroid Build Coastguard Worker######################
196*0d6140beSAndroid Build Coastguard Worker# Dependency Targets #
197*0d6140beSAndroid Build Coastguard Worker######################
198*0d6140beSAndroid Build Coastguard Worker
199*0d6140beSAndroid Build Coastguard Worker# TODO: doc, include, tests, example
200*0d6140beSAndroid Build Coastguard Worker# Since we're using this as a wrap, and it's a unit test framework we're not
201*0d6140beSAndroid Build Coastguard Worker# going to install it.
202*0d6140beSAndroid Build Coastguard Worker
203*0d6140beSAndroid Build Coastguard Workercmocka_dep = declare_dependency(
204*0d6140beSAndroid Build Coastguard Worker  link_with : libcmocka,
205*0d6140beSAndroid Build Coastguard Worker  include_directories : inc_include,
206*0d6140beSAndroid Build Coastguard Worker  version : meson.project_version(),
207*0d6140beSAndroid Build Coastguard Worker)
208*0d6140beSAndroid Build Coastguard Worker
209*0d6140beSAndroid Build Coastguard Workercmocka_native_dep = declare_dependency(
210*0d6140beSAndroid Build Coastguard Worker  link_with : libcmocka_native,
211*0d6140beSAndroid Build Coastguard Worker  include_directories : inc_include,
212*0d6140beSAndroid Build Coastguard Worker  version : meson.project_version(),
213*0d6140beSAndroid Build Coastguard Worker)
214