Thanks.

I have created the Jira bug ( https://gem5.atlassian.net/browse/GEM5-1115 ) and 
and submitted a fix with you as reviewer.

Thanks!

From: Gabe Black <gabe.bl...@gmail.com>
Date: Thursday, November 18, 2021 at 11:03 PM
To: gem5 Developer List <gem5-dev@gem5.org>
Cc: Arun F Rodrigues <afro...@sandia.gov>
Subject: [EXTERNAL] Re: [gem5-dev] Gem5 on MacOS/clang --as-needed flag 
detection

Hi Arun, thanks for letting us know about this. Would you mind creating a bug 
on Jira? https://gem5.atlassian.net/jira/software/c/projects/GEM5/issues

I'll have to look at this more closely, but I think this is a bug in the 
CheckLinkFlag check, where it should not set SHLINKFLAGS even if set_for_shared 
is enabled if ret is False. I don't think we want to disable set_for_shared, 
even though in this case it has the effect of also disabling that "if", which 
compensates for the fact that it's not checking ret.

Like I said I'll look at the history of this code to see if I'm missing 
something, but I think working "ret" into the check for SHLINKFLAGS is probably 
what the fix should be. Could you try that? And if that works for you, would 
you mind uploading a fix? https://www.gem5.org/contributing Please add me as a 
reviewer if you do.

Gabe

On Thu, Nov 18, 2021 at 3:53 PM Rodrigues, Arun F via gem5-dev 
<gem5-dev@gem5.org<mailto:gem5-dev@gem5.org>> wrote:
Hello,

I’m running into some issues building libgem5 on MacOS using clang. The build 
compiles correctly, but fails during linking because the LLVM linker doesn’t 
understand the –as-needed flag. It seems that gem5 is incorrectly passing this 
flag.

Buildline:
scons build/RISCV/libgem5_opt.dylib -j 8 --without-tcmalloc

Failure:
[  SHLINK]  -> RISCV/libgem5_opt.dylib
ld: unknown option: --as-needed
clang: error: linker command failed with exit code 1 (use -v to see invocation)
scons: *** [build/RISCV/libgem5_opt.dylib] Error 1

The toplevel SConstruct file, line 343 has:

conf.CheckLinkFlag('-Wl,--as-needed')

On MacOS with clang, this check returns ‘no’ since the clang linker doesn’t 
take the –as-needed flag. But, it seems that CheckLinkFlag()’s default behavior 
(set_for_shared=True) seems to be to append the flag, even if the config test 
fails.

Configure.py:

def CheckLinkFlag(context, flag, autoadd=True, set_for_shared=True):
    context.Message("Checking for linker %s support... " % flag)
    last_linkflags = context.env['LINKFLAGS']
    context.env.Append(LINKFLAGS=[flag])
    ret = context.TryLink('int main(int, char *[]) { return 0; }', '.cc')
    if not (ret and autoadd):
        context.env['LINKFLAGS'] = last_linkflags
    if set_for_shared:
        assert(autoadd)
        context.env.Append(SHLINKFLAGS=[flag])
    context.Result(ret)
    return ret

This results in the linking phase failing on MacOS.

I was able to get it to build by changing the toplevel SConstruct to:
   conf.CheckLinkFlag('-Wl,--as-needed', True, False)

I’m not too familiar with the –as-needed flag and why it is needed, so I’m 
wondering:

  *   Does this fix seem reasonable?
  *   Is the CheckLinkFlag() behavior correct? Should the flag be appended to 
SHLINKFLAGS even if the test fails?

Additional info:

  *   Clang/clang++ Apple clang version 11.0.0 (clang-1100.0.33.17)
  *   Uname -a: Darwin s1033894 19.6.0 Darwin Kernel Version 19.6.0: Sun Jul  5 
00:43:10 PDT 2020; root:xnu-6153.141.1~9/RELEASE_X86_64 x86_64


Thanks,

arun



Thanks,

arun


_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org<mailto:gem5-dev@gem5.org>
To unsubscribe send an email to 
gem5-dev-le...@gem5.org<mailto:gem5-dev-le...@gem5.org>
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to