blob: 6b19ce21a7ff46bbcccac6a0ac33d4ca374e5c9a (
plain) (
blame)
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
73
|
import subprocess
import sys
def fix(s):
if s == '/Z7' or s == '/Od' or s == '/Ob0' or s == '/D_DEBUG':
return None
# disable sanitizers for generated code
if s.startswith('-fsanitize') or s == '-Dmemory_sanitizer_enabled' or s.startswith('-fsanitize-blacklist'):
return None
# strip gcc toolchain flags (appear when crosscompiling)
if s.startswith('-fabi-version'):
return None
# remove arguments unknown to clang-cl
if s == '-fcase-insensitive-paths': # or s == '-fno-lto': # DEVTOOLSSUPPORT-3966
return None
# Paths under .ya/tools/v3/.../msvc/include are divided with '\'
return s.replace('\\', '/')
def fix_path(p):
try:
i = p.rfind('/bin/clang')
p = p[:i] + '/bin/clang-cl'
except ValueError:
pass
return p
def drop_stl(s):
if s.startswith('-I') and 'contrib/libs/cxxsupp/libcxx/include' in s:
return None
return s
def remove_additional_target(args, bpf_position):
for i in range(bpf_position):
if args[i] == '--target=aarch64-linux-gnu' and args[i + 1].startswith('-march=armv'):
return args[:i] + args[i + 2 :]
return args
if __name__ == '__main__':
is_on_win = sys.argv[1] == 'yes'
path = sys.argv[2]
args = list(filter(None, [fix(s) for s in sys.argv[3:]]))
if is_on_win:
path = fix_path(path)
try:
i = args.index('-emit-llvm')
args[i : i + 1] = ['-Xclang', '-emit-llvm']
except ValueError:
pass
args.append('-fms-compatibility-version=19')
for i in range(len(args) - 1):
if args[i] == '-target' and args[i + 1] == 'bpf':
# ymake add flags '--target=aarch64-linux-gnu -march=armv8-a' for linux-aarch
args = remove_additional_target(args, i)
# bpf should not be able to include stl headers
args = list(filter(None, [drop_stl(s) for s in args]))
break
cmd = [path] + args
rc = subprocess.call(cmd, shell=False, stderr=sys.stderr, stdout=sys.stdout)
sys.exit(rc)
|