-
Notifications
You must be signed in to change notification settings - Fork 611
/
configure_bazel.py
72 lines (62 loc) · 2.9 KB
/
configure_bazel.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# Copyright 2020 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
import platform
import os
import subprocess
import sys
def detect_unix_platform_config(bazelrc):
# This is hoaky. Ideally, bazel had any kind of rational way of selecting
# options from within its environment (key word: "rational"), but sadly, it
# is unintelligible to mere mortals. Why should a build system have a way for
# people to condition their build options on what compiler they are using
# (without descending down the hole of deciphering what a Bazel toolchain is)?
# All I want to do is set a couple of project specific warning options!
if platform.system() == "Darwin":
print(f"build --config=macos_clang", file=bazelrc)
print(f"build:release --config=macos_clang_release", file=bazelrc)
else:
# If the user specified a CXX environment var, bazel will later respect that,
# so we just see if it says "clang".
cxx = os.environ.get("CXX")
cc = os.environ.get("CC")
if (cxx is not None and cc is None) or (cxx is None and cc is not None):
print(
"WARNING: Only one of CXX or CC is set, which can confuse bazel. "
"Recommend: set both appropriately (or none)"
)
if cc is not None and cxx is not None:
# Persist the variables.
print(f'build --action_env CC="{cc}"', file=bazelrc)
print(f'build --action_env CXX="{cxx}"', file=bazelrc)
else:
print(
"WARNING: CC and CXX are not set, which can cause mismatches between "
"flag configurations and compiler. Recommend setting them explicitly."
)
if cxx is not None and "clang" in cxx:
print(f"Choosing generic_clang config because CXX is set to clang ({cxx})")
print(f"build --config=generic_clang", file=bazelrc)
print(f"build:release --config=generic_clang_release", file=bazelrc)
else:
print(
f"Choosing generic_gcc config by default because no CXX set or "
f"not recognized as clang ({cxx})"
)
print(f"build --config=generic_gcc", file=bazelrc)
print(f"build:release --config=generic_gcc_release", file=bazelrc)
def write_platform(bazelrc):
if platform.system() == "Windows":
print(f"build --config=msvc", file=bazelrc)
print(f"build:release --config=msvc_release", file=bazelrc)
else:
detect_unix_platform_config(bazelrc)
if len(sys.argv) > 1:
local_bazelrc = sys.argv[1]
else:
local_bazelrc = os.path.join(os.path.dirname(__file__), "configured.bazelrc")
with open(local_bazelrc, "wt") as bazelrc:
write_platform(bazelrc)
print("Wrote", local_bazelrc)