On Jun 3, 2025, at 10:41, Nuno Teixeira <edua...@freebsd.org> wrote:
> 
> Hello!
> 
> https://reviews.freebsd.org/D50313 has been acepted and soon it will be 
> committed.

That review has multiple changes for distinct issues.

> I still have a lot of difficulties about how this works and how to be 
> configured.
> Thinking if it will be some config examples be provided?

I assume you are just after how to use the addition of SB_OBJROOT
to share/mk/src.sys.obj.mk and to use .MAKE.META.IGNORE* variables
to help cut down on META_MODE rebuild activity. In other words,
for the part of the summary that says:

QUOTE
This allows SB_OBJROOT to be used in .MAKE.META.IGNORE* variables
to tweak what should be considered as making a target out-of-date.
END QUOTE

I assume this because our past discussion has been about cutting
down on META_MODE's amount of rebuilding, which is what
.MAKE.META.IGNORE* variables can be used for. SB_OBJROOT allows
avoiding:

QUOTE
The build varies MAKEOBJDIRPREFIX at times which
can make it difficult to tack the original OBJROOT.
END QUOTE

So defining .MAKE.META.IGNORE* variables to involve the use of
SB_OBJROOT instead keeps things working as MAKEOBJDIRPREFIX
changes.

That leads me to expect that it is really setting up overall
use of .MAKE.META.IGNORE* variables that you want to learn about,
with SB_OBJROOT use just being a (new) smaller detail involved in
that.

Sound right?

