From dcc15d6d0764b08b9ab5d52d19f24072888c575a Mon Sep 17 00:00:00 2001 From: Nikos Nikoleris Date: Sun, 23 Dec 2018 11:16:27 +0000 Subject: [PATCH] scons: Disable partial linking on Mac OS 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 Reviewed-on: https://gem5-review.googlesource.com/c/15235 Reviewed-by: Andrea Mondelli Reviewed-by: Gabe Black Maintainer: Gabe Black --- src/SConscript | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/SConscript b/src/SConscript index 361479d57..dc284b104 100755 --- a/src/SConscript +++ b/src/SConscript @@ -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) -- 2.30.2