Page MenuHomeFreeBSD

Fix TARGET_TRIPLE assembly and retrieve OS version automatically
Changes PlannedPublic

Authored by on Feb 18 2019, 7:30 PM.



Variable TARGET_TRIPLE is used as argument to clang's "-target" parameter specially when cross compiling.

It's expected to be in the form "<arch><sub>-<vendor>-<sys>-<abi>" (see, but it's currently calculated as "<arch><sub>-<abi>-<sys>"

*note <sub> is ignored in this patch as well

Test Plan

buildworld powerpc64-elfv2 (cross)
buildworld x86_64 (native)

Diff Detail

Lint OK
No Unit Test Coverage
Build Status
Buildable 26712
Build 25074: arc lint + arc unit

Event Timeline retitled this revision from Fix TARGET_TRIPLE variable computation when specifying TARGET_ABI to Fix TARGET_TRIPLE variable assembly when specifying TARGET_ABI.Feb 18 2019, 7:41 PM edited the summary of this revision. (Show Details) edited the test plan for this revision. (Show Details)
bdragon accepted this revision.Feb 18 2019, 8:57 PM

Yeah, that's better.

Since I'm not an official member, make sure and get more approvals.

This will need verification on mips and arm I believe, to ensure nothing breaks.

This revision is now accepted and ready to land.Feb 18 2019, 8:57 PM
emaste added subscribers: jhb, markj.Feb 27 2019, 5:15 PM
imp added inline comments.Feb 27 2019, 5:32 PM

not an objection, per-se, but an observation that these same transforms are used 4 times in an identical fasion. Any way to make that more common?


any way of getting this automatically?

jhb added inline comments.Feb 27 2019, 6:44 PM

You could have TARGET_TRIPLE_ARCH and MACHINE_TRIPLE_ARCH helper variables to at least cut it in half.


Not really, it's the version we are building as opposed to the build host, etc. We already have to bump this one when creating a new branch, this just centralizes it. I think Makefile.libcompat also hardcodes freebsd13 and it would be nice if we could fix that to use OS_VERSION as part of this change. think you can make the changes @jhb and @imp are suggesting? Looks fine to me overall.

I updated the patch to retrieve FreeBSD version automatically, however I'm not sure on how to better address 'lib/clang/'. The variables created on 'Makefile.inc1' are not visible there.

This revision now requires review to proceed.Jul 1 2019, 8:29 PM marked 4 inline comments as done.Jul 1 2019, 8:29 PM

TARGET=powerpc TARGET_ARCH=powerpc64 produces:

clang -target powerpc64-unknown-freebsd13.0

TARGET=powerpc TARGET_ARCH=powerpc64 TARGET_ABI=elfv2 produces:

clang -target powerpc64-unknown-freebsd13.0-elfv2

remove a level of identation

bdragon added inline comments.Sep 7 2019, 10:39 PM
352 ↗(On Diff #59315)

This grep doesn't seem to actually work for some reason. It isn't picking up SRCTOP...

bdragon added inline comments.Sep 10 2019, 1:44 PM
352 ↗(On Diff #59315)

of course now I'm having trouble reproducing this. I distinctly remember seeing lots of "grep: /sys/sys/param.h not found" but I'm not seeing it anymore.

imp added a comment.Sep 16 2019, 7:15 PM

So I think this belongs in share/mk/, but I'm not sure.

352 ↗(On Diff #59315)

One $ is what you want since SRCTOP is a makefile variable.
However, I'm 100% sure this is the wrong place for this.
Also, just use to get this info.
And I think you want is something like

.if !defined(OS_VERSION)
.export OS_VERSION

This is a reworked version. I found that FreeBSD release was already being retrieved in share/mk/ using variable FREEBSD_REVISION. Then I moved it to share/mk/ to make variable readable everywhere.

removed debugging temporary code

Needs reroll after the massive libcompat changes settle down. retitled this revision from Fix TARGET_TRIPLE variable assembly when specifying TARGET_ABI to Fix TARGET_TRIPLE assembly and retrieve OS version automatically.Sat, Nov 9, 1:45 AM planned changes to this revision.Mon, Nov 18, 6:26 PM

Need to reroll

352 ↗(On Diff #59315)

Strange, it works for me.
Does "make -v OS_VERSION" give "13.0" for you?

I appended the following code

BLA!=echo '$${SRCTOP}/sys/sys/param.h'
.info BLA SRCTOP is ${BLA}

and it gives me:

# make
make: "/root/src/freebsd/share/mk/" line 358: BLA SRCTOP is /root/src/freebsd/sys/sys/param.h

Explicit target required.  Likely "buildworld" is wanted.  See build(7).

Also, changing /sys/sys/param.h doesn't change OS_VERSION value. If I change /root/src/freebsd//sys/sys/param.h it does change OS_VERSION

I tried to reproduce using the shells "csh, bash and sh" and result is ok to me.
What's the build command you're using ?