1e509ee18Sopenharmony_ci# Copyright (c) 2022 Huawei Device Co., Ltd.
2e509ee18Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
3e509ee18Sopenharmony_ci# you may not use this file except in compliance with the License.
4e509ee18Sopenharmony_ci# You may obtain a copy of the License at
5e509ee18Sopenharmony_ci#
6e509ee18Sopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0
7e509ee18Sopenharmony_ci#
8e509ee18Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
9e509ee18Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
10e509ee18Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11e509ee18Sopenharmony_ci# See the License for the specific language governing permissions and
12e509ee18Sopenharmony_ci# limitations under the License.
13e509ee18Sopenharmony_cideclare_args() {
14e509ee18Sopenharmony_ci  ark_standalone_build = true
15e509ee18Sopenharmony_ci  use_musl = true
16e509ee18Sopenharmony_ci  build_root = "//arkcompiler/toolchain/build"
17e509ee18Sopenharmony_ci  run_with_qemu = false
18e509ee18Sopenharmony_ci  so_dir_for_qemu = "common/common/libc"
19e509ee18Sopenharmony_ci  enable_lto_O0 = false
20e509ee18Sopenharmony_ci  disable_force_gc = false
21e509ee18Sopenharmony_ci  timeout = 1200
22e509ee18Sopenharmony_ci}
23e509ee18Sopenharmony_ci
24e509ee18Sopenharmony_cicheck_mac_system_and_cpu_script =
25e509ee18Sopenharmony_ci    rebase_path("$build_root/scripts/check_mac_system_and_cpu.py")
26e509ee18Sopenharmony_cicheck_darwin_system_result =
27e509ee18Sopenharmony_ci    exec_script(check_mac_system_and_cpu_script, [ "system" ], "string")
28e509ee18Sopenharmony_ci
29e509ee18Sopenharmony_ciif (check_darwin_system_result != "") {
30e509ee18Sopenharmony_ci  check_mac_host_cpu_result =
31e509ee18Sopenharmony_ci      exec_script(check_mac_system_and_cpu_script, [ "cpu" ], "string")
32e509ee18Sopenharmony_ci  if (check_mac_host_cpu_result != "") {
33e509ee18Sopenharmony_ci    host_cpu = "arm64"
34e509ee18Sopenharmony_ci  }
35e509ee18Sopenharmony_ci}
36e509ee18Sopenharmony_ci
37e509ee18Sopenharmony_ciif (host_os == "linux") {
38e509ee18Sopenharmony_ci  host_platform_dir = "linux-x86_64"
39e509ee18Sopenharmony_ci} else if (host_os == "mac") {
40e509ee18Sopenharmony_ci  if (host_cpu == "arm64") {
41e509ee18Sopenharmony_ci    host_platform_dir = "darwin-arm64"
42e509ee18Sopenharmony_ci  } else {
43e509ee18Sopenharmony_ci    host_platform_dir = "darwin-x86_64"
44e509ee18Sopenharmony_ci  }
45e509ee18Sopenharmony_ci} else {
46e509ee18Sopenharmony_ci  assert(false, "Unsupported host_os: $host_os")
47e509ee18Sopenharmony_ci}
48e509ee18Sopenharmony_ci
49e509ee18Sopenharmony_cideclare_args() {
50e509ee18Sopenharmony_ci  # Debug build. Enabling official builds automatically sets is_debug to false.
51e509ee18Sopenharmony_ci  is_debug = false
52e509ee18Sopenharmony_ci  is_standard_system = false
53e509ee18Sopenharmony_ci}
54e509ee18Sopenharmony_ci
55e509ee18Sopenharmony_cideclare_args() {
56e509ee18Sopenharmony_ci  # Enable mini debug info, it will add .gnu_debugdata
57e509ee18Sopenharmony_ci  # section in each stripped sofile
58e509ee18Sopenharmony_ci
59e509ee18Sopenharmony_ci  # Currently, we don't publish ohos-adapted python on m1 platform,
60e509ee18Sopenharmony_ci  # So that we disable mini debug info on m1 platform until
61e509ee18Sopenharmony_ci  # ohos-adapted python publishing on m1 platform
62e509ee18Sopenharmony_ci  if (host_os == "mac") {
63e509ee18Sopenharmony_ci    full_mini_debug = false
64e509ee18Sopenharmony_ci  } else {
65e509ee18Sopenharmony_ci    full_mini_debug = true
66e509ee18Sopenharmony_ci  }
67e509ee18Sopenharmony_ci}
68e509ee18Sopenharmony_ci
69e509ee18Sopenharmony_cideclare_args() {
70e509ee18Sopenharmony_ci  host_toolchain = ""
71e509ee18Sopenharmony_ci  custom_toolchain = ""
72e509ee18Sopenharmony_ci  target_toolchain = ""
73e509ee18Sopenharmony_ci
74e509ee18Sopenharmony_ci  is_clang = current_os != "linux" ||
75e509ee18Sopenharmony_ci             (current_cpu != "s390x" && current_cpu != "s390" &&
76e509ee18Sopenharmony_ci              current_cpu != "ppc64" && current_cpu != "ppc" &&
77e509ee18Sopenharmony_ci              current_cpu != "mips" && current_cpu != "mips64")
78e509ee18Sopenharmony_ci
79e509ee18Sopenharmony_ci  target_platform = "phone"
80e509ee18Sopenharmony_ci
81e509ee18Sopenharmony_ci  is_official_build = false
82e509ee18Sopenharmony_ci
83e509ee18Sopenharmony_ci  is_component_build = false
84e509ee18Sopenharmony_ci
85e509ee18Sopenharmony_ci  # build for cross platform
86e509ee18Sopenharmony_ci  is_arkui_x = false
87e509ee18Sopenharmony_ci}
88e509ee18Sopenharmony_ci
89e509ee18Sopenharmony_ciis_wearable_product = "${target_platform}" == "wearable"
90e509ee18Sopenharmony_ci
91e509ee18Sopenharmony_ciis_emulator = false
92e509ee18Sopenharmony_ci
93e509ee18Sopenharmony_ciif (target_os == "ohos" && target_cpu == "x86_64") {
94e509ee18Sopenharmony_ci  is_emulator = true
95e509ee18Sopenharmony_ci}
96e509ee18Sopenharmony_ci
97e509ee18Sopenharmony_ci# Determine host_toolchain. (like a constant in a build on a certain host)
98e509ee18Sopenharmony_ciif (host_toolchain == "") {
99e509ee18Sopenharmony_ci  if (host_os == "linux") {
100e509ee18Sopenharmony_ci    if (target_os != "linux") {
101e509ee18Sopenharmony_ci      host_toolchain = "$build_root/toolchain/linux:clang_$host_cpu"
102e509ee18Sopenharmony_ci    } else if (is_clang) {
103e509ee18Sopenharmony_ci      host_toolchain = "$build_root/toolchain/linux:clang_$host_cpu"
104e509ee18Sopenharmony_ci    } else {
105e509ee18Sopenharmony_ci      host_toolchain = "$build_root/toolchain/linux:$host_cpu"
106e509ee18Sopenharmony_ci    }
107e509ee18Sopenharmony_ci  } else if (host_os == "mac") {
108e509ee18Sopenharmony_ci    host_toolchain = "$build_root/toolchain/mac:clang_$host_cpu"
109e509ee18Sopenharmony_ci  } else {
110e509ee18Sopenharmony_ci    assert(false, "Unsupported host_os: $host_os")
111e509ee18Sopenharmony_ci  }
112e509ee18Sopenharmony_ci}
113e509ee18Sopenharmony_ci
114e509ee18Sopenharmony_ci# Determine default_toolchain.
115e509ee18Sopenharmony_ci# (like a constant in a build for a certain target on a certain host)
116e509ee18Sopenharmony_ci_default_toolchain = host_toolchain
117e509ee18Sopenharmony_ciif (target_os == "ohos") {
118e509ee18Sopenharmony_ci  _default_toolchain = "$build_root/toolchain/ark:ark_clang_${target_cpu}"
119e509ee18Sopenharmony_ci} else if (target_os == "linux" && target_cpu == "x64") {
120e509ee18Sopenharmony_ci  _default_toolchain = "$build_root/toolchain/linux:clang_x64"
121e509ee18Sopenharmony_ci} else if (target_os == "linux" && target_cpu == "x86") {
122e509ee18Sopenharmony_ci  _default_toolchain = "$build_root/toolchain/linux:clang_x86"
123e509ee18Sopenharmony_ci} else if (target_os == "mingw" && target_cpu == "x86_64") {
124e509ee18Sopenharmony_ci  _default_toolchain = "$build_root/toolchain/mingw:mingw_x86_64"
125e509ee18Sopenharmony_ci} else if (target_os == "android" && target_cpu == "arm64") {
126e509ee18Sopenharmony_ci  _default_toolchain = "$build_root/toolchain/aosp:aosp_clang_arm64"
127e509ee18Sopenharmony_ci} else if (target_os == "mac" && target_cpu == "arm64") {
128e509ee18Sopenharmony_ci  _default_toolchain = "$build_root/toolchain/mac:clang_arm64"
129e509ee18Sopenharmony_ci}
130e509ee18Sopenharmony_ciif (custom_toolchain != "") {
131e509ee18Sopenharmony_ci  set_default_toolchain(custom_toolchain)
132e509ee18Sopenharmony_ci} else if (_default_toolchain != "") {
133e509ee18Sopenharmony_ci  set_default_toolchain(_default_toolchain)
134e509ee18Sopenharmony_ci}
135e509ee18Sopenharmony_ci
136e509ee18Sopenharmony_ci# Determine current_cpu and current_os.
137e509ee18Sopenharmony_ci# (like a variable which could be changed during tracing deps)
138e509ee18Sopenharmony_ciif (current_cpu == "") {
139e509ee18Sopenharmony_ci  current_cpu = target_cpu
140e509ee18Sopenharmony_ci}
141e509ee18Sopenharmony_ciif (current_os == "") {
142e509ee18Sopenharmony_ci  current_os = target_os
143e509ee18Sopenharmony_ci}
144e509ee18Sopenharmony_ci
145e509ee18Sopenharmony_ci# Variables like "is_..." are already used to represent for
146e509ee18Sopenharmony_ci# "current_os == "..."" in most of the repositories. Thus, we need to make them
147e509ee18Sopenharmony_ci# change with the change of current_os.
148e509ee18Sopenharmony_ciif (current_os == "mac") {
149e509ee18Sopenharmony_ci  is_aix = false
150e509ee18Sopenharmony_ci  is_ohos = false
151e509ee18Sopenharmony_ci  is_chromeos = false
152e509ee18Sopenharmony_ci  is_linux = false
153e509ee18Sopenharmony_ci  is_mac = true
154e509ee18Sopenharmony_ci  is_nacl = false
155e509ee18Sopenharmony_ci  is_posix = true
156e509ee18Sopenharmony_ci  is_win = false
157e509ee18Sopenharmony_ci  is_mingw = false
158e509ee18Sopenharmony_ci  is_android = false
159e509ee18Sopenharmony_ci  is_ios = false
160e509ee18Sopenharmony_ci} else if (current_os == "ohos") {
161e509ee18Sopenharmony_ci  is_ohos = true
162e509ee18Sopenharmony_ci  is_linux = false
163e509ee18Sopenharmony_ci  is_mac = false
164e509ee18Sopenharmony_ci  is_posix = true
165e509ee18Sopenharmony_ci  is_win = false
166e509ee18Sopenharmony_ci  is_mingw = false
167e509ee18Sopenharmony_ci  is_android = false
168e509ee18Sopenharmony_ci  is_ios = false
169e509ee18Sopenharmony_ci} else if (current_os == "linux") {
170e509ee18Sopenharmony_ci  is_ohos = false
171e509ee18Sopenharmony_ci  is_linux = true
172e509ee18Sopenharmony_ci  is_mac = false
173e509ee18Sopenharmony_ci  is_posix = true
174e509ee18Sopenharmony_ci  is_win = false
175e509ee18Sopenharmony_ci  is_mingw = false
176e509ee18Sopenharmony_ci  is_android = false
177e509ee18Sopenharmony_ci  is_ios = false
178e509ee18Sopenharmony_ci} else if (current_os == "mingw") {
179e509ee18Sopenharmony_ci  is_ohos = false
180e509ee18Sopenharmony_ci  is_linux = false
181e509ee18Sopenharmony_ci  is_mac = false
182e509ee18Sopenharmony_ci  is_posix = true
183e509ee18Sopenharmony_ci  is_win = false
184e509ee18Sopenharmony_ci  is_mingw = true
185e509ee18Sopenharmony_ci  is_android = false
186e509ee18Sopenharmony_ci  is_ios = false
187e509ee18Sopenharmony_ci} else if (current_os == "android") {
188e509ee18Sopenharmony_ci  is_ohos = false
189e509ee18Sopenharmony_ci  is_linux = false
190e509ee18Sopenharmony_ci  is_mac = false
191e509ee18Sopenharmony_ci  is_posix = true
192e509ee18Sopenharmony_ci  is_win = false
193e509ee18Sopenharmony_ci  is_mingw = false
194e509ee18Sopenharmony_ci  is_android = true
195e509ee18Sopenharmony_ci  is_ios = false
196e509ee18Sopenharmony_ci}
197e509ee18Sopenharmony_ci
198e509ee18Sopenharmony_cidefault_compiler_configs = [
199e509ee18Sopenharmony_ci  "$build_root/config/compiler:default_warnings",
200e509ee18Sopenharmony_ci  "$build_root/config/compiler:compiler",
201e509ee18Sopenharmony_ci  "$build_root/config/compiler:default_include_dirs",
202e509ee18Sopenharmony_ci  "$build_root/config/compiler:default_optimization",
203e509ee18Sopenharmony_ci  "$build_root/config/compiler:runtime_config",
204e509ee18Sopenharmony_ci  "$build_root/config:default_libs",
205e509ee18Sopenharmony_ci  "$build_root/config/compiler:ark_code",
206e509ee18Sopenharmony_ci  "$build_root/config/compiler:no_rtti",
207e509ee18Sopenharmony_ci]
208e509ee18Sopenharmony_ci
209e509ee18Sopenharmony_cidefault_static_library_configs = default_compiler_configs
210e509ee18Sopenharmony_cidefault_source_set_configs = default_compiler_configs
211e509ee18Sopenharmony_cidefault_shared_library_configs =
212e509ee18Sopenharmony_ci    default_compiler_configs + [ "$build_root/config:shared_library_config" ]
213e509ee18Sopenharmony_cidefault_executable_configs =
214e509ee18Sopenharmony_ci    default_compiler_configs + [ "$build_root/config:executable_config" ]
215e509ee18Sopenharmony_ci
216e509ee18Sopenharmony_ciset_defaults("executable") {
217e509ee18Sopenharmony_ci  configs = default_executable_configs
218e509ee18Sopenharmony_ci}
219e509ee18Sopenharmony_ci
220e509ee18Sopenharmony_ciset_defaults("static_library") {
221e509ee18Sopenharmony_ci  configs = default_static_library_configs
222e509ee18Sopenharmony_ci}
223e509ee18Sopenharmony_ci
224e509ee18Sopenharmony_ciset_defaults("shared_library") {
225e509ee18Sopenharmony_ci  configs = default_shared_library_configs
226e509ee18Sopenharmony_ci}
227e509ee18Sopenharmony_ci
228e509ee18Sopenharmony_ciset_defaults("source_set") {
229e509ee18Sopenharmony_ci  configs = default_source_set_configs
230e509ee18Sopenharmony_ci}
231e509ee18Sopenharmony_ci
232e509ee18Sopenharmony_citarget_list = [
233e509ee18Sopenharmony_ci  "static_library",
234e509ee18Sopenharmony_ci  "shared_library",
235e509ee18Sopenharmony_ci  "source_set",
236e509ee18Sopenharmony_ci  "executable",
237e509ee18Sopenharmony_ci]
238e509ee18Sopenharmony_ci
239e509ee18Sopenharmony_ciforeach(target, target_list) {
240e509ee18Sopenharmony_ci  template(target) {
241e509ee18Sopenharmony_ci    target(target, target_name) {
242e509ee18Sopenharmony_ci      forward_variables_from(invoker, "*", [ "no_default_deps" ])
243e509ee18Sopenharmony_ci      if (!defined(deps)) {
244e509ee18Sopenharmony_ci        deps = []
245e509ee18Sopenharmony_ci      }
246e509ee18Sopenharmony_ci      if (!defined(invoker.no_default_deps) || !invoker.no_default_deps) {
247e509ee18Sopenharmony_ci        deps += [ "$build_root/config:${target}_deps" ]
248e509ee18Sopenharmony_ci      }
249e509ee18Sopenharmony_ci    }
250e509ee18Sopenharmony_ci  }
251e509ee18Sopenharmony_ci}
252