blob: 323984a92711570ac93cfe5afcca8943f456535b [file] [log] [blame]
Armando Montanez164624f2020-06-10 15:00:29 -07001# Copyright 2020 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
Armando Montanez164624f2020-06-10 15:00:29 -070015import("//build_overrides/pigweed.gni")
16
Wyatt Heplerae93f422020-12-14 11:46:19 -080017import("$dir_pw_chrono/backend.gni")
Armando Montanezccc3ee12020-06-11 16:36:11 -070018import("$dir_pw_protobuf_compiler/proto.gni")
Wyatt Heplerae93f422020-12-14 11:46:19 -080019import("$dir_pw_rpc/system_server/backend.gni")
20import("$dir_pw_sync/backend.gni")
Wyatt Heplercb9a8922020-12-16 10:19:41 -080021import("$dir_pw_sys_io/backend.gni")
Alexei Frolovdd6fa5c2020-08-11 10:04:01 -070022import("$dir_pw_third_party/nanopb/nanopb.gni")
Ewout van Bekkume3b56032020-12-22 12:00:18 -080023import("$dir_pw_thread/backend.gni")
Armando Montanez164624f2020-06-10 15:00:29 -070024import("$dir_pw_toolchain/host_clang/toolchains.gni")
25import("$dir_pw_toolchain/host_gcc/toolchains.gni")
Armando Montanez8104e8f2021-03-06 15:09:52 -080026import("$dir_pw_trace/backend.gni")
27import("$dir_pw_trace_tokenized/config.gni")
Wyatt Heplerd49f8fe2020-10-15 10:13:47 -070028
Armando Montanez164624f2020-06-10 15:00:29 -070029_host_common = {
30 # Use logging-based test output on host.
31 pw_unit_test_MAIN = "$dir_pw_unit_test:logging_main"
32
33 # Configure backend for assert facade.
34 pw_assert_BACKEND = "$dir_pw_assert_basic"
35
36 # Configure backend for logging facade.
37 pw_log_BACKEND = "$dir_pw_log_basic"
38
Ewout van Bekkum58901932020-11-09 12:46:52 -080039 # Configure backends for pw_sync's facades.
Ewout van Bekkumda2a62d2021-03-12 11:34:47 -080040 pw_sync_INTERRUPT_SPIN_LOCK_BACKEND = "$dir_pw_sync_stl:interrupt_spin_lock"
Anthony DiGirolamocce560d2021-04-29 19:02:51 -070041 pw_sync_BINARY_SEMAPHORE_BACKEND = "$dir_pw_sync_stl:binary_semaphore_backend"
42 pw_sync_COUNTING_SEMAPHORE_BACKEND =
43 "$dir_pw_sync_stl:counting_semaphore_backend"
44 pw_sync_MUTEX_BACKEND = "$dir_pw_sync_stl:mutex_backend"
45 pw_sync_TIMED_MUTEX_BACKEND = "$dir_pw_sync_stl:timed_mutex_backend"
Ewout van Bekkumf0106062021-05-06 14:08:33 -070046 pw_sync_THREAD_NOTIFICATION_BACKEND =
47 "$dir_pw_sync:binary_semaphore_thread_notification_backend"
48 pw_sync_TIMED_THREAD_NOTIFICATION_BACKEND =
49 "$dir_pw_sync:binary_semaphore_timed_thread_notification_backend"
Ewout van Bekkum58901932020-11-09 12:46:52 -080050
Armando Montanez164624f2020-06-10 15:00:29 -070051 # Configure backend for pw_sys_io facade.
52 pw_sys_io_BACKEND = "$dir_pw_sys_io_stdio"
Armando Montanezccc3ee12020-06-11 16:36:11 -070053
Jiaming Wang35b4ea32020-10-06 15:23:48 -070054 # Configure backend for pw_rpc_system_server.
Alexei Froloveb94e962020-12-29 16:15:40 -080055 pw_rpc_system_server_BACKEND = "$dir_pigweed/targets/host:system_rpc_server"
Jiaming Wang35b4ea32020-10-06 15:23:48 -070056
Robert Oliver21dcf272020-05-12 15:41:52 -040057 # Configure backend for trace facade.
58 pw_trace_BACKEND = "$dir_pw_trace_tokenized"
59
Robert Oliver6d05de12020-07-13 15:10:42 -040060 # Tokenizer trace time.
61 pw_trace_tokenizer_time = "$dir_pw_trace_tokenized:host_trace_time"
Robert Oliver21dcf272020-05-12 15:41:52 -040062
Ewout van Bekkum21404842021-06-08 11:06:17 -070063 # Configure backend for pw_chrono's facades.
Ewout van Bekkum3c61ae92020-10-30 15:52:25 -070064 pw_chrono_SYSTEM_CLOCK_BACKEND = "$dir_pw_chrono_stl:system_clock"
Ewout van Bekkum21404842021-06-08 11:06:17 -070065 pw_chrono_SYSTEM_TIMER_BACKEND = "$dir_pw_chrono_stl:system_timer"
Ewout van Bekkum3c61ae92020-10-30 15:52:25 -070066
Anthony DiGirolamocce560d2021-04-29 19:02:51 -070067 # Configure backends for pw_thread's facades.
68 pw_thread_ID_BACKEND = "$dir_pw_thread_stl:id"
69 pw_thread_YIELD_BACKEND = "$dir_pw_thread_stl:yield"
70 pw_thread_THREAD_BACKEND = "$dir_pw_thread_stl:thread"
71
Wyatt Hepler8bd4fb02021-05-03 15:30:58 -070072 pw_build_LINK_DEPS = [] # Explicit list overwrite required by GN
Ewout van Bekkumeac94402021-05-07 16:58:42 -070073 pw_build_LINK_DEPS = [
74 "$dir_pw_assert:impl",
75 "$dir_pw_log:impl",
76 ]
Wyatt Hepler8bd4fb02021-05-03 15:30:58 -070077
Michael Spang6a845952020-08-13 19:04:19 -040078 # Specify builtin GN variables.
79 current_os = host_os
80 current_cpu = host_cpu
Armando Montanez164624f2020-06-10 15:00:29 -070081}
82
83# Linux-specific target configuration.
84_linux_config = {
85 pw_bloat_BLOATY_CONFIG = get_path_info("linux.bloaty", "abspath")
86 pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test", "abspath")
87}
88
89# macOS-specific target configuration.
90_mac_config = {
91 pw_bloat_BLOATY_CONFIG = get_path_info("macos.bloaty", "abspath")
92 pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test", "abspath")
93}
94
95# Windows-specific target configuration.
96_win_config = {
97 # This is here as bloaty_config_file cannot be an empty string or GN fails.
98 # TODO(frolv): Add this file and enable size reports on Windows.
99 pw_bloat_BLOATY_CONFIG = get_path_info("windows.bloaty", "abspath")
100 pw_unit_test_AUTOMATIC_RUNNER = get_path_info("run_test.bat", "abspath")
101}
102
Anthony DiGirolamocce560d2021-04-29 19:02:51 -0700103# TODO(ewout): figure out why MingGW's sleep doesn't work correctly or provide
104# a wrapper which sleeps until our contract is met.
Ewout van Bekkum9618d8a2020-11-09 12:46:52 -0800105_win_incompatible_config = {
Ewout van Bekkume3b56032020-12-22 12:00:18 -0800106 pw_thread_SLEEP_BACKEND = "$dir_pw_thread_stl:sleep"
Ewout van Bekkum9618d8a2020-11-09 12:46:52 -0800107}
108
Armando Montanez164624f2020-06-10 15:00:29 -0700109_os_specific_config = {
110 if (host_os == "linux") {
111 forward_variables_from(_linux_config, "*")
Ewout van Bekkum9618d8a2020-11-09 12:46:52 -0800112 forward_variables_from(_win_incompatible_config, "*")
Armando Montanez164624f2020-06-10 15:00:29 -0700113 } else if (host_os == "mac") {
114 forward_variables_from(_mac_config, "*")
Ewout van Bekkum9618d8a2020-11-09 12:46:52 -0800115 forward_variables_from(_win_incompatible_config, "*")
Armando Montanez164624f2020-06-10 15:00:29 -0700116 } else if (host_os == "win") {
117 forward_variables_from(_win_config, "*")
118 }
119}
120
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700121_clang_default_configs = [
122 "$dir_pw_build:extra_strict_warnings",
123 "$dir_pw_build:clang_thread_safety_warnings",
124]
Wyatt Heplera77e5e72021-04-09 17:38:39 -0700125_gcc_default_configs = [
126 "$dir_pw_build:extra_strict_warnings",
127 "$dir_pw_toolchain/host_gcc:threading_support",
128]
Ewout van Bekkumfa1fc662020-10-16 16:11:13 -0700129
Armando Montanez164624f2020-06-10 15:00:29 -0700130pw_target_toolchain_host = {
Armando Montanezd9a8a342020-06-11 13:42:03 -0700131 _excluded_members = [
132 "defaults",
133 "name",
134 ]
135
Armando Montanez164624f2020-06-10 15:00:29 -0700136 clang_debug = {
Armando Montanezd9a8a342020-06-11 13:42:03 -0700137 name = "host_clang_debug"
138 _toolchain_base = pw_toolchain_host_clang.debug
139 forward_variables_from(_toolchain_base, "*", _excluded_members)
Armando Montanez164624f2020-06-10 15:00:29 -0700140 defaults = {
Armando Montanez164624f2020-06-10 15:00:29 -0700141 forward_variables_from(_toolchain_base.defaults, "*")
142 forward_variables_from(_host_common, "*")
143 forward_variables_from(_os_specific_config, "*")
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700144 default_configs += _clang_default_configs
Armando Montanez164624f2020-06-10 15:00:29 -0700145 }
146 }
147
148 clang_speed_optimized = {
Armando Montanezd9a8a342020-06-11 13:42:03 -0700149 name = "host_clang_speed_optimized"
150 _toolchain_base = pw_toolchain_host_clang.speed_optimized
151 forward_variables_from(_toolchain_base, "*", _excluded_members)
Armando Montanez164624f2020-06-10 15:00:29 -0700152 defaults = {
Armando Montanez164624f2020-06-10 15:00:29 -0700153 forward_variables_from(_toolchain_base.defaults, "*")
154 forward_variables_from(_host_common, "*")
155 forward_variables_from(_os_specific_config, "*")
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700156 default_configs += _clang_default_configs
Armando Montanez164624f2020-06-10 15:00:29 -0700157 }
158 }
159
160 clang_size_optimized = {
Armando Montanezd9a8a342020-06-11 13:42:03 -0700161 name = "host_clang_size_optimized"
162 _toolchain_base = pw_toolchain_host_clang.size_optimized
163 forward_variables_from(_toolchain_base, "*", _excluded_members)
Armando Montanez164624f2020-06-10 15:00:29 -0700164 defaults = {
Armando Montanez164624f2020-06-10 15:00:29 -0700165 forward_variables_from(_toolchain_base.defaults, "*")
166 forward_variables_from(_host_common, "*")
167 forward_variables_from(_os_specific_config, "*")
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700168 default_configs += _clang_default_configs
Armando Montanez164624f2020-06-10 15:00:29 -0700169 }
170 }
171
Ali Zhang58765582021-01-29 12:04:06 -0800172 clang_fuzz = {
173 name = "host_clang_fuzz"
174 _toolchain_base = pw_toolchain_host_clang.fuzz
175 forward_variables_from(_toolchain_base, "*", _excluded_members)
176 defaults = {
177 forward_variables_from(_toolchain_base.defaults, "*")
178 forward_variables_from(_host_common, "*")
179 forward_variables_from(_os_specific_config, "*")
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700180 default_configs += _clang_default_configs
Ali Zhang58765582021-01-29 12:04:06 -0800181 }
182 }
183
Armando Montanez164624f2020-06-10 15:00:29 -0700184 gcc_debug = {
Armando Montanezd9a8a342020-06-11 13:42:03 -0700185 name = "host_gcc_debug"
186 _toolchain_base = pw_toolchain_host_gcc.debug
187 forward_variables_from(_toolchain_base, "*", _excluded_members)
Armando Montanez164624f2020-06-10 15:00:29 -0700188 defaults = {
Armando Montanez164624f2020-06-10 15:00:29 -0700189 forward_variables_from(_toolchain_base.defaults, "*")
190 forward_variables_from(_host_common, "*")
191 forward_variables_from(_os_specific_config, "*")
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700192 default_configs += _gcc_default_configs
Armando Montanez164624f2020-06-10 15:00:29 -0700193 }
194 }
195
196 gcc_speed_optimized = {
Armando Montanezd9a8a342020-06-11 13:42:03 -0700197 name = "host_gcc_speed_optimized"
198 _toolchain_base = pw_toolchain_host_gcc.speed_optimized
199 forward_variables_from(_toolchain_base, "*", _excluded_members)
Armando Montanez164624f2020-06-10 15:00:29 -0700200 defaults = {
Armando Montanez164624f2020-06-10 15:00:29 -0700201 forward_variables_from(_toolchain_base.defaults, "*")
202 forward_variables_from(_host_common, "*")
203 forward_variables_from(_os_specific_config, "*")
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700204 default_configs += _gcc_default_configs
Armando Montanez164624f2020-06-10 15:00:29 -0700205 }
206 }
207
208 gcc_size_optimized = {
Armando Montanezd9a8a342020-06-11 13:42:03 -0700209 name = "host_gcc_size_optimized"
210 _toolchain_base = pw_toolchain_host_gcc.size_optimized
211 forward_variables_from(_toolchain_base, "*", _excluded_members)
Armando Montanez164624f2020-06-10 15:00:29 -0700212 defaults = {
Armando Montanez164624f2020-06-10 15:00:29 -0700213 forward_variables_from(_toolchain_base.defaults, "*")
214 forward_variables_from(_host_common, "*")
215 forward_variables_from(_os_specific_config, "*")
Ewout van Bekkumcc9ef832021-04-08 08:51:16 -0700216 default_configs += _gcc_default_configs
Armando Montanez164624f2020-06-10 15:00:29 -0700217 }
218 }
219}
220
Armando Montanezd9a8a342020-06-11 13:42:03 -0700221# This list just contains the members of the above scope for convenience to make
222# it trivial to generate all the toolchains in this file via a
223# `generate_toolchains` target.
Armando Montanez164624f2020-06-10 15:00:29 -0700224pw_target_toolchain_host_list = [
225 pw_target_toolchain_host.clang_debug,
226 pw_target_toolchain_host.clang_speed_optimized,
227 pw_target_toolchain_host.clang_size_optimized,
Ali Zhang58765582021-01-29 12:04:06 -0800228 pw_target_toolchain_host.clang_fuzz,
Armando Montanez164624f2020-06-10 15:00:29 -0700229 pw_target_toolchain_host.gcc_debug,
230 pw_target_toolchain_host.gcc_speed_optimized,
231 pw_target_toolchain_host.gcc_size_optimized,
232]