| # Copyright 2015 the V8 project authors. All rights reserved. | |
| # Redistribution and use in source and binary forms, with or without | |
| # modification, are permitted provided that the following conditions are | |
| # met: | |
| # | |
| # * Redistributions of source code must retain the above copyright | |
| # notice, this list of conditions and the following disclaimer. | |
| # * Redistributions in binary form must reproduce the above | |
| # copyright notice, this list of conditions and the following | |
| # disclaimer in the documentation and/or other materials provided | |
| # with the distribution. | |
| # * Neither the name of Google Inc. nor the names of its | |
| # contributors may be used to endorse or promote products derived | |
| # from this software without specific prior written permission. | |
| # | |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
| # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
| # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
| # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
| # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
| # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
| # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
| # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
| # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| import("//build/config/v8_target_cpu.gni") | |
| declare_args() { | |
| # The v8 snapshot needs to be built by code that is compiled with a | |
| # toolchain that matches the bit-width of the target CPU, but runs on | |
| # the host. | |
| v8_snapshot_toolchain = "" | |
| } | |
| # Try to infer the appropriate snapshot toolchain for the v8_current_cpu | |
| # where possible. | |
| # | |
| # Assume that v8_target_cpu (and hence v8_current_cpu) has been validated | |
| # as supported on the current host CPU and OS in v8_target_cpu.gni. The | |
| # logic below is complicated enough without also needing to do input | |
| # validation. | |
| # | |
| # There are test cases for this code posted as an attachment to | |
| # https://crbug.com/625353. | |
| # | |
| # TODO(GYP): Currently only regular (non-cross) compiles, and cross-compiles | |
| # from x64 hosts to Intel, ARM, or MIPS targets, are implemented. Add support | |
| # for the other supported configurations. | |
| if (v8_snapshot_toolchain == "") { | |
| if (current_os == host_os && current_cpu == host_cpu) { | |
| # This is not a cross-compile, so build the snapshot with the current | |
| # toolchain. | |
| v8_snapshot_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. | |
| v8_snapshot_toolchain = current_toolchain | |
| } else if (current_os == "win" && host_os == "mac" && is_clang) { | |
| # This is a mac -> win cross-compile, which is only supported w/ clang. | |
| v8_snapshot_toolchain = "//build/toolchain/mac:clang_${v8_current_cpu}" | |
| } else if (host_cpu == "x64" && | |
| (v8_current_cpu == "mips" || v8_current_cpu == "mips64")) { | |
| # We don't support snapshot generation for big-endian targets, | |
| # therefore snapshots will need to be built using native mksnapshot | |
| # in combination with qemu | |
| v8_snapshot_toolchain = current_toolchain | |
| } else if (host_cpu == "x64") { | |
| # This is a cross-compile from an x64 host to either a non-Intel target | |
| # cpu or a different target OS. Clang will always be used by default on the | |
| # host, unless this is a ChromeOS build, in which case the same toolchain | |
| # (Clang or GCC) will be used for target and host by default. | |
| if (is_chromeos && !is_clang) { | |
| _clang = "" | |
| } else { | |
| _clang = "clang_" | |
| } | |
| if (v8_current_cpu == "x64" || v8_current_cpu == "x86") { | |
| _cpus = v8_current_cpu | |
| } else if (v8_current_cpu == "arm64" || v8_current_cpu == "mips64el") { | |
| _cpus = "x64_v8_${v8_current_cpu}" | |
| } else if (v8_current_cpu == "arm" || v8_current_cpu == "mipsel") { | |
| _cpus = "x86_v8_${v8_current_cpu}" | |
| } else { | |
| # This branch should not be reached; leave _cpus blank so the assert | |
| # below will fail. | |
| _cpus = "" | |
| } | |
| if (_cpus != "") { | |
| v8_snapshot_toolchain = "//build/toolchain/${host_os}:${_clang}${_cpus}" | |
| } | |
| } | |
| } | |
| assert(v8_snapshot_toolchain != "", | |
| "Do not know how to build a snapshot for $current_toolchain " + | |
| "on $host_os $host_cpu") |