blob: e290ce107169b8707491db1b105eb14fbc79e4bf [file] [log] [blame]
Weiming Zhao3a695122017-03-27 23:57:44 +00001# -*- Python -*-
2
3import os
4import platform
5
6import lit.formats
7
8def get_required_attr(config, attr_name):
9 attr_value = getattr(config, attr_name, None)
10 if attr_value == None:
11 lit_config.fatal(
12 "No attribute %r in test configuration! You may need to run "
13 "tests from your build directory or add this attribute "
Reid Kleckner8007ff12019-06-27 20:56:04 +000014 "to lit.site.cfg.py " % attr_name)
Weiming Zhao3a695122017-03-27 23:57:44 +000015 return attr_value
16
17# Setup config name.
18config.name = 'Builtins' + config.name_suffix
19
20# Platform-specific default Builtins_OPTIONS for lit tests.
21default_builtins_opts = ''
22
23# Setup source root.
24config.test_source_root = os.path.dirname(__file__)
25
26# Path to the static library
Reid Klecknerdffe5a32018-11-01 00:00:03 +000027is_msvc = get_required_attr(config, "is_msvc")
Reid Kleckner8c78ca22017-04-07 16:35:09 +000028if is_msvc:
Petr Hosek887f26d2018-06-28 03:11:52 +000029 base_lib = os.path.join(config.compiler_rt_libdir, "clang_rt.builtins%s.lib "
30 % config.target_suffix)
Reid Kleckner8c78ca22017-04-07 16:35:09 +000031 config.substitutions.append( ("%librt ", base_lib) )
32else:
Petr Hosek887f26d2018-06-28 03:11:52 +000033 base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins%s.a"
34 % config.target_suffix)
Reid Kleckner8c78ca22017-04-07 16:35:09 +000035 config.substitutions.append( ("%librt ", base_lib + ' -lc -lm ') )
Weiming Zhao3a695122017-03-27 23:57:44 +000036
37builtins_source_dir = os.path.join(
38 get_required_attr(config, "compiler_rt_src_root"), "lib", "builtins")
39builtins_lit_source_dir = get_required_attr(config, "builtins_lit_source_dir")
40
41extra_link_flags = ["-nodefaultlibs"]
Weiming Zhao3a695122017-03-27 23:57:44 +000042
43target_cflags = [get_required_attr(config, "target_cflags")]
44target_cflags += ['-fno-builtin', '-I', builtins_source_dir]
45target_cflags += extra_link_flags
46target_cxxflags = config.cxx_mode_flags + target_cflags
47clang_builtins_static_cflags = ([""] +
48 config.debug_info_flags + target_cflags)
49clang_builtins_static_cxxflags = config.cxx_mode_flags + \
50 clang_builtins_static_cflags
51
52clang_builtins_cflags = clang_builtins_static_cflags
53clang_builtins_cxxflags = clang_builtins_static_cxxflags
54
Reid Klecknerdffe5a32018-11-01 00:00:03 +000055# FIXME: Right now we don't compile the C99 complex builtins when using
56# clang-cl. Fix that.
Reid Kleckner8c78ca22017-04-07 16:35:09 +000057if not is_msvc:
58 config.available_features.add('c99-complex')
Weiming Zhao3a695122017-03-27 23:57:44 +000059
Reid Klecknerdffe5a32018-11-01 00:00:03 +000060builtins_is_msvc = get_required_attr(config, "builtins_is_msvc")
61if not builtins_is_msvc:
62 config.available_features.add('int128')
63
Weiming Zhao3a695122017-03-27 23:57:44 +000064clang_wrapper = ""
65
66def build_invocation(compile_flags):
67 return " " + " ".join([clang_wrapper, config.clang] + compile_flags) + " "
68
69
70target_arch = config.target_arch
71if (target_arch == "arm"):
72 target_arch = "armv7"
73
74config.substitutions.append( ("%clang ", build_invocation(target_cflags)) )
75config.substitutions.append( ("%clangxx ", build_invocation(target_cxxflags)) )
76config.substitutions.append( ("%clang_builtins ", \
77 build_invocation(clang_builtins_cflags)))
78config.substitutions.append( ("%clangxx_builtins ", \
79 build_invocation(clang_builtins_cxxflags)))
80
81# FIXME: move the call_apsr.s into call_apsr.h as inline-asm.
82# some ARM tests needs call_apsr.s
83call_apsr_source = os.path.join(builtins_lit_source_dir, 'arm', 'call_apsr.S')
84march_flag = '-march=' + target_arch
85call_apsr_flags = ['-c', march_flag, call_apsr_source]
86config.substitutions.append( ("%arm_call_apsr ", \
87 build_invocation(call_apsr_flags)) )
88
89# Default test suffixes.
Nico Weber307beb12019-08-05 19:25:35 +000090config.suffixes = ['.c', '.cpp']
Weiming Zhao3a695122017-03-27 23:57:44 +000091
92if not config.emulator:
93 config.available_features.add('native-run')