[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