[MacPorts] #57695: Set AR, NM and RANLIB env. variables
MacPorts
noreply at macports.org
Wed Nov 28 10:06:38 UTC 2018
#57695: Set AR, NM and RANLIB env. variables
--------------------------+--------------------
Reporter: RJVB | Owner: (none)
Type: enhancement | Status: new
Priority: Normal | Milestone:
Component: base | Version:
Resolution: | Keywords:
Port: |
--------------------------+--------------------
Description changed by RJVB:
Old description:
> I like to use link time optimisation where feasible and have learned
> through experience that this can cause link failures in projects that use
> static libraries (intermediate/private and/or public). This can be
> avoided by using a more homogeneous toolchain, i.e.
>
> {{{
> if {[string match *clang++-mp* ${configure.cxx}]} {
> configure.env-append \
> AR="[string map {"clang++" "llvm-ar"} ${configure.cxx}]"
> \
> NM="[string map {"clang++" "llvm-nm"} ${configure.cxx}]"
> \
> RANLIB="[string map {"clang++" "llvm-ranlib"}
> ${configure.cxx}]"
> } elseif {[string match *clang-mp* ${configure.cc}]} {
> configure.env-append \
> AR="[string map {"clang" "llvm-ar"} ${configure.cc}]" \
> NM="[string map {"clang" "llvm-nm"} ${configure.cc}]" \
> RANLIB="[string map {"clang" "llvm-ranlib"}
> ${configure.cc}]"
> }
> }}}
>
> The mentioned experience comes from Linux but I don't see why similar
> issues couldn't arise on Mac, for similar reasons (the default ar and/or
> ranlib not being able to create a usable static library from llvm
> objects). I think it shouldn't hurt to set the AR, NM and RANLIB env.
> variables as shown above from "base", along with CC, CXX etc.
>
> Equivalent for in the cmake PortGroup (pre-configure block):
>
> {{{
> if {[string match *clang++-mp* ${configure.cxx}]} {
> if {[string first "DCMAKE_AR=" ${configure.args}] eq -1} {
> configure.args-append \
> -DCMAKE_AR=[string map {"clang++" "llvm-
> ar"} ${configure.cxx}]
> }
> if {[string first "DCMAKE_NM=" ${configure.args}] eq -1} {
> configure.args-append \
> -DCMAKE_NM=[string map {"clang++" "llvm-
> nm"} ${configure.cxx}]
> }
> if {[string first "DCMAKE_RANLIB=" ${configure.args}] eq -1} {
> configure.args-append \
> -DCMAKE_RANLIB=[string map {"clang++"
> "llvm-ranlib"} ${configure.cxx}]
> }
> } elseif {[string match *clang-mp* ${configure.cc}]} {
> if {[string first "DCMAKE_AR=" ${configure.args}] eq -1} {
> configure.args-append \
> -DCMAKE_AR=[string map {"clang" "llvm-
> ar"} ${configure.cc}]
> }
> if {[string first "DCMAKE_NM=" ${configure.args}] eq -1} {
> configure.args-append \
> -DCMAKE_NM=[string map {"clang" "llvm-
> nm"} ${configure.cc}]
> }
> if {[string first "DCMAKE_RANLIB=" ${configure.args}] eq -1} {
> configure.args-append \
> -DCMAKE_RANLIB=[string map {"clang"
> "llvm-ranlib"} ${configure.cc}]
> }
> }
> }}}
New description:
I like to use link time optimisation where feasible and have learned
through experience that this can cause link failures in projects that use
static libraries (intermediate/private and/or public). This can be avoided
by using a more homogeneous toolchain, i.e.
{{{
if {[string match *clang++-mp* ${configure.cxx}]} {
configure.env-append \
AR="[string map {"clang++" "llvm-ar"} ${configure.cxx}]" \
NM="[string map {"clang++" "llvm-nm"} ${configure.cxx}]" \
RANLIB="[string map {"clang++" "llvm-ranlib"}
${configure.cxx}]"
} elseif {[string match *clang-mp* ${configure.cc}]} {
configure.env-append \
AR="[string map {"clang" "llvm-ar"} ${configure.cc}]" \
NM="[string map {"clang" "llvm-nm"} ${configure.cc}]" \
RANLIB="[string map {"clang" "llvm-ranlib"}
${configure.cc}]"
}
}}}
The mentioned experience comes from Linux but I don't see why similar
issues couldn't arise on Mac, for similar reasons (the default ar and/or
ranlib not being able to create a usable static library from llvm
objects). I think it shouldn't hurt to set the AR, NM and RANLIB env.
variables as shown above from "base", along with CC, CXX etc. Or add
`configure.ar`, `configure.nm` and `configure.ranlib` option variables?
Equivalent for in the cmake PortGroup (pre-configure block):
{{{
if {[string match *clang++-mp* ${configure.cxx}]} {
if {[string first "DCMAKE_AR=" ${configure.args}] eq -1} {
configure.args-append \
-DCMAKE_AR=[string map {"clang++" "llvm-
ar"} ${configure.cxx}]
}
if {[string first "DCMAKE_NM=" ${configure.args}] eq -1} {
configure.args-append \
-DCMAKE_NM=[string map {"clang++" "llvm-
nm"} ${configure.cxx}]
}
if {[string first "DCMAKE_RANLIB=" ${configure.args}] eq -1} {
configure.args-append \
-DCMAKE_RANLIB=[string map {"clang++"
"llvm-ranlib"} ${configure.cxx}]
}
} elseif {[string match *clang-mp* ${configure.cc}]} {
if {[string first "DCMAKE_AR=" ${configure.args}] eq -1} {
configure.args-append \
-DCMAKE_AR=[string map {"clang" "llvm-ar"}
${configure.cc}]
}
if {[string first "DCMAKE_NM=" ${configure.args}] eq -1} {
configure.args-append \
-DCMAKE_NM=[string map {"clang" "llvm-nm"}
${configure.cc}]
}
if {[string first "DCMAKE_RANLIB=" ${configure.args}] eq -1} {
configure.args-append \
-DCMAKE_RANLIB=[string map {"clang" "llvm-
ranlib"} ${configure.cc}]
}
}
}}}
--
--
Ticket URL: <https://trac.macports.org/ticket/57695#comment:1>
MacPorts <https://www.macports.org/>
Ports system for macOS
More information about the macports-tickets
mailing list