blob: 44b86f0d63995b507dadd9011c141b41fb68ecf4 [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) )
Nico Weber34b6f492019-09-14 22:22:47 +000032elif config.host_os == 'Darwin':
33 base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.osx.a ")
34 config.substitutions.append( ("%librt ", base_lib + ' -lSystem ') )
Reid Kleckner8c78ca22017-04-07 16:35:09 +000035else:
Petr Hosek887f26d2018-06-28 03:11:52 +000036 base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins%s.a"
37 % config.target_suffix)
Reid Kleckner8c78ca22017-04-07 16:35:09 +000038 config.substitutions.append( ("%librt ", base_lib + ' -lc -lm ') )
Weiming Zhao3a695122017-03-27 23:57:44 +000039
40builtins_source_dir = os.path.join(
41 get_required_attr(config, "compiler_rt_src_root"), "lib", "builtins")
42builtins_lit_source_dir = get_required_attr(config, "builtins_lit_source_dir")
43
44extra_link_flags = ["-nodefaultlibs"]
Weiming Zhao3a695122017-03-27 23:57:44 +000045
46target_cflags = [get_required_attr(config, "target_cflags")]
47target_cflags += ['-fno-builtin', '-I', builtins_source_dir]
48target_cflags += extra_link_flags
49target_cxxflags = config.cxx_mode_flags + target_cflags
50clang_builtins_static_cflags = ([""] +
51 config.debug_info_flags + target_cflags)
52clang_builtins_static_cxxflags = config.cxx_mode_flags + \
53 clang_builtins_static_cflags
54
55clang_builtins_cflags = clang_builtins_static_cflags
56clang_builtins_cxxflags = clang_builtins_static_cxxflags
57
Reid Klecknerdffe5a32018-11-01 00:00:03 +000058# FIXME: Right now we don't compile the C99 complex builtins when using
59# clang-cl. Fix that.
Reid Kleckner8c78ca22017-04-07 16:35:09 +000060if not is_msvc:
61 config.available_features.add('c99-complex')
Weiming Zhao3a695122017-03-27 23:57:44 +000062
Reid Klecknerdffe5a32018-11-01 00:00:03 +000063builtins_is_msvc = get_required_attr(config, "builtins_is_msvc")
64if not builtins_is_msvc:
65 config.available_features.add('int128')
66
Weiming Zhao3a695122017-03-27 23:57:44 +000067clang_wrapper = ""
68
69def build_invocation(compile_flags):
70 return " " + " ".join([clang_wrapper, config.clang] + compile_flags) + " "
71
72
73target_arch = config.target_arch
74if (target_arch == "arm"):
75 target_arch = "armv7"
76
77config.substitutions.append( ("%clang ", build_invocation(target_cflags)) )
78config.substitutions.append( ("%clangxx ", build_invocation(target_cxxflags)) )
79config.substitutions.append( ("%clang_builtins ", \
80 build_invocation(clang_builtins_cflags)))
81config.substitutions.append( ("%clangxx_builtins ", \
82 build_invocation(clang_builtins_cxxflags)))
83
84# FIXME: move the call_apsr.s into call_apsr.h as inline-asm.
85# some ARM tests needs call_apsr.s
86call_apsr_source = os.path.join(builtins_lit_source_dir, 'arm', 'call_apsr.S')
87march_flag = '-march=' + target_arch
88call_apsr_flags = ['-c', march_flag, call_apsr_source]
89config.substitutions.append( ("%arm_call_apsr ", \
90 build_invocation(call_apsr_flags)) )
91
92# Default test suffixes.
Nico Weber307beb12019-08-05 19:25:35 +000093config.suffixes = ['.c', '.cpp']
Weiming Zhao3a695122017-03-27 23:57:44 +000094
95if not config.emulator:
96 config.available_features.add('native-run')