configure: Enable building separate libraries for target variants
llvm-svn: 184991
This commit is contained in:
parent
5668ea2d48
commit
30f554b23d
@ -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' %
|
||||||
|
Loading…
x
Reference in New Issue
Block a user