# -*- Python -*- import os import platform import lit.formats def get_required_attr(config, attr_name): attr_value = getattr(config, attr_name, None) if attr_value == None: lit_config.fatal( "No attribute %r in test configuration! You may need to run " "tests from your build directory or add this attribute " "to lit.site.cfg.py " % attr_name) return attr_value # Setup config name. config.name = 'Builtins' + config.name_suffix # Platform-specific default Builtins_OPTIONS for lit tests. default_builtins_opts = '' # Setup source root. config.test_source_root = os.path.dirname(__file__) # Path to the static library is_msvc = get_required_attr(config, "is_msvc") if is_msvc: base_lib = os.path.join(config.compiler_rt_libdir, "clang_rt.builtins%s.lib " % config.target_suffix) config.substitutions.append( ("%librt ", base_lib) ) elif config.host_os == 'Darwin': base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.osx.a ") config.substitutions.append( ("%librt ", base_lib + ' -lSystem ') ) else: base_lib = os.path.join(config.compiler_rt_libdir, "libclang_rt.builtins%s.a" % config.target_suffix) config.substitutions.append( ("%librt ", base_lib + ' -lc -lm ') ) builtins_source_dir = os.path.join( get_required_attr(config, "compiler_rt_src_root"), "lib", "builtins") builtins_lit_source_dir = get_required_attr(config, "builtins_lit_source_dir") extra_link_flags = ["-nodefaultlibs"] target_cflags = [get_required_attr(config, "target_cflags")] target_cflags += ['-fno-builtin', '-I', builtins_source_dir] target_cflags += extra_link_flags target_cxxflags = config.cxx_mode_flags + target_cflags clang_builtins_static_cflags = ([""] + config.debug_info_flags + target_cflags) clang_builtins_static_cxxflags = config.cxx_mode_flags + \ clang_builtins_static_cflags clang_builtins_cflags = clang_builtins_static_cflags clang_builtins_cxxflags = clang_builtins_static_cxxflags # FIXME: Right now we don't compile the C99 complex builtins when using # clang-cl. Fix that. if not is_msvc: config.available_features.add('c99-complex') builtins_is_msvc = get_required_attr(config, "builtins_is_msvc") if not builtins_is_msvc: config.available_features.add('int128') clang_wrapper = "" def build_invocation(compile_flags): return " " + " ".join([clang_wrapper, config.clang] + compile_flags) + " " target_arch = config.target_arch if (target_arch == "arm"): target_arch = "armv7" config.substitutions.append( ("%clang ", build_invocation(target_cflags)) ) config.substitutions.append( ("%clangxx ", build_invocation(target_cxxflags)) ) config.substitutions.append( ("%clang_builtins ", \ build_invocation(clang_builtins_cflags))) config.substitutions.append( ("%clangxx_builtins ", \ build_invocation(clang_builtins_cxxflags))) # FIXME: move the call_apsr.s into call_apsr.h as inline-asm. # some ARM tests needs call_apsr.s call_apsr_source = os.path.join(builtins_lit_source_dir, 'arm', 'call_apsr.S') march_flag = '-march=' + target_arch call_apsr_flags = ['-c', march_flag, call_apsr_source] config.substitutions.append( ("%arm_call_apsr ", \ build_invocation(call_apsr_flags)) ) # Default test suffixes. config.suffixes = ['.c', '.cpp'] if not config.emulator: config.available_features.add('native-run') # Add features for available sources builtins_source_features = config.builtins_lit_source_features.split(';') # Sanity checks if not builtins_source_features: lit_config.fatal('builtins_source_features cannot be empty') builtins_source_features_set = set() builtins_source_feature_duplicates = [] for builtin_source_feature in builtins_source_features: if len(builtin_source_feature) == 0: lit_config.fatal('builtins_source_feature cannot contain empty features') if builtin_source_feature not in builtins_source_features_set: builtins_source_features_set.add(builtin_source_feature) else: builtins_source_feature_duplicates.append(builtin_source_feature) if len(builtins_source_feature_duplicates) > 0: # FIXME(dliew): There's a bug in the build system for powerpc where two definitions of the same # function are present in the library. So just downgrade this to a warning until this is fixed. lit_config.warning( 'builtins_source_features contains duplicates: {}'.format( builtins_source_feature_duplicates) ) config.available_features.update(builtins_source_features)