configure: Enable building separate libraries for target variants

llvm-svn: 184991
This commit is contained in:
Tom Stellard 2013-06-26 18:20:38 +00:00
parent 5668ea2d48
commit 30f554b23d

View File

@ -69,6 +69,17 @@ llvm_clang = os.path.join(llvm_bindir, 'clang')
llvm_link = os.path.join(llvm_bindir, 'llvm-link') llvm_link = os.path.join(llvm_bindir, 'llvm-link')
llvm_opt = os.path.join(llvm_bindir, 'opt') llvm_opt = os.path.join(llvm_bindir, 'opt')
available_targets = {
'r600--' : { 'devices' :
[{'gpu' : 'cedar', 'aliases' : ['palm', 'sumo', 'sumo2', 'redwood', 'juniper']},
{'gpu' : 'cypress', 'aliases' : ['hemlock']},
{'gpu' : 'barts', 'aliases' : ['turks', 'caicos']},
{'gpu' : 'cayman', 'aliases' : ['aruba']},
{'gpu' : 'tahiti', 'aliases' : ['pitcairn', 'verde', 'oland']}]},
'nvptx--nvidiacl' : { 'devices' : [{'gpu' : '', 'aliases' : []}] },
'nvptx64--nvidiacl' : { 'devices' : [{'gpu' : '', 'aliases' : []}] }
}
default_targets = ['nvptx--nvidiacl', 'nvptx64--nvidiacl', 'r600--'] default_targets = ['nvptx--nvidiacl', 'nvptx64--nvidiacl', 'r600--']
targets = args targets = args
@ -128,50 +139,68 @@ for target in targets:
clang_cl_includes = ' '.join(["-I%s" % incdir for incdir in incdirs]) clang_cl_includes = ' '.join(["-I%s" % incdir for incdir in incdirs])
# The rule for building a .bc file for the specified architecture using clang. for device in available_targets[target]['devices']:
clang_bc_flags = "-target %s -I`dirname $in` %s " \ # The rule for building a .bc file for the specified architecture using clang.
"-Dcl_clang_storage_class_specifiers " \ clang_bc_flags = "-target %s -I`dirname $in` %s " \
"-Dcl_khr_fp64 " \ "-Dcl_clang_storage_class_specifiers " \
"-emit-llvm" % (target, clang_cl_includes) "-Dcl_khr_fp64 " \
clang_bc_rule = "CLANG_CL_BC_" + target "-emit-llvm" % (target, clang_cl_includes)
c_compiler_rule(b, clang_bc_rule, "LLVM-CC", llvm_clang, clang_bc_flags) if device['gpu'] != '':
clang_bc_flags += ' -mcpu=' + device['gpu']
objects = [] clang_bc_rule = "CLANG_CL_BC_" + target
sources_seen = set() c_compiler_rule(b, clang_bc_rule, "LLVM-CC", llvm_clang, clang_bc_flags)
for libdir in libdirs: objects = []
subdir_list_file = os.path.join(libdir, 'SOURCES') sources_seen = set()
manifest_deps.add(subdir_list_file)
override_list_file = os.path.join(libdir, 'OVERRIDES')
# Add target overrides if device['gpu'] == '':
if os.path.exists(override_list_file): full_target_name = target
for override in open(override_list_file).readlines(): obj_suffix = ''
override = override.rstrip() else:
sources_seen.add(override) full_target_name = device['gpu'] + '-' + target
obj_suffix = '.' + device['gpu']
for src in open(subdir_list_file).readlines(): for libdir in libdirs:
src = src.rstrip() subdir_list_file = os.path.join(libdir, 'SOURCES')
if src not in sources_seen: manifest_deps.add(subdir_list_file)
sources_seen.add(src) override_list_file = os.path.join(libdir, 'OVERRIDES')
obj = os.path.join(target, 'lib', src + '.bc')
objects.append(obj)
src_file = os.path.join(libdir, src)
ext = os.path.splitext(src)[1]
if ext == '.ll':
b.build(obj, 'LLVM_AS', src_file)
else:
b.build(obj, clang_bc_rule, src_file)
builtins_link_bc = os.path.join(target, 'lib', 'builtins.link.bc') # Add target overrides
builtins_opt_bc = os.path.join(target, 'lib', 'builtins.opt.bc') if os.path.exists(override_list_file):
builtins_bc = os.path.join('built_libs', target + '.bc') for override in open(override_list_file).readlines():
b.build(builtins_link_bc, "LLVM_LINK", objects) override = override.rstrip()
b.build(builtins_opt_bc, "OPT", builtins_link_bc) sources_seen.add(override)
b.build(builtins_bc, "PREPARE_BUILTINS", builtins_opt_bc, prepare_builtins)
install_files_bc.append((builtins_bc, builtins_bc)) for src in open(subdir_list_file).readlines():
install_deps.append(builtins_bc) src = src.rstrip()
b.default(builtins_bc) if src not in sources_seen:
sources_seen.add(src)
obj = os.path.join(target, 'lib', src + obj_suffix + '.bc')
objects.append(obj)
src_file = os.path.join(libdir, src)
ext = os.path.splitext(src)[1]
if ext == '.ll':
b.build(obj, 'LLVM_AS', src_file)
else:
b.build(obj, clang_bc_rule, src_file)
builtins_link_bc = os.path.join(target, 'lib', 'builtins.link' + obj_suffix + '.bc')
builtins_opt_bc = os.path.join(target, 'lib', 'builtins.opt' + obj_suffix + '.bc')
builtins_bc = os.path.join('built_libs', full_target_name + '.bc')
b.build(builtins_link_bc, "LLVM_LINK", objects)
b.build(builtins_opt_bc, "OPT", builtins_link_bc)
b.build(builtins_bc, "PREPARE_BUILTINS", builtins_opt_bc, prepare_builtins)
install_files_bc.append((builtins_bc, builtins_bc))
install_deps.append(builtins_bc)
for alias in device['aliases']:
b.rule("CREATE_ALIAS", "ln -fs %s $out" % os.path.basename(builtins_bc)
,"CREATE-ALIAS $out")
alias_file = os.path.join('built_libs', alias + '-' + target + '.bc')
b.build(alias_file, "CREATE_ALIAS", builtins_bc)
install_files_bc.append((alias_file, alias_file))
install_deps.append(alias_file)
b.default(builtins_bc)
install_cmd = ' && '.join(['mkdir -p $(DESTDIR)/%(dst)s && cp -r %(src)s $(DESTDIR)/%(dst)s' % install_cmd = ' && '.join(['mkdir -p $(DESTDIR)/%(dst)s && cp -r %(src)s $(DESTDIR)/%(dst)s' %