summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2013-06-26 18:20:38 +0000
committerTom Stellard <thomas.stellard@amd.com>2013-06-26 18:20:38 +0000
commit7dc9242ba50572a73003bcada7a993b5eaa787a5 (patch)
tree8a149c03d69fd18bcce701926e2024bc08422c84
parent9aba71dfdcb47ea1529362290c9a13bd27ca0d5f (diff)
configure: Enable building separate libraries for target variants
git-svn-id: https://llvm.org/svn/llvm-project/libclc/trunk@184991 91177308-0d34-0410-b5e6-96231b3b80d8
-rwxr-xr-xconfigure.py117
1 files changed, 73 insertions, 44 deletions
diff --git a/configure.py b/configure.py
index 3dd9836..79cc4df 100755
--- a/configure.py
+++ b/configure.py
@@ -69,6 +69,17 @@ llvm_clang = os.path.join(llvm_bindir, 'clang')
llvm_link = os.path.join(llvm_bindir, 'llvm-link')
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--']
targets = args
@@ -128,50 +139,68 @@ for target in targets:
clang_cl_includes = ' '.join(["-I%s" % incdir for incdir in incdirs])
- # The rule for building a .bc file for the specified architecture using clang.
- clang_bc_flags = "-target %s -I`dirname $in` %s " \
- "-Dcl_clang_storage_class_specifiers " \
- "-Dcl_khr_fp64 " \
- "-emit-llvm" % (target, clang_cl_includes)
- clang_bc_rule = "CLANG_CL_BC_" + target
- c_compiler_rule(b, clang_bc_rule, "LLVM-CC", llvm_clang, clang_bc_flags)
-
- objects = []
- sources_seen = set()
-
- for libdir in libdirs:
- subdir_list_file = os.path.join(libdir, 'SOURCES')
- manifest_deps.add(subdir_list_file)
- override_list_file = os.path.join(libdir, 'OVERRIDES')
-
- # Add target overrides
- if os.path.exists(override_list_file):
- for override in open(override_list_file).readlines():
- override = override.rstrip()
- sources_seen.add(override)
-
- for src in open(subdir_list_file).readlines():
- src = src.rstrip()
- if src not in sources_seen:
- sources_seen.add(src)
- 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')
- builtins_opt_bc = os.path.join(target, 'lib', 'builtins.opt.bc')
- builtins_bc = os.path.join('built_libs', target + '.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)
- b.default(builtins_bc)
+ for device in available_targets[target]['devices']:
+ # The rule for building a .bc file for the specified architecture using clang.
+ clang_bc_flags = "-target %s -I`dirname $in` %s " \
+ "-Dcl_clang_storage_class_specifiers " \
+ "-Dcl_khr_fp64 " \
+ "-emit-llvm" % (target, clang_cl_includes)
+ if device['gpu'] != '':
+ clang_bc_flags += ' -mcpu=' + device['gpu']
+ clang_bc_rule = "CLANG_CL_BC_" + target
+ c_compiler_rule(b, clang_bc_rule, "LLVM-CC", llvm_clang, clang_bc_flags)
+
+ objects = []
+ sources_seen = set()
+
+ if device['gpu'] == '':
+ full_target_name = target
+ obj_suffix = ''
+ else:
+ full_target_name = device['gpu'] + '-' + target
+ obj_suffix = '.' + device['gpu']
+
+ for libdir in libdirs:
+ subdir_list_file = os.path.join(libdir, 'SOURCES')
+ manifest_deps.add(subdir_list_file)
+ override_list_file = os.path.join(libdir, 'OVERRIDES')
+
+ # Add target overrides
+ if os.path.exists(override_list_file):
+ for override in open(override_list_file).readlines():
+ override = override.rstrip()
+ sources_seen.add(override)
+
+ for src in open(subdir_list_file).readlines():
+ src = src.rstrip()
+ 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' %