[Mesa-dev] [PATCH] [libclc] configure: Enable building separate libraries for target variants
Aaron Watry
awatry at gmail.com
Wed Mar 13 19:57:22 PDT 2013
The python changes in this file look good to me. I haven't done a
line-by-line review of the SI changes.
I tested this patch and v2 of the related mesa series on r600g (radeon
6850) with a recent LLVM and fresh mesa master as of this evening. No real
change in the piglit CL test success/failure rate.
Do you have any interest in trying to merge your changes to date back into
the upstream libclc codebase? If you think it's a good idea, but don't
have time to do it yourself, let me know and I'll try to re-base the series
of patches.
--Aaron
On Tue, Mar 12, 2013 at 3:20 PM, Tom Stellard <tom at stellard.net> wrote:
> From: Tom Stellard <thomas.stellard at amd.com>
>
> ---
> configure.py | 119
> ++++++++++++++++++++++++++++++++++++---------------------
> 1 files changed, 75 insertions(+), 44 deletions(-)
>
> diff --git a/configure.py b/configure.py
> index d861c24..dfd9a8f 100755
> --- a/configure.py
> +++ b/configure.py
> @@ -68,6 +68,15 @@ 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']}]}
> +}
> +
> default_targets = ['r600--']
>
> targets = args
> @@ -127,50 +136,72 @@ 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()
> + # Only add the base filename (e.g. Add get_global_id instead of
> + # get_global_id.cl) to sources_seen.
> + # This allows targets to overide generic .cl sources with .ll
> sources.
> + src_base = os.path.splitext(src)[0]
> + if src_base not in sources_seen:
> + sources_seen.add(src_base)
> + 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' %
> --
> 1.7.3.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130313/0be9bd67/attachment.html>
More information about the mesa-dev
mailing list