scons: Disable partial linking on Mac OS
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Sun, 23 Dec 2018 11:16:27 +0000 (11:16 +0000)
committerNikos Nikoleris <nikos.nikoleris@arm.com>
Mon, 7 Jan 2019 14:52:00 +0000 (14:52 +0000)
Up until Apple LLVM version 10.0.0 (clang-1000.11.45.5), partial
linked objects do not expose symbols that are marked with the hidden
visibility and consequently building gem5 on Mac OS fails. As a
workaround, we disable partial linking, however, we may want to
revisit in the future.

Change-Id: I0a26dae082bf723c2bd49d90e4497e44ecab9c41
Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/15235
Reviewed-by: Andrea Mondelli <andrea.mondelli@ucf.edu>
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/SConscript

index 361479d574141fb78e52bd30980aff94f6608590..dc284b104104af438066095c6dadf6ec167cc672 100755 (executable)
@@ -1268,23 +1268,34 @@ needed_envs = [identifyTarget(target) for target in BUILD_TARGETS]
 if 'all' in needed_envs:
     needed_envs += target_types
 
+disable_partial = False
+if env['PLATFORM'] == 'darwin':
+    # Up until Apple LLVM version 10.0.0 (clang-1000.11.45.5), partial
+    # linked objects do not expose symbols that are marked with the
+    # hidden visibility and consequently building gem5 on Mac OS
+    # fails. As a workaround, we disable partial linking, however, we
+    # may want to revisit in the future.
+    disable_partial = True
+
 # Debug binary
 if 'debug' in needed_envs:
     makeEnv(env, 'debug', '.do',
             CCFLAGS = Split(ccflags['debug']),
             CPPDEFINES = ['DEBUG', 'TRACING_ON=1'],
-            LINKFLAGS = Split(ldflags['debug']))
+            LINKFLAGS = Split(ldflags['debug']),
+            disable_partial=disable_partial)
 
 # Optimized binary
 if 'opt' in needed_envs:
     makeEnv(env, 'opt', '.o',
             CCFLAGS = Split(ccflags['opt']),
             CPPDEFINES = ['TRACING_ON=1'],
-            LINKFLAGS = Split(ldflags['opt']))
+            LINKFLAGS = Split(ldflags['opt']),
+            disable_partial=disable_partial)
 
 # "Fast" binary
 if 'fast' in needed_envs:
-    disable_partial = \
+    disable_partial = disable_partial and \
             env.get('BROKEN_INCREMENTAL_LTO', False) and \
             GetOption('force_lto')
     makeEnv(env, 'fast', '.fo', strip = True,
@@ -1298,11 +1309,13 @@ if 'prof' in needed_envs:
     makeEnv(env, 'prof', '.po',
             CCFLAGS = Split(ccflags['prof']),
             CPPDEFINES = ['NDEBUG', 'TRACING_ON=0'],
-            LINKFLAGS = Split(ldflags['prof']))
+            LINKFLAGS = Split(ldflags['prof']),
+            disable_partial=disable_partial)
 
 # Profiled binary using google-pprof
 if 'perf' in needed_envs:
     makeEnv(env, 'perf', '.gpo',
             CCFLAGS = Split(ccflags['perf']),
             CPPDEFINES = ['NDEBUG', 'TRACING_ON=0'],
-            LINKFLAGS = Split(ldflags['perf']))
+            LINKFLAGS = Split(ldflags['perf']),
+            disable_partial=disable_partial)