# 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")