#67221 closed defect (fixed)
luajit fails on 10.5, needs TLS
Reported by: | rmottola (Riccardo) | Owned by: | catap (Kirill A. Korinsky) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | |
Keywords: | leopard haspatch | Cc: | |
Port: | luajit |
Description
luajit refuses to compile with apple's gcc 4.0 because it needs thread-local-storage
forcing macports gcc 7 had it build
Change History (7)
comment:1 follow-up: 4 Changed 20 months ago by ryandesign (Ryan Carsten Schmidt)
comment:2 Changed 10 months ago by rmottola (Riccardo)
@ryandesign sorry for the late answer, didn't read it! Since I hit the issue again, I tried.
Your suggestion works.
Also, in the portfile I see:
compiler.blacklist {clang < 700} *gcc-4.2 macports-clang-3.3 macports-clang-3.4
But 10.5 has both 4.0 and 4.2 gcc, so paradoxically blacklisting 4.2 probably selects 4.0. I tried and it is enough to add *gcc-4.0 there
So both ways work, I think that your suggestion is conceptually cleaner, but the other follows the existing path (maybe could even be substituted).
This leads to cleang-11 being used on intel(instead of forced gcc7) which I think is what macports prefers.
Clang gives:
./lj_arch.h:127:5: error: 'TARGET_OS_IPHONE' is not defined, evaluates to 0 [-Werror,-Wundef-prefix=TARGET_OS_] #if TARGET_OS_IPHONE
which I think should be written
#ifdef TARGET_OS_IPHONE)
or pedantically as
#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
and we are done on 10.5 intel, both 32bit and 64bit.
comment:3 Changed 7 months ago by rmottola (Riccardo)
I hit this again... gcc4.0 being selected, this time I just forced gcc6 and it also worked. Didn't check this issue so I did not remember.
comment:4 follow-up: 5 Changed 7 months ago by rmottola (Riccardo)
Replying to ryandesign:
Does adding
compiler.thread_local_storage yes
to the Portfile cause the correct compiler to be selected?
yes it works, can it go in? also probably that makes the blacklist at least partially obsolete, since 4.2 was being blocked that way.
comment:5 Changed 7 months ago by ryandesign (Ryan Carsten Schmidt)
Keywords: | haspatch added |
---|---|
Owner: | set to catap |
Status: | new → assigned |
Replying to rmottola:
Clang gives:
./lj_arch.h:127:5: error: 'TARGET_OS_IPHONE' is not defined, evaluates to 0 [-Werror,-Wundef-prefix=TARGET_OS_] #if TARGET_OS_IPHONEwhich I think should be written
#ifdef TARGET_OS_IPHONE)
No, that would not be correct. TARGET_OS_
macros are always defined by the SDK to either 0
or 1
. Checking if it is defined is not equivalent to checking if it is truthy.
or pedantically as
#if defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
Yes, that would be the way to do it, now that projects are checking new TARGET_OS_
macros that are not defined in old SDKs and now that clang considers it an error to check undefined TARGET_OS_
macros.
I've submitted this fix to the developers of luajit here: https://github.com/LuaJIT/LuaJIT/pull/1189
Replying to rmottola:
Replying to ryandesign:
Does adding
compiler.thread_local_storage yes
to the Portfile cause the correct compiler to be selected?yes it works, can it go in? also probably that makes the blacklist at least partially obsolete, since 4.2 was being blocked that way.
Here's a pull request containing both fixes: https://github.com/macports/macports-ports/pull/23655
For faster service for future issues, you can submit pull requests yourself!
comment:6 Changed 7 months ago by ryandesign (Ryan Carsten Schmidt)
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Does adding
compiler.thread_local_storage yes
to the Portfile cause the correct compiler to be selected?