• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2022 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7#     https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
15import("//build_overrides/pigweed.gni")
16
17import("$dir_pw_chrono/backend.gni")
18import("$dir_pw_protobuf_compiler/proto.gni")
19import("$dir_pw_rpc/system_server/backend.gni")
20import("$dir_pw_sync/backend.gni")
21import("$dir_pw_sys_io/backend.gni")
22import("$dir_pw_system/backend.gni")
23import("$dir_pw_third_party/nanopb/nanopb.gni")
24import("$dir_pw_thread/backend.gni")
25import("$dir_pw_toolchain/host_clang/toolchains.gni")
26import("$dir_pw_toolchain/host_gcc/toolchains.gni")
27import("$dir_pw_trace/backend.gni")
28import("$dir_pw_trace_tokenized/config.gni")
29
30_host_common = {
31  # Use logging-based test output on host.
32  pw_unit_test_MAIN = "$dir_pw_unit_test:logging_main"
33
34  # Configure backend for assert facade.
35  pw_assert_BACKEND = "$dir_pw_assert_basic"
36  pw_assert_LITE_BACKEND = "$dir_pw_assert:print_and_abort"
37
38  # Configure backend for logging facade.
39  pw_log_BACKEND = "$dir_pw_log_basic"
40
41  # Configure backends for pw_sync's facades.
42  pw_sync_INTERRUPT_SPIN_LOCK_BACKEND = "$dir_pw_sync_stl:interrupt_spin_lock"
43  pw_sync_BINARY_SEMAPHORE_BACKEND = "$dir_pw_sync_stl:binary_semaphore_backend"
44  pw_sync_COUNTING_SEMAPHORE_BACKEND =
45      "$dir_pw_sync_stl:counting_semaphore_backend"
46  pw_sync_MUTEX_BACKEND = "$dir_pw_sync_stl:mutex_backend"
47  pw_sync_TIMED_MUTEX_BACKEND = "$dir_pw_sync_stl:timed_mutex_backend"
48  pw_sync_THREAD_NOTIFICATION_BACKEND =
49      "$dir_pw_sync:binary_semaphore_thread_notification_backend"
50  pw_sync_TIMED_THREAD_NOTIFICATION_BACKEND =
51      "$dir_pw_sync:binary_semaphore_timed_thread_notification_backend"
52
53  # Configure backend for pw_sys_io facade.
54  pw_sys_io_BACKEND = "$dir_pw_sys_io_stdio"
55
56  # Configure backend for pw_rpc_system_server.
57  pw_rpc_system_server_BACKEND = "$dir_pigweed/targets/host:system_rpc_server"
58  pw_rpc_CONFIG = "$dir_pw_rpc:use_global_mutex"
59
60  # Configure backend for trace facade.
61  pw_trace_BACKEND = "$dir_pw_trace_tokenized"
62
63  # Tokenizer trace time.
64  pw_trace_tokenizer_time = "$dir_pw_trace_tokenized:host_trace_time"
65
66  # Configure backend for pw_chrono's facades.
67  pw_chrono_SYSTEM_CLOCK_BACKEND = "$dir_pw_chrono_stl:system_clock"
68  pw_chrono_SYSTEM_TIMER_BACKEND = "$dir_pw_chrono_stl:system_timer"
69
70  # Configure backends for pw_thread's facades.
71  pw_thread_ID_BACKEND = "$dir_pw_thread_stl:id"
72  pw_thread_YIELD_BACKEND = "$dir_pw_thread_stl:yield"
73  pw_thread_SLEEP_BACKEND = "$dir_pw_thread_stl:sleep"
74  pw_thread_THREAD_BACKEND = "$dir_pw_thread_stl:thread"
75
76  pw_build_LINK_DEPS = []  # Explicit list overwrite required by GN
77  pw_build_LINK_DEPS = [
78    "$dir_pw_assert:impl",
79    "$dir_pw_log:impl",
80  ]
81
82  # Specify builtin GN variables.
83  current_os = host_os
84  current_cpu = host_cpu
85}
86
87# Linux-specific target configuration.
88_linux_config = {
89  pw_bloat_BLOATY_CONFIG = get_path_info("linux.bloaty", "abspath")
90  pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test", "abspath")
91}
92
93# macOS-specific target configuration.
94_mac_config = {
95  pw_bloat_BLOATY_CONFIG = get_path_info("macos.bloaty", "abspath")
96  pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test", "abspath")
97}
98
99# Windows-specific target configuration.
100_win_config = {
101  # This is here as bloaty_config_file cannot be an empty string or GN fails.
102  # TODO(frolv): Add this file and enable size reports on Windows.
103  pw_bloat_BLOATY_CONFIG = get_path_info("windows.bloaty", "abspath")
104  pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test.bat", "abspath")
105}
106
107_os_specific_config = {
108  if (host_os == "linux") {
109    forward_variables_from(_linux_config, "*")
110  } else if (host_os == "mac") {
111    forward_variables_from(_mac_config, "*")
112  } else if (host_os == "win") {
113    forward_variables_from(_win_config, "*")
114  }
115}
116
117_clang_default_configs = [
118  "$dir_pw_build:extra_strict_warnings",
119  "$dir_pw_build:clang_thread_safety_warnings",
120]
121_gcc_default_configs = [
122  "$dir_pw_build:extra_strict_warnings",
123  "$dir_pw_toolchain/host_gcc:threading_support",
124]
125
126_excluded_members = [
127  "defaults",
128  "name",
129]
130
131pw_target_toolchain_host = {
132  clang_debug = {
133    name = "host_clang_debug"
134    _toolchain_base = pw_toolchain_host_clang.debug
135    forward_variables_from(_toolchain_base, "*", _excluded_members)
136    defaults = {
137      forward_variables_from(_toolchain_base.defaults, "*")
138      forward_variables_from(_host_common, "*")
139      forward_variables_from(_os_specific_config, "*")
140      default_configs += _clang_default_configs
141    }
142  }
143
144  clang_speed_optimized = {
145    name = "host_clang_speed_optimized"
146    _toolchain_base = pw_toolchain_host_clang.speed_optimized
147    forward_variables_from(_toolchain_base, "*", _excluded_members)
148    defaults = {
149      forward_variables_from(_toolchain_base.defaults, "*")
150      forward_variables_from(_host_common, "*")
151      forward_variables_from(_os_specific_config, "*")
152      default_configs += _clang_default_configs
153    }
154  }
155
156  clang_size_optimized = {
157    name = "host_clang_size_optimized"
158    _toolchain_base = pw_toolchain_host_clang.size_optimized
159    forward_variables_from(_toolchain_base, "*", _excluded_members)
160    defaults = {
161      forward_variables_from(_toolchain_base.defaults, "*")
162      forward_variables_from(_host_common, "*")
163      forward_variables_from(_os_specific_config, "*")
164      default_configs += _clang_default_configs
165    }
166  }
167
168  clang_fuzz = {
169    name = "host_clang_fuzz"
170    _toolchain_base = pw_toolchain_host_clang.fuzz
171    forward_variables_from(_toolchain_base, "*", _excluded_members)
172    defaults = {
173      forward_variables_from(_toolchain_base.defaults, "*")
174      forward_variables_from(_host_common, "*")
175      forward_variables_from(_os_specific_config, "*")
176      default_configs += _clang_default_configs
177    }
178  }
179
180  clang_asan = {
181    name = "host_clang_asan"
182    _toolchain_base = pw_toolchain_host_clang.asan
183    forward_variables_from(_toolchain_base, "*", _excluded_members)
184    defaults = {
185      forward_variables_from(_toolchain_base.defaults, "*")
186      forward_variables_from(_host_common, "*")
187      forward_variables_from(_os_specific_config, "*")
188      default_configs += _clang_default_configs
189    }
190  }
191
192  clang_ubsan = {
193    name = "host_clang_ubsan"
194    _toolchain_base = pw_toolchain_host_clang.ubsan
195    forward_variables_from(_toolchain_base, "*", _excluded_members)
196    defaults = {
197      forward_variables_from(_toolchain_base.defaults, "*")
198      forward_variables_from(_host_common, "*")
199      forward_variables_from(_os_specific_config, "*")
200      default_configs += _clang_default_configs
201    }
202  }
203
204  clang_ubsan_heuristic = {
205    name = "host_clang_ubsan_heuristic"
206    _toolchain_base = pw_toolchain_host_clang.ubsan_heuristic
207    forward_variables_from(_toolchain_base, "*", _excluded_members)
208    defaults = {
209      forward_variables_from(_toolchain_base.defaults, "*")
210      forward_variables_from(_host_common, "*")
211      forward_variables_from(_os_specific_config, "*")
212      default_configs += _clang_default_configs
213    }
214  }
215
216  clang_msan = {
217    name = "host_clang_msan"
218    _toolchain_base = pw_toolchain_host_clang.msan
219    forward_variables_from(_toolchain_base, "*", _excluded_members)
220    defaults = {
221      forward_variables_from(_toolchain_base.defaults, "*")
222      forward_variables_from(_host_common, "*")
223      forward_variables_from(_os_specific_config, "*")
224      default_configs += _clang_default_configs
225    }
226  }
227
228  clang_tsan = {
229    name = "host_clang_tsan"
230    _toolchain_base = pw_toolchain_host_clang.tsan
231    forward_variables_from(_toolchain_base, "*", _excluded_members)
232    defaults = {
233      forward_variables_from(_toolchain_base.defaults, "*")
234      forward_variables_from(_host_common, "*")
235      forward_variables_from(_os_specific_config, "*")
236      default_configs += _clang_default_configs
237    }
238  }
239
240  gcc_debug = {
241    name = "host_gcc_debug"
242    _toolchain_base = pw_toolchain_host_gcc.debug
243    forward_variables_from(_toolchain_base, "*", _excluded_members)
244    defaults = {
245      forward_variables_from(_toolchain_base.defaults, "*")
246      forward_variables_from(_host_common, "*")
247      forward_variables_from(_os_specific_config, "*")
248      default_configs += _gcc_default_configs
249    }
250  }
251
252  gcc_speed_optimized = {
253    name = "host_gcc_speed_optimized"
254    _toolchain_base = pw_toolchain_host_gcc.speed_optimized
255    forward_variables_from(_toolchain_base, "*", _excluded_members)
256    defaults = {
257      forward_variables_from(_toolchain_base.defaults, "*")
258      forward_variables_from(_host_common, "*")
259      forward_variables_from(_os_specific_config, "*")
260      default_configs += _gcc_default_configs
261    }
262  }
263
264  gcc_size_optimized = {
265    name = "host_gcc_size_optimized"
266    _toolchain_base = pw_toolchain_host_gcc.size_optimized
267    forward_variables_from(_toolchain_base, "*", _excluded_members)
268    defaults = {
269      forward_variables_from(_toolchain_base.defaults, "*")
270      forward_variables_from(_host_common, "*")
271      forward_variables_from(_os_specific_config, "*")
272      default_configs += _gcc_default_configs
273    }
274  }
275}
276
277# This list just contains the members of the above scope for convenience to make
278# it trivial to generate all the toolchains in this file via a
279# `generate_toolchains` target.
280pw_target_toolchain_host_list = [
281  pw_target_toolchain_host.clang_debug,
282  pw_target_toolchain_host.clang_speed_optimized,
283  pw_target_toolchain_host.clang_size_optimized,
284  pw_target_toolchain_host.clang_fuzz,
285  pw_target_toolchain_host.clang_asan,
286  pw_target_toolchain_host.clang_ubsan,
287  pw_target_toolchain_host.clang_ubsan_heuristic,
288  pw_target_toolchain_host.clang_msan,
289  pw_target_toolchain_host.clang_tsan,
290  pw_target_toolchain_host.gcc_debug,
291  pw_target_toolchain_host.gcc_speed_optimized,
292  pw_target_toolchain_host.gcc_size_optimized,
293]
294
295# Additional configuration intended only for upstream Pigweed use.
296_pigweed_internal = {
297  pw_status_CONFIG = "$dir_pw_status:check_if_used"
298}
299
300# Host toolchains exclusively for upstream Pigweed use. To give upstream Pigweed
301# flexibility in how it compiles code, these toolchains may not be used by
302# downstream projects.
303pw_internal_host_toolchains = [
304  {
305    name = "pw_strict_host_clang_debug"
306    _toolchain_base = pw_toolchain_host_clang.debug
307    forward_variables_from(_toolchain_base, "*", _excluded_members)
308    defaults = {
309      forward_variables_from(_toolchain_base.defaults, "*")
310      forward_variables_from(_host_common, "*")
311      forward_variables_from(_pigweed_internal, "*")
312      forward_variables_from(_os_specific_config, "*")
313      default_configs += _clang_default_configs
314    }
315  },
316  {
317    name = "pw_strict_host_clang_speed_optimized"
318    _toolchain_base = pw_toolchain_host_clang.speed_optimized
319    forward_variables_from(_toolchain_base, "*", _excluded_members)
320    defaults = {
321      forward_variables_from(_toolchain_base.defaults, "*")
322      forward_variables_from(_host_common, "*")
323      forward_variables_from(_pigweed_internal, "*")
324      forward_variables_from(_os_specific_config, "*")
325      default_configs += _clang_default_configs
326    }
327  },
328  {
329    name = "pw_strict_host_clang_size_optimized"
330    _toolchain_base = pw_toolchain_host_clang.size_optimized
331    forward_variables_from(_toolchain_base, "*", _excluded_members)
332    defaults = {
333      forward_variables_from(_toolchain_base.defaults, "*")
334      forward_variables_from(_host_common, "*")
335      forward_variables_from(_pigweed_internal, "*")
336      forward_variables_from(_os_specific_config, "*")
337      default_configs += _clang_default_configs
338    }
339  },
340  {
341    name = "pw_strict_host_gcc_debug"
342    _toolchain_base = pw_toolchain_host_gcc.debug
343    forward_variables_from(_toolchain_base, "*", _excluded_members)
344    defaults = {
345      forward_variables_from(_toolchain_base.defaults, "*")
346      forward_variables_from(_host_common, "*")
347      forward_variables_from(_pigweed_internal, "*")
348      forward_variables_from(_os_specific_config, "*")
349      default_configs += _gcc_default_configs
350    }
351  },
352  {
353    name = "pw_strict_host_gcc_speed_optimized"
354    _toolchain_base = pw_toolchain_host_gcc.speed_optimized
355    forward_variables_from(_toolchain_base, "*", _excluded_members)
356    defaults = {
357      forward_variables_from(_toolchain_base.defaults, "*")
358      forward_variables_from(_host_common, "*")
359      forward_variables_from(_pigweed_internal, "*")
360      forward_variables_from(_os_specific_config, "*")
361      default_configs += _gcc_default_configs
362    }
363  },
364  {
365    name = "pw_strict_host_gcc_size_optimized"
366    _toolchain_base = pw_toolchain_host_gcc.size_optimized
367    forward_variables_from(_toolchain_base, "*", _excluded_members)
368    defaults = {
369      forward_variables_from(_toolchain_base.defaults, "*")
370      forward_variables_from(_host_common, "*")
371      forward_variables_from(_pigweed_internal, "*")
372      forward_variables_from(_os_specific_config, "*")
373      default_configs += _gcc_default_configs
374    }
375  },
376]
377