This change adds a support for multiarch style runtimes layout, so in addition to the existing layout where runtimes get installed to: lib/clang/$version/lib/$os Clang now allows runtimes to be installed to: lib/clang/$version/$target/lib This also includes libc++, libc++abi and libunwind; today those are assumed to be in Clang library directory built for host, with the new layout it is possible to install libc++, libc++abi and libunwind into the runtime directory built for different targets. The use of new layout is enabled by setting the LLVM_ENABLE_RUNTIME_TARGET_DIR CMake variable and is supported by both projects and runtimes layouts. The runtimes CMake build has been further modified to use the new layout when building runtimes for multiple targets. Differential Revision: https://reviews.llvm.org/D45604 llvm-svn: 335809
88 lines
3.0 KiB
Python
88 lines
3.0 KiB
Python
# -*- 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 " % 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, "builtins_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) )
|
|
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
|
|
|
|
if not is_msvc:
|
|
config.available_features.add('c99-complex')
|
|
|
|
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', '.cc', '.cpp']
|
|
|
|
if not config.emulator:
|
|
config.available_features.add('native-run')
|