[Libclc-dev] [PATCH] Allow compilation depending to the LLVM version

EdB edb+libclc at sigluy.net
Sun Apr 26 14:51:16 PDT 2015


It allows to keep temporary compatibilty with older version.
For exemple, this can be use when change are not to large.
---
 configure.py                                 | 16 +++++++++++++++-
 generic/lib/LLVM3.6/subnormal_helper_func.ll |  8 ++++++++
 generic/lib/SOURCES_LLVM3.6                  |  1 +
 3 files changed, 24 insertions(+), 1 deletion(-)
 create mode 100644 generic/lib/LLVM3.6/subnormal_helper_func.ll
 create mode 100644 generic/lib/SOURCES_LLVM3.6

diff --git a/configure.py b/configure.py
index 7d4b537..1072ca8 100755
--- a/configure.py
+++ b/configure.py
@@ -70,6 +70,8 @@ if (int(llvm_version[0]) != 3 and int(llvm_version[1]) != 6):
     print "libclc requires LLVM 3.6"
     sys.exit(1)
 
+llvm_string_version = 'LLVM' + llvm_version[0] + '.' + llvm_version[1]
+
 llvm_system_libs = llvm_config(['--system-libs'])
 llvm_bindir = llvm_config(['--bindir'])
 llvm_core_libs = llvm_config(['--libs', 'core', 'bitreader', 'bitwriter']) + ' ' + \
@@ -189,6 +191,7 @@ for target in targets:
 
     objects = []
     sources_seen = set()
+    compats_seen = set()
 
     if device['gpu'] == '':
       full_target_name = target
@@ -201,6 +204,14 @@ for target in targets:
       subdir_list_file = os.path.join(libdir, 'SOURCES')
       manifest_deps.add(subdir_list_file)
       override_list_file = os.path.join(libdir, 'OVERRIDES')
+      compat_list_file = os.path.join(libdir,
+        'SOURCES_' + llvm_string_version)
+
+      # Build compat list
+      if os.path.exists(compat_list_file):
+        for compat in open(compat_list_file).readlines():
+          compat = compat.rstrip()
+          compats_seen.add(compat)
 
       # Add target overrides
       if os.path.exists(override_list_file):
@@ -214,7 +225,10 @@ for target in targets:
           sources_seen.add(src)
           obj = os.path.join(target, 'lib', src + obj_suffix + '.bc')
           objects.append(obj)
-          src_file = os.path.join(libdir, src)
+          src_path = libdir
+          if src in compats_seen:
+            src_path = os.path.join(libdir, llvm_string_version)
+          src_file = os.path.join(src_path, src)
           ext = os.path.splitext(src)[1]
           if ext == '.ll':
             b.build(obj, 'LLVM_AS', src_file)
diff --git a/generic/lib/LLVM3.6/subnormal_helper_func.ll b/generic/lib/LLVM3.6/subnormal_helper_func.ll
new file mode 100644
index 0000000..0e9764b
--- /dev/null
+++ b/generic/lib/LLVM3.6/subnormal_helper_func.ll
@@ -0,0 +1,8 @@
+ at __CLC_SUBNORMAL_DISABLE = external global i1
+
+define i1 @__clc_subnormals_disabled() #0 {
+  %disable = load i1* @__CLC_SUBNORMAL_DISABLE
+  ret i1 %disable
+}
+
+attributes #0 = { alwaysinline }
diff --git a/generic/lib/SOURCES_LLVM3.6 b/generic/lib/SOURCES_LLVM3.6
new file mode 100644
index 0000000..ee09f01
--- /dev/null
+++ b/generic/lib/SOURCES_LLVM3.6
@@ -0,0 +1 @@
+subnormal_helper_func.ll
-- 
2.3.6





More information about the Libclc-dev mailing list