72 lines
2.7 KiB
Text
72 lines
2.7 KiB
Text
|
# Copyright (c) 2023 Microsoft, GmbH
|
||
|
# Use of this source code is governed by the MIT license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
declare_args() {
|
||
|
electron_js2c_toolchain = ""
|
||
|
}
|
||
|
|
||
|
if (electron_js2c_toolchain == "") {
|
||
|
if (current_os == host_os && current_cpu == host_cpu) {
|
||
|
# This is not a cross-compile, so build the snapshot with the current
|
||
|
# toolchain.
|
||
|
electron_js2c_toolchain = current_toolchain
|
||
|
} else if (current_os == host_os && current_cpu == "x86" &&
|
||
|
host_cpu == "x64") {
|
||
|
# This is an x64 -> x86 cross-compile, but x64 hosts can usually run x86
|
||
|
# binaries built for the same OS, so build the snapshot with the current
|
||
|
# toolchain here, too.
|
||
|
electron_js2c_toolchain = current_toolchain
|
||
|
} else if (current_os == host_os && host_cpu == "arm64" &&
|
||
|
current_cpu == "arm") {
|
||
|
# Trying to compile 32-bit arm on arm64. Good luck!
|
||
|
electron_js2c_toolchain = current_toolchain
|
||
|
} else if (host_cpu == current_cpu) {
|
||
|
# Cross-build from same ISA on one OS to another. For example:
|
||
|
# * targeting win/x64 on a linux/x64 host
|
||
|
# * targeting win/arm64 on a mac/arm64 host
|
||
|
electron_js2c_toolchain = host_toolchain
|
||
|
} else if (host_cpu == "arm64" && current_cpu == "x64") {
|
||
|
# Cross-build from arm64 to intel (likely on an Apple Silicon mac).
|
||
|
electron_js2c_toolchain =
|
||
|
"//build/toolchain/${host_os}:clang_arm64_v8_$current_cpu"
|
||
|
} else if (host_cpu == "x64") {
|
||
|
# This is a cross-compile from an x64 host to either a non-Intel target
|
||
|
# cpu or to 32-bit x86 on a different target OS.
|
||
|
|
||
|
assert(current_cpu != "x64", "handled by host_cpu == current_cpu branch")
|
||
|
if (current_cpu == "x86") {
|
||
|
_cpus = current_cpu
|
||
|
} else if (current_cpu == "arm64") {
|
||
|
if (is_win) {
|
||
|
# set _cpus to blank for Windows ARM64 so host_toolchain could be
|
||
|
# selected as snapshot toolchain later.
|
||
|
_cpus = ""
|
||
|
} else {
|
||
|
_cpus = "x64_v8_${current_cpu}"
|
||
|
}
|
||
|
} else if (current_cpu == "arm") {
|
||
|
_cpus = "x86_v8_${current_cpu}"
|
||
|
} else {
|
||
|
# This branch should not be reached; leave _cpus blank so the assert
|
||
|
# below will fail.
|
||
|
_cpus = ""
|
||
|
}
|
||
|
|
||
|
if (_cpus != "") {
|
||
|
electron_js2c_toolchain = "//build/toolchain/${host_os}:clang_${_cpus}"
|
||
|
} else if (is_win && current_cpu == "arm64") {
|
||
|
# cross compile Windows arm64 with host toolchain.
|
||
|
electron_js2c_toolchain = host_toolchain
|
||
|
}
|
||
|
} else if (host_cpu == "arm64" && current_cpu == "arm64" &&
|
||
|
host_os == "mac") {
|
||
|
# cross compile iOS arm64 with host_toolchain
|
||
|
electron_js2c_toolchain = host_toolchain
|
||
|
}
|
||
|
}
|
||
|
|
||
|
assert(electron_js2c_toolchain != "",
|
||
|
"Do not know how to build js2c for $current_toolchain " +
|
||
|
"on $host_os $host_cpu")
|