> Thanks
> 
>> Simon J. Gerraty <s...@juniper.net> escreveu (terça, 13/05/2025 à(s) 20:52):
>> Mark Millard <mark...@yahoo.com> wrote:
>> > > If you are going to head down that path, I would highly recommend
>> > > using the 'mk' wrapper from
>> > > https://www.crufty.net/ftp/pub/sjg/sb-tools.tar.gz
>> > > We've used that model at work for over 20 years.
>> > > Described in https://www.crufty.net/sjg/docs/sb-tools.htm
>> > >
>> > > In a nutshell; each tree has a .sandbox-env file which can tune its
>> > > environment (as well as mark the top of the "sandbox").
>> > > There are a plethora of other hooks to tune.
>> > > I find it especially useful with Emac's M-x compile
>> > 
>> > I will take a look.
>> > 
>> > Using my aarch64 context as an example (it
>> > has more variations than my amd64
>> > environment, since I do nothing for i386
>> > but aarch64 is also set up for armv7):
>> 
>> you can do combinations.
>> 
>> Eg Junos currently builds for last I counted, over 35 combinations of
>> architecture and OS we provide symlinks to 'mk' to simply usage.
>> Eg. you can always do 'mk --machine arm64,aarch64' but 'mk-arm64,aarch64' is
>> less typing and allows for auto-completion.
>> 
>> FreeBSD by uses MACHINE and MACHINE_ARCH as TARGET_SPEC_VARS,
>> Junos however only supports a single MACHINE_ARCH per MACHINE but
>> multiple TARGET_OS's (bsd15,bsd12,wrl9,...) so we use
>> MACHINE and TARGET_OS as TARGET_SPEC_VARS.
>> 
>> You can of course extend that for your own use, so that you could have
>> mk --machine arm64,aarch64,something to set
>> TARGET_SPEC=arm64,aarch64,something
>> 
>> but that assumes that the objects for arm64,aarch64,something should be
>> kept separate from those for arm64,aarch64,other
>> 
>> If "something" and "other" really represent things to be built for
>> arm64,aarch64, then setting up targets for them is another option.
>> 
>> There is nothing to stop you of course from using any of the scripts
>> below in conjuction with the setup supported by 'mk'.
>> 
>> Things that everyone is likely to need/use can/should be setup as
>> targets so 'mk-arm64,aarch64 dbg-kernel' "just worked"
>> but things that do not fit that criteria are better served as scripts
>> such as you have.
>> 
>> This is in some way a reflection of the difference b/w an emedded vendor
>> who is typically only interested in a very small sub-set of the
>> architectures supported by the project, but wants them handled the same
>> way by 100's if not 1000's of devs.  Eg we put all our Juniper specific
>> targets under a juniper/ tree - that works with the same DIRDEPS_BUILD
>> bits as FreeBSD can.
>> 
>> > I have 8 aarch64 scripts that have the
>> > likes of __MAKE_CONF (and more) specified
>> > that do individual system builds of main's
>> > kernel or world:
>> > 
>> > # ls -C1 ~/build-sys-*dbg-*.sh
>> > /root/build-sys-main-CA7-dbg-kernel.sh
>> > /root/build-sys-main-CA7-dbg-world.sh
>> > /root/build-sys-main-CA7-nodbg-kernel.sh
>> > /root/build-sys-main-CA7-nodbg-world.sh
>> > /root/build-sys-main-CA76-dbg-kernel.sh
>> > /root/build-sys-main-CA76-dbg-world.sh
>> > /root/build-sys-main-CA76-nodbg-kernel.sh
>> > /root/build-sys-main-CA76-nodbg-world.sh
>> > 
>> > The above in turn involve use of appropriate
>> > files from:
>> > 
>> >  # ls -C1 ~/src.configs/*
>> > /root/src.configs/make.conf
>> > /root/src.configs/src.conf.CA7-dbg-clang.aarch64-host
>> > /root/src.configs/src.conf.CA7-nodbg-clang.aarch64-host
>> > /root/src.configs/src.conf.CA76-dbg-clang.aarch64-host
>> > /root/src.configs/src.conf.CA76-nodbg-clang.aarch64-host
>> > 
>> > ~/src.configs/make.conf is common to all 8.
>> 
>> Which is consistent with how one might setup a .sandbox-env for that
>> tree - it might do nothing more than set
>> 
>> export __MAKE_CONF=$HOME/src.configs/make.conf
>> 
>> > 
>> > They also use my git worktree: /usr/main-src/
>> > 
>> > ( /usr/src/ is from PkgBase and, so, has no
>> > .git/ repository. A different /usr/*-src/
>> > has the .git repository. )
>> > 
>> > 
>> > I also have 7 scripts that run more than
>> > one of those ~/build-sys-*dbg-*.sh in a
>> > sequence:
>> > 
>> > # ls -C1 ~/build-sys-*[67]-[kw]*.sh
>> > /root/build-sys-main-CA7-kernel.sh
>> > /root/build-sys-main-CA7-world-kernel.sh
>> > /root/build-sys-main-CA7-world.sh
>> > /root/build-sys-main-CA76-kernel.sh
>> > /root/build-sys-main-CA76-world-kernel.sh
>> > /root/build-sys-main-CA76-world.sh
>> > /root/build-sys-main-CA76_CA7-world-kernel.sh
>> > 
>> > (Each of those 7 build both -dbg- and -nodbg-
>> > variations.)
>> 
>> Sounds like something more suited to a set of targets - which could
>> reduce redundant work?
>> 
>> > 
>> > 
>> > For reference:
>> > 
>> > CA76: cortex-a76 (aarch64)
>> > CA7:  cortex-a7  (armv7)
>> > 
>> > # ls -dC1 /usr/obj/BUILDs/*/
>> > /usr/obj/BUILDs/main-CA7-dbg-clang/
>> > /usr/obj/BUILDs/main-CA7-nodbg-clang/
>> > /usr/obj/BUILDs/main-CA76-dbg-clang/
>> > /usr/obj/BUILDs/main-CA76-nodbg-clang/
>> > 
>> > I do not use ~/src.configs/make.conf with
>> > poudriere-devel for package builds. I avoid
>> > doing package builds outside of poudriere
>> > in normal circumstances.
>> > 
>> > I normally do not build stable/* or releng/*.*
>> > systems, just using official FreeBSD builds
>> > for such. (Long ago I used to build more
>> > variations.)
>> > 
>> > I only build amd64 systems on amd64; I only
>> > build aarch64 and armv7 on aarch64. (Long
>> > ago I used to cross build little endian
>> > systems on amd64.)
>> 
>> We cross-build everything ;-)
> 

===
Mark Millard
marklmi at yahoo.com


Reply via email to