blob: c8888078be5072210613fff26b283f2cf6338f14 [file] [log] [blame]
Weiming Zhao3a695122017-03-27 23:57:44 +00001# -*- Python -*-
2
3import os
4import platform
5
6import lit.formats
7
Sergej Jaskiewicza89d54f2020-07-09 19:36:15 +03008# Choose between lit's internal shell pipeline runner and a real shell. If
9# LIT_USE_INTERNAL_SHELL is in the environment, we use that as an override.
10use_lit_shell = os.environ.get("LIT_USE_INTERNAL_SHELL")
11if use_lit_shell:
12 # 0 is external, "" is default, and everything else is internal.
13 execute_external = (use_lit_shell == "0")
14else:
15 # Otherwise we default to internal on Windows and external elsewhere, as
16 # bash on Windows is usually very slow.
17 execute_external = (not sys.platform in ['win32'])
18
Weiming Zhao3a695122017-03-27 23:57:44 +000019def get_required_attr(config, attr_name):
20 attr_value = getattr(config, attr_name, None)
21 if attr_value == None:
22 lit_config.fatal(
23 "No attribute %r in test configuration! You may need to run "
24 "tests from your build directory or add this attribute "
Reid Kleckner8007ff12019-06-27 20:56:04 +000025 "to lit.site.cfg.py " % attr_name)
Weiming Zhao3a695122017-03-27 23:57:44 +000026 return attr_value
27
28# Setup config name.
29config.name = 'Builtins' + config.name_suffix
30
31# Platform-specific default Builtins_OPTIONS for lit tests.
32default_builtins_opts = ''
33
34# Setup source root.
35config.test_source_root = os.path.dirname(__file__)
36
37# Path to the static library
Reid Klecknerdffe5a32018-11-01 00:00:03 +000038is_msvc = get_required_attr(config, "is_msvc")
Reid Kleckner8c78ca22017-04-07 16:35:09 +000039if is_msvc:
Petr Hosek887f26d2018-06-28 03:11:52 +000040 base_lib = os.path.join(config.compiler_rt_libdir, "clang_rt.builtins%s.lib "
41 % config.target_suffix)
Reid Kleckner8c78ca22017-04-07 16:35:09 +000042 config.substitutions.append( ("%librt ", base_lib) )
Nico Weber34b6f492019-09-14 22:22:47 +000043elif config.host_os == 'Darwin':
44 base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.osx.a ")
45 config.substitutions.append( ("%librt ", base_lib + ' -lSystem ') )
Reid Kleckner8c78ca22017-04-07 16:35:09 +000046else:
Petr Hosek887f26d2018-06-28 03:11:52 +000047 base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins%s.a"
48 % config.target_suffix)
Sergej Jaskiewicza89d54f2020-07-09 19:36:15 +030049 if sys.platform in ['win32'] and execute_external:
50 # Don't pass dosish path separator to msys bash.exe.
51 base_lib = base_lib.replace('\\', '/')
Reid Kleckner8c78ca22017-04-07 16:35:09 +000052 config.substitutions.append( ("%librt ", base_lib + ' -lc -lm ') )
Weiming Zhao3a695122017-03-27 23:57:44 +000053
54builtins_source_dir = os.path.join(
55 get_required_attr(config, "compiler_rt_src_root"), "lib", "builtins")
Sergej Jaskiewicza89d54f2020-07-09 19:36:15 +030056if sys.platform in ['win32'] and execute_external:
57 # Don't pass dosish path separator to msys bash.exe.
58 builtins_source_dir = builtins_source_dir.replace('\\', '/')
Weiming Zhao3a695122017-03-27 23:57:44 +000059builtins_lit_source_dir = get_required_attr(config, "builtins_lit_source_dir")
60
61extra_link_flags = ["-nodefaultlibs"]
Weiming Zhao3a695122017-03-27 23:57:44 +000062
63target_cflags = [get_required_attr(config, "target_cflags")]
64target_cflags += ['-fno-builtin', '-I', builtins_source_dir]
65target_cflags += extra_link_flags
66target_cxxflags = config.cxx_mode_flags + target_cflags
67clang_builtins_static_cflags = ([""] +
68 config.debug_info_flags + target_cflags)
69clang_builtins_static_cxxflags = config.cxx_mode_flags + \
70 clang_builtins_static_cflags
71
72clang_builtins_cflags = clang_builtins_static_cflags
73clang_builtins_cxxflags = clang_builtins_static_cxxflags
74
Reid Klecknerdffe5a32018-11-01 00:00:03 +000075# FIXME: Right now we don't compile the C99 complex builtins when using
76# clang-cl. Fix that.
Reid Kleckner8c78ca22017-04-07 16:35:09 +000077if not is_msvc:
78 config.available_features.add('c99-complex')
Weiming Zhao3a695122017-03-27 23:57:44 +000079
Reid Klecknerdffe5a32018-11-01 00:00:03 +000080builtins_is_msvc = get_required_attr(config, "builtins_is_msvc")
81if not builtins_is_msvc:
82 config.available_features.add('int128')
83
Weiming Zhao3a695122017-03-27 23:57:44 +000084clang_wrapper = ""
85
86def build_invocation(compile_flags):
87 return " " + " ".join([clang_wrapper, config.clang] + compile_flags) + " "
88
89
90target_arch = config.target_arch
91if (target_arch == "arm"):
92 target_arch = "armv7"
93
94config.substitutions.append( ("%clang ", build_invocation(target_cflags)) )
95config.substitutions.append( ("%clangxx ", build_invocation(target_cxxflags)) )
96config.substitutions.append( ("%clang_builtins ", \
97 build_invocation(clang_builtins_cflags)))
98config.substitutions.append( ("%clangxx_builtins ", \
99 build_invocation(clang_builtins_cxxflags)))
100
101# FIXME: move the call_apsr.s into call_apsr.h as inline-asm.
102# some ARM tests needs call_apsr.s
103call_apsr_source = os.path.join(builtins_lit_source_dir, 'arm', 'call_apsr.S')
104march_flag = '-march=' + target_arch
105call_apsr_flags = ['-c', march_flag, call_apsr_source]
106config.substitutions.append( ("%arm_call_apsr ", \
107 build_invocation(call_apsr_flags)) )
108
109# Default test suffixes.
Nico Weber307beb12019-08-05 19:25:35 +0000110config.suffixes = ['.c', '.cpp']
Weiming Zhao3a695122017-03-27 23:57:44 +0000111
112if not config.emulator:
113 config.available_features.add('native-run')
Dan Liew5be7eb32019-10-17 18:12:49 +0000114
115# Add features for available sources
116builtins_source_features = config.builtins_lit_source_features.split(';')
117# Sanity checks
118if not builtins_source_features:
119 lit_config.fatal('builtins_source_features cannot be empty')
120builtins_source_features_set = set()
121builtins_source_feature_duplicates = []
122for builtin_source_feature in builtins_source_features:
123 if len(builtin_source_feature) == 0:
124 lit_config.fatal('builtins_source_feature cannot contain empty features')
125 if builtin_source_feature not in builtins_source_features_set:
126 builtins_source_features_set.add(builtin_source_feature)
127 else:
128 builtins_source_feature_duplicates.append(builtin_source_feature)
129
130if len(builtins_source_feature_duplicates) > 0:
Dan Liew23a33d42019-10-30 16:21:46 -0700131 lit_config.fatal(
Dan Liew5be7eb32019-10-17 18:12:49 +0000132 'builtins_source_features contains duplicates: {}'.format(
133 builtins_source_feature_duplicates)
134 )
135config.available_features.update(builtins_source_features)