On 2017-Oct-29, at 12:10 AM, Sid <sid at bsdmail.com> wrote:

> This is not on Qemu, and I'm not cross-building. This is on an amd64 on 
> 11.1-RELEASE-p2. Base was built without clang or gcc, and clang40 was 
> installed from ports.
> 
> The base and kernel compile using lang/llvm40 with XCC, XCXX, and XCPP set. 
> I'm a little confused, as how earlier, it seemed that ports that didn't need 
> c++ were building without CC, CXX, and CPP options set.  If I made a mistake 
> here, I apologize for this. It seems CC, CXX, and CPP are made for ports. 
> Then the problem is with Rust locating c++ that is in /usr/local/bin/ and not 
> contained within FreeBSD 11.1's base, in /usr/bin/.
> 
> Nearly all programs requiring c++, needed for my desktop (xorg, rxvt-unicode, 
> leafpad, sox) compiled when all 6 variables were set (CC,CPP, etc). Only 
> Rust, and programs depending on it failed. Now I think the problem is, that 
> Rust and programs depending on it look in absolute locations for c++.

I'm afraid there is a clang++40 to find but no c++
to be found anywhere in your context based on what
you have described.

I have llvm50 installed instead of llvm40, so, that is what
I'll use as an example for amd64 (head -r324743 ). . .

# pkg info llvm50
llvm50-5.0.0_1
Name           : llvm50
Version        : 5.0.0_1
Installed on   : Sun Sep 24 00:26:47 2017 PDT
Origin         : devel/llvm50
Architecture   : FreeBSD:12:amd64
Prefix         : /usr/local
Categories     : devel lang
Licenses       : LLVM
Maintainer     : bro...@freebsd.org
WWW            : http://llvm.org/
Comment        : LLVM and Clang
Options        :
        CLANG          : on
        COMPILER_RT    : on
        DOCS           : on
        EXTRAS         : on
        GOLD           : on
        LIT            : on
        LLD            : on
        LLDB           : on
        OPENMP         : on
. . .

But no command c++ is under /usr/local/ ,
there is just a directory of that name
(from lang/gcc7 in my context):

# find /usr/local -name c++ -print | more
/usr/local/lib/gcc7/include/c++

Clang++50 is under its own name:

# which clang++50
/usr/local/bin/clang++50

So without system clang (or system gcc 4.2.1) and only
with llvm40 I expect that there is no c++ command at all.
The issue would not be an overly-specific path: no path
would work.

Rust needs to not be looking for a c++ command at all.
It needs to be using ${CXX} and the like that would
need to involve clang++50 .

But you can make a local workaround by creating your
own c++ command someplace in the paths being checked,
either linking to or copying clang++40 to produce the
c++ . c++ might not be the only file needing such
a technique.

Prior material follows, nothing new so likely skip. . .

> Sent: Sunday, October 29, 2017 at 12:11 AM
> From: "Mark Millard" <mar...@dsl-only.net>
> To: Sid <s...@bsdmail.com>
> Cc: freebsd-toolchain@freebsd.org
> Subject: Re: External LLVM toolchain not consistently locating c++ when 
> compiling ports
> 
> 
> On 2017-Oct-28, at 9:40 PM, Sid <sid at bsdmail.com> wrote:
> 
>> In /etc/make.conf, when I use,
>> XCC= /usr/local/bin/clang40
>> XCXX=        /usr/local/bin/clang++40
>> XCPP=        /usr/local/bin/clang-cpp40
>> for ports that require c++ without clang in the base system, I get the error 
>> code 
>>  make: "/usr/ports/Mk/Uses/compiler.mk" line 112:warning: "c++ -### 
>> /dev/null 2>&1" returned non-zero status
> 
> Quoting https://wiki.freebsd.org/ExternalToolchain:
> 
> XCC
> 
> The XCC approach works with top level build targets (buildworld, buildkernel, 
> etc) and overrides common make variables such as CC, CXX, and AS during the 
> cross building portions of the build with values specified by the XCC, XCPP, 
> XAS, etc variables. This method touches few files and is relatively easy to 
> understand, but has drawbacks including the inability to build individual 
> programs easily. 
> 
> END QUOTE.
> 
> Does ports support "cross building" that would be expected to use
> XCC, XCXX, XCPP, and the like?
> 
> To my knowledge there is no cross build environment for ports
> that can avoid qemu (or an equivalent): cross builds of parts
> are based on qemu, which use CC, CXX, CPP and the like as far
> as I know.
> 
>> Base and the kernel builds well with this setting. Compiles that don't need 
>> c++ also work with this setting.
> 
> Unlike for ports builds. (That is my understanding.)
> 
>> I've compensated by adding
>> CC=  /usr/local/bin/clang40
>> CXX= /usr/local/bin/clang++40
>> CPP= /usr/local/bin/clang-cpp40
>> to the above. While this works for many ports requiring c++, it doesn't work 
>> for Rust, and programs that depend on it (Firefox, Thunderbird).
> 
> This is what I'd expect for "self hosted" (target=build)
> types of contexts and for being in a qemu context that looks
> like the target.
> 
> I'm not aware of another form of cross build for
> FreeBSD ports. (I'd like to be able to do powerpc64
> and powerpc without a system qemu. User qemu does
> not work for targeting powerpc64 or for powerpc.)
> 
>> It seems that XCXX is supposed to replace CXX fully, considering that XCC 
>> replaces CC, and XCPP replaces CPP when compiling other ports.
> 
> Can you provide evidence of this? Does the evidence
> involve cross building where the X prefix is involved?
> 
>> The error message for compiling rust with all of the above (XCC, XCXX, XCPP, 
>> CC, CXX, CPP) set is
>>  couldn't find required command: "c++"
> 
> Does the environment not have a c++ command in a place
> listed in path? Otherwise it should be found.
> 
>> This error happens whether the port option for lang/rust is set to compile 
>> with llvm40 or the bundled version.
>> This is affected by /usr/ports/Mk/Uses/compiler.mk and I think this problem 
>> affects ports compiled with c++ in the base system as well.


===
Mark Millard
markmi at dsl-only.net

_______________________________________________
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"

Reply via email to