mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 07:59:57 +00:00
1159e42199
Canonicalize all CMake booleans to 0/1 before passing them to lit, to ensure that the Python side handles all of them consistently and correctly. 0/1 is a safe choice of values that trigger the same boolean interpretation in CMake, Python and C++. Furthermore, using them without quotes improves the chance Python will explicitly fail when an incorrect value (such as ON/OFF, TRUE/FALSE, YES/NO) is accidentally passed, rather than silently misinterpreting the value. This replaces a lot of different logics spread around lit site files, attempting to partially reproduce the boolean logic used in CMake and usually silently failing when an uncommon value was used instead. In fact, some of them were never working correctly since different values were assigned in CMake and checked in Python. The alternative solution could be to create a common parser for CMake booleans in lit and use it consistently throughout the site files. However, it does not seem like the best idea to create redundant implementation of the same logic and have to follow upstream if it ever is extended to handle more values. Differential Revision: https://reviews.llvm.org/D28294 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291284 91177308-0d34-0410-b5e6-96231b3b80d8
61 lines
1.8 KiB
INI
61 lines
1.8 KiB
INI
import os
|
|
import pipes
|
|
import shlex
|
|
import sys
|
|
|
|
if not 'go' in config.root.llvm_bindings:
|
|
config.unsupported = True
|
|
|
|
if not config.root.include_go_tests:
|
|
config.unsupported = True
|
|
|
|
def find_executable(executable, path=None):
|
|
if path is None:
|
|
path = os.environ['PATH']
|
|
paths = path.split(os.pathsep)
|
|
base, ext = os.path.splitext(executable)
|
|
|
|
if (sys.platform == 'win32' or os.name == 'os2') and (ext != '.exe'):
|
|
executable = executable + '.exe'
|
|
|
|
if not os.path.isfile(executable):
|
|
for p in paths:
|
|
f = os.path.join(p, executable)
|
|
if os.path.isfile(f):
|
|
return f
|
|
return None
|
|
else:
|
|
return executable
|
|
|
|
# Resolve certain symlinks in the first word of compiler.
|
|
#
|
|
# This is a Go-specific hack. cgo and other Go tools check $CC and $CXX for the
|
|
# substring 'clang' to determine if the compiler is Clang. This won't work if
|
|
# $CC is cc and cc is a symlink pointing to clang, as it is on Darwin.
|
|
#
|
|
# Go tools also have problems with ccache, so we disable it.
|
|
def fixup_compiler_path(compiler):
|
|
args = shlex.split(compiler)
|
|
if args[0].endswith('ccache'):
|
|
args = args[1:]
|
|
|
|
path = find_executable(args[0])
|
|
|
|
try:
|
|
if path.endswith('/cc') and os.readlink(path) == 'clang':
|
|
args[0] = path[:len(path)-2] + 'clang'
|
|
except (AttributeError, OSError):
|
|
pass
|
|
|
|
try:
|
|
if path.endswith('/c++') and os.readlink(path) == 'clang++':
|
|
args[0] = path[:len(path)-3] + 'clang++'
|
|
except (AttributeError, OSError):
|
|
pass
|
|
|
|
return ' '.join([pipes.quote(arg) for arg in args])
|
|
|
|
config.environment['CC'] = fixup_compiler_path(config.host_cc)
|
|
config.environment['CXX'] = fixup_compiler_path(config.host_cxx)
|
|
config.environment['CGO_LDFLAGS'] = config.host_ldflags
|