// Copyright 2018 The Bazel Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.devtools.build.lib.rules.cpp; /** * DO NOT USE in Bazel. * *

A temporary, and very regrettable Google-only hack that allows us to support targeting other * platforms in certain cases. */ public class FakeCPU { private FakeCPU() { // Private constructor to prohibit creating objects. } /** * These are fake CPU values used to indicate that amd64 OSX / Windows should be * the targeted architecture and platform. This is a hack to support compiling * Go targeting OSX and Windows, until we have proper support for this kind of thing. * It is largely unsupported. */ public static final String DARWIN_FAKE_CPU = "x86_64-darwin"; public static final String WINDOWS_FAKE_CPU_64 = "x86_64-windows"; public static final String WINDOWS_FAKE_CPU_32 = "x86_32-windows"; public static boolean isFakeCPU(String cpu) { return DARWIN_FAKE_CPU.equals(cpu) || WINDOWS_FAKE_CPU_32.equals(cpu) || WINDOWS_FAKE_CPU_64.equals(cpu); } /** * Returns the real CPU for a (possible) fake CPU. If isFakeCPU(fakeCPU) * returns true, * this method will return the actual target CPU that should be used. * Otherwise, it * will simply return fakeCPU. */ public static String getRealCPU(String fakeCPU) { if (isFakeCPU(fakeCPU)) { // We have a special fake CPU for 32 bit Windows binaries. if (WINDOWS_FAKE_CPU_32.equals(fakeCPU)) { return "piii"; } // If targeting darwin or windows 64, pretend to be k8 so that we don't need to // mess with crosstool configurations. A big fat warning was printed by the // ConfigurationFactory warning people that they shouldn't expect anything // other than go_{binary,library} to work, so the spurious // k8 results we will return for other languages are fine. return "k8"; } else { return fakeCPU; } } }