Commit graph

678 commits

Author SHA1 Message Date
Minsoo Choo
94d1731e73 Makefile*: remove powerpcspe
As reported on the freebsd-announce mailing list[1] FreeBSD is
continuing to retire 32-bit support.  Remove powerpcspe from build
infrastructure.

[1] https://lists.freebsd.org/archives/freebsd-announce/2024-February/000117.html

Signed-off-by: Minsoo Choo <minsoochoo0122@proton.me>
Reviewed by:	jhibbits, emaste
Pull request:	https://github.com/freebsd/freebsd-src/pull/1914
2026-01-09 11:28:43 -05:00
Minsoo Choo
d2f1c8e0d1
Makefile: Update doxygen requirements
MFC after:	3 days
Reviewed by:	imp, ziaee
Signed-off-by:	Minsoo Choo <minsoochoo0122@proton.me>
Closes:		https://github.com/freebsd/freebsd-src/pull/1869
2026-01-08 09:01:03 -05:00
Lexi Winter
f7dc7d7af3 Makefile: Force DISTDIR=/ for (update-)packages
The make(1) variable DISTDIR is used by both ports and src with a
different meaning.  Some users may set DISTDIR in /etc/make.conf
for ports, which previously worked fine when building src since
the src targets which used this variable were not very commonly
used (mainly, make distributeworld).

Unfortunately, with pkgbase becoming the default, this is no longer
true since make (update-)packages invokes make stageworld, which is
sensitive to DISTDIR, and these users find that their build now fails.

A correct fix for this probably requires renaming one or both of
the DISTDIR variables, but for now, work around the problem by
setting DISTDIR=/ for the user-facing pkgbase targets, packages
and update-package.  Since setting DISTDIR doesn't work for these
targets anyway, this should not break any existing configurations.

MFC after:	1 week
PR:		290010
Reported by:	Oleh Vinichenko <moonlapse81@gmail.com>
Reviewed by:	imp, bapt
Sponsored by:	https://www.patreon.com/bsdivy
Differential Revision:	https://reviews.freebsd.org/D52929
2025-10-08 04:22:32 +01:00
Lexi Winter
dfc9da6248 Makefile: Fix ordering for (update-)packages
The (update-)packages targets require buildworld and buildkernel to
run first.  Add some .ORDER statements to ensure this happens.

This fixes 'make -j8 buildworld buildkernel packages'.

PR:		289969
Reported by:	yasu
MFC after:	3 days
Reviewed by:	yasu, emaste
Sponsored by:	https://www.patreon.com/bsdivy
Differential Revision:	https://reviews.freebsd.org/D52877
2025-10-03 06:43:15 +01:00
John Baldwin
4a3fb7547e powerpc: Disconnect 32-bit powerpc from make universe
World and kernels for 32-bit powerpc can still be built using the
buildworld and buildkernel targets.

Reviewed by:	imp
Differential Revision:	https://reviews.freebsd.org/D51194
2025-07-14 11:01:09 -04:00
Brooks Davis
1b06e0b889 Revert "src/Makefile: log real/user/system time for build targets"
This broke `make makeman` by unconditionally adding output to all top
level targets.  Lacking an obvious and trivial workaround, it makes
sense to back it out and rethink.

This reverts commit afa70490ee.

PR:		287274

Reviewed by:	markj
Differential Revision:	https://reviews.freebsd.org/D51119
2025-07-02 17:39:26 +01:00
Wolfram Schneider
afa70490ee src/Makefile: log real/user/system time for build targets
For some of our build targets such as buildworld, buildkernel etc. we log
the real time in seconds how long the build runs. Now we log the user and
system time as well in milliseconds for most build targets.

Example output:

make buildworld
[....]
>>> Time spent on target buildworld: real 2286.42 user 62870.84 sys 2294.22

PR:  287274
2025-06-29 10:48:55 +00:00
John Baldwin
d4c81623ac universe: Update the default GCC toolchain to GCC 14
Reviewed by:	imp, emaste
Differential Revision:	https://reviews.freebsd.org/D49160
2025-03-03 11:51:53 -05:00
Jessica Clarke
697fd8476e Makefile: Fix several issues with bmake upgrade
Firstly, if NEED_MAKE_UPGRADE isn't set, we shouldn't use whatever
bootstrapped bmake happens to be lying around. We're not going to re-run
the bmake target, so won't make sure it's up-to-date, and thus it could
be some ancient unsupported version. We can still, however, optimise
setting SUB_MAKE when the file exists, so long as it's guarded by
NEED_MAKE_UPGRADE.

Secondly, make kernel-toolchain should also bootstrap bmake if needed,
since it's supposed to be the subset of buildworld needed for building a
kernel.

Finally, if there is a stale bootstrapped bmake lying around that isn't
needed, delete it, since it will only cause confusion, and as far as I
can tell nothing else will clean it up, not even cleandir twice. So as
to ensure nobody's doing anything crazy with MYMAKE that would cause us
to delete something unexpected, or that would change behaviour by no
longer checking exists(${MYMAKE}) and using that regardless of version
checks, emit an error if the definition in use is not our own.

Reviewed by:	emaste, sjg, imp
Differential Revision:	https://reviews.freebsd.org/D48708
2025-01-29 19:17:09 +00:00
John Baldwin
550137eab2 universe: Permit requesting a specific version of GCC
If USE_GCC_TOOLCHAINS is set to a value matching the pattern 'gcc*',
use that as the GCC version.  For example, USE_GCC_TOOLCHAINS=gcc16
would use amd64-gcc16 for amd64, etc.  If the variable is set to a
value that doesn't match that pattern, use the default version.

Reviewed by:	imp, emaste
Differential Revision:	https://reviews.freebsd.org/D48418
2025-01-10 22:49:59 -05:00
Andrew Turner
7818c2d37c armv6: Remove support for building armv6
With it planned that armv7 will be the only 32-bit kernel when 15.0 is
released remove support for armv6.

Remove the top level build infrastructure. It was already removed from
universe, this just stops it from being built directly.

Reviewed by:	mmel, emaste
Sponsored by:	Arm Ltd
Differential Revision:	https://reviews.freebsd.org/D45634
2024-07-12 11:31:53 +00:00
Warner Losh
52e41d1a5b Update example from gcc6 to gcc13
We only "support" gcc12 and gcc13 for cross building, for some value of
"support". Update the example from gcc6 to gcc13.

Sponsored by:		Netflix
2024-05-09 08:16:15 -06:00
Mark Johnston
49a3780aea build: Order kernel-toolchain and buildkernel targets
MFC after:	1 week
2024-03-20 01:32:24 -04:00
Emmanuel Vadot
a5ff900535 pkgbase: Create two new rules for creating repo
This adds two new rules named create-packages-kernel-repo and
create-packages-world-repo.
The goal of those rules is to create the {kernel,world} packages and
after that the repository.
It helps a lot for developing with pkgbase by adding the dev machine
repository created by those rules on top of the official pkgbase one.

Differential Revision:	https://reviews.freebsd.org/D43623
Reviewed by:	bapt, emaste
Sponsored by:	Beckhoff Automation GmbH & Co. KG
2024-01-29 19:24:03 +01:00
Warner Losh
883a1b00fd Makefile: Deorbit fmake support
fmake has been out of the tree for 10 years / 5 major releases now. The
need to bootstrap from it has been gone for at least 6 if not 8
years. While we may still need to bootstrap bmake, we don't need to do
it from fmake, so only retail the infrastructure to update from bmake to
bmake. Retain, for now, the WANT_MAKE_VERSION stuff, though we're always
up to date when building from supported and quasi-supported platforms.

Also remove all the checks to see if .PARSEDIR is defined. It is always
defined and was an early, fail-safe way to tell fmake from bmake during
the transition.

Adjust comments that refer to old fmake and remove those no longer
relevant.

Sponsored by:		Netflix
Reviewed by: brooks
Pull Request: https://github.com/freebsd/freebsd-src/pull/980
2024-01-03 12:13:26 -07:00
Baptiste Daroussin
99b8c0c35b pkgbase: create source package
FreeBSD-src for all the sources but the kernel
FreeBSD-src-sys just for the kernel

MFC After:		3 days
Reviewed by:		manu
Differential Revision:	https://reviews.freebsd.org/D42651
2023-12-04 09:05:03 +01:00
Jessica Clarke
ecf01a8ebc Makefile: Support universe-toolchain on non-FreeBSD
We currently pass MACHINE and MACHINE_ARCH as TARGET and TARGET_ARCH
respectively for universe-toolchain, but on non-FreeBSD these may not
have values that we understand (e.g. on Linux it will be x86_64 rather
than amd64) for TARGET/TARGET_ARCH (note that we do support them for
MACHINE/MACHINE_ARCH). Since the choice is a bit arbitrary and merely
determines what LLVM's default triple will be, use amd64 on non-FreeBSD
as a known-good default.

Reviewed by:	jhb
Differential Revision:	https://reviews.freebsd.org/D41545
2023-08-23 18:00:16 +01:00
Warner Losh
d0b2dbfa0e Remove $FreeBSD$: one-line sh pattern
Remove /^\s*#[#!]?\s*\$FreeBSD\$.*$\n/
2023-08-16 11:55:03 -06:00
Warner Losh
98d03dca9a universe: Demote armv6 to an extra architecture.
Per discussions over how to lighten the load of armv6, move it to an
extra arch. You can still build TARGET_ARCH=armv6 if you desire, but
it won't be built as part of 'make universe' without -DEXTRA_TARGETS.

Sponsored by:		Netflix
2023-07-27 22:30:41 -06:00
Jessica Clarke
d81da4c983 Makefile.inc1: Add new buildetc and installetc targets
These implement the steps that etcupdate (and mergemaster) need in order
to build their pristine trees, avoiding the need to use internal targets
and variables. Additionally, buildetc includes the steps needed to build
with BUILD_WITH_STRICT_TMPPATH enabled, since we need some host tools to
be available during the various build and install steps.

Reviewed by:	jhb, imp
Differential Revision:	https://reviews.freebsd.org/D41205
2023-07-27 05:10:49 +01:00
Jessica Clarke
8fc3059b00 Makefile.inc1: Split _cleanworldtmp out from _worldtmp
This mirrors _cleanobj vs _obj, and will be used by etcupdate to ensure
its build tree has host tools available when BUILD_WITH_STRICT_TMPPATH
is enabled by default (whether in the source tree, like CheriBSD, or in
a system config file).

Note that due to line length the .MAKE .PHONY dependency line is split
into two, one for the filtered WMAKE_TGTS and one for the filtered
.ALLTARGETS.

Reviewed by:	brooks, jhb
Differential Revision:	https://reviews.freebsd.org/D41190
2023-07-27 05:10:48 +01:00
Jessica Clarke
eafd028327 Makefile: Automatically generate list of libcompat targets
Reviewed by:	brooks, jhb
Differential Revision:	https://reviews.freebsd.org/D41179
2023-07-27 05:10:43 +01:00
Simon J. Gerraty
da1ef2d619 Move MACHINE/MACHINE_ARCH handling to sys.machine.mk
Rather than define the TARGETS and TARGET_ARCHES in src/Makefile
put them in sys.machine.mk so they can also be leveraged by
non-top-level builds.

We have TARGET_MACHINE_LIST as the list of MACHINES we build for.

For each MACHINE we have a MACHINE_ARCH_LIST_${MACHINE}
and the first entry of each list is used as default for
MACHINE_ARCH_${MACHINE}

We can now remove a bunch of MACHINE_ARCH.* handling from
local.sys.dirdeps*mk

Reviewed by:	imp
Sponsored by:	Juniper Networks, Inc.
Differential Revision:	https://reviews.freebsd.org/D40083
2023-05-13 08:15:49 -07:00
Simon J. Gerraty
0df4d8ad7a Add jobs.mk to allow for target-jobs
jobs.mk automates -j$JOB_MAX and capturing build log based on target.

Compute a default for JOB_MAX in local.sys.mk

Reviewed by:	stevek, imp
Differential Revision:	https://reviews.freebsd.org/D39683
2023-04-20 09:40:39 -07:00
John Baldwin
1ca12bd927 Remove the riscv64sf architecture.
Reviewed by:	jrtc27, arichardson, br, kp, imp, emaste
Differential Revision:	https://reviews.freebsd.org/D39496
2023-04-12 11:09:27 -07:00
John Baldwin
370110fd57 universe: Switch GCC toolchains to GCC 12.
Reviewed by:	imp, emaste
Differential Revision:	https://reviews.freebsd.org/D38230
2023-01-27 13:35:13 -08:00
Alex Richardson
34ac629b40 Shell-escape assignments to PATH in the top-level makefiles
Since 16fbf01912 PATH is no longer set
to a hardcoded value on non-FreeBSD build hosts, so we can end up with
spaces in $PATH. Instead of only escaping PATH I updated all `env PATH=`
uses in the toplevel makefile. While many of these currently can't
contain any special characters (since the build would have failed
already), in theory this gets us closer to allowing build/source
directory to contain e.g. spaces.
2023-01-20 10:47:17 +00:00
Jake Freeland
16fbf01912 Makefile: Avoid sanitizing PATH on non-FreeBSD systems
Allow the build process to find host binaries during the host-symlinks target when
cross-building on non-FreeBSD systems. Whilst most non-FreeBSD systems have all
the needed tools in /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin (the final
path added by host-symlinks itself), Homebrew for macOS on Arm defaults to
/opt/homebrew/bin, other more niche systems may also deviate and users may
expect tools in a customised PATH to be picked up, unlike on FreeBSD where we
want to ensure everything comes from base. In particular, (un)xz are needed
from Homebrew on macOS, and thus cannot be found on Arm without this.

Note that non-FreeBSD builds enforce BUILD_WITH_STRICT_TMPPATH, and so the
actual main build steps will still use a sanitised PATH.

Reviewed by:	jrtc27, arichardson
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D37991
2023-01-19 22:24:44 +00:00
Dries Michiels
e6d47601a3 Makefile: replace mergemaster references with etcupdate
Similar to UPDATING and handbook changes, treat Makefile the same.

PR:			260822
Approved by:		jhb, philip
Differential Revision:	https://reviews.freebsd.org/D36877
2022-10-06 20:19:16 +02:00
John Baldwin
9dfbda254c Switch to GCC 9 for the GCC tinderbox.
This also adds arm and riscv to the GCC tinderbox.

Reviewed by:	emaste (older version)
Differential Revision:	https://reviews.freebsd.org/D26202
2022-05-20 10:16:57 -07:00
Warner Losh
3e65b7d94d cleankernel: A target to delete the kernel compile file
With the meta-build, it's always a NO_CLEAN build. Provide a way to
remove so one can rebuild from scratch. 'cleankernel' will delete the
kernel and modules object directories. Document this in build(7).

Sponsored by:		Netflix
Reviewed by:		debdrup, markj
Differential Revision:	https://reviews.freebsd.org/D32978
2022-02-11 12:51:24 -07:00
Ed Maste
6f6fbfa3a8 Remove quotes around Makefile .error/.warn/.info strings
The text after .error et al is emitted verbatim.

Reviewed by:	sjg
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D33904
2022-01-22 14:03:07 -05:00
John Baldwin
21baf42c57 Add list-old-{dirs,files,libs} targets.
These targets generate a raw list of the candidate old files roughly
corresponding to the values of OLD_DIRS, OLD_FILES, and OLD_LIBS.
Currently list-old-files also includes uncompressed manpages in
addition to compressed manpages.

Use these targets in the implementation of check-old-* and
delete-old-* to replace duplicated logic.

Reviewed by:	imp, emaste
Sponsored by:	The University of Cambridge, Google Inc.
Differential Revision:	https://reviews.freebsd.org/D33327
2022-01-11 11:38:11 -08:00
Warner Losh
b68d6892ba libsoft: Remove targets to generate libsoft
Remove the targets needed to make and install libsoft.

Sponsored by:		Netflix
2022-01-06 22:34:15 -07:00
Piotr Kubaj
8cfd7a6aeb Let powerpc64le live as not experimental architecture.
Summary: It's currently just as stable as powerpc64, with more ports working.

Reviewers: alfredo, bdragon, luporl, jhibbits, #manpages

Subscribers: imp

Differential Revision: https://reviews.freebsd.org/D33610
2021-12-29 14:40:35 +01:00
Warner Losh
dd55767b86 Test various header files to ensure they can be included by themselves.
A number of header files in sys/* have, going back to 7th Edition Unix
in 1979, reqiured other files (like sys/types.h) to compile. Likewise
the 4BSD networking code has had prerequisites. However, going back to
around the turn of the 21st century, other systems have made them be
independently include-able (wide-spread header include protection
post-dates 7th edition Unix by maybe 3 or so years judging from USENET
source postings). Start down the path of making them all independently
include-able by creating this test that fails buildworld when they are
not.

The file 'badfiles.inc' contains a list of the currently broken files
that cannot be included w/o any prerequisites. As files are fixed, 'make
badfiles.inc' should be re-run to remove them from the list. Note: All
files that start with an underscore are considered internal and not
tested.

Please note: once a file is removed from badfiles.inc, it must pass on
all architectures. Buildworld through at least the _includes target is
needed to ensure its working (though a buildkernel should also be done
on all architectures as well).

Sponsored by:		Netflix
Reviewed by:		brooks, markj
Differential Revision:	https://reviews.freebsd.org/D32498
2021-12-14 20:25:37 -07:00
Warner Losh
322b341d00 Remove mips from universe
Sponsored by:		Netflix
Differential Revision:	https://reviews.freebsd.org/D32851
2021-11-18 21:22:55 -07:00
Bryan Drewery
2482ea42fb Revert "Fix native-xtools build"
This reverts commit 36269b8231.

This had an unintended change included.
2021-08-03 10:00:28 -07:00
Bryan Drewery
36269b8231 Fix native-xtools build
Fixes		https://github.com/freebsd/poudriere/issues/894
Fixes:		d0c737e18 ("Makefile: Fix MAKEOBJDIRPREFIX command-line")
X-MFC-With:	d0c737e18
2021-08-03 08:22:14 -07:00
Jessica Clarke
d0c737e184 Makefile: Fix MAKEOBJDIRPREFIX command-line variable check for bmake
Unlike the old fmake, running make FOO=bar when using bmake doesn't put
FOO=bar in .MAKEFLAGS at the top level, it instead just puts FOO in
.MAKEOVERRIDES and the full MAKEFLAGS will be formed for sub-makes.
Moreover, this only applies for sub-makes in rules, so this doesn't
apply to those in shell assignments. This means that the current check
does not catch make MAKEOBJDIRPREFIX=..., only those defined in config
files. Thus we must also check .MAKEOVERRIDES explicitly.

Reviewed by:	sjg
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D31015
2021-07-21 02:51:26 +01:00
John Baldwin
e290182bcf Remove 'make update'.
In the CVS days this used be a wrapper around either CVS or CVSup and
used to support updating src, doc, and ports checkouts.  With the move
to subversion this only supported updating src and was itself a
wrapper around 'svn update'.  With Git, users are probably better off
using appropriate Git commands directly to update without needing an
explicit make target as a wrapper.

Reviewed by:	bcr, imp, emaste
Differential Revision:	https://reviews.freebsd.org/D30736
2021-06-11 14:56:28 -07:00
Bryan Drewery
eb8bf6bb42 Fix 'make bmake' top-level bootstrapping.
Fixes:	ee10666327
2021-03-06 09:45:08 -08:00
Alex Richardson
7fa2f2a62f Rename NO_WERROR -> MK_WERROR=no
As suggested in D27598. This also supports MK_WERROR.clang=no and
MK_WERROR.gcc=no to support the existing NO_WERROR.<compiler> uses.

Reviewed By:	brooks
Differential Revision: https://reviews.freebsd.org/D27601
2021-01-07 09:31:03 +00:00
Kyle Evans
cf82304d7d Makefile: re-wordsmith the blurb about xtoolchain ports
The new version only includes a specific version once, and uses the one
that's currently advised by tinderbox: -gcc6.

It also advises just installing the pkg, but mentions in a side-note at the
end where to find the source in the ports tree.

Reviewed by:	jrtc27
Suggested by:	jhb (use default from tinderbox)
Differential Revision:	https://reviews.freebsd.org/D26820
2020-11-14 18:06:35 +00:00
Emmanuel Vadot
0ac8aa55da pkgbase: Add incremental packages
This adds a new target update-packages which will create the new packages
compared to the last run.

This is how to use it:
At this point we cut a release
$ make buildworld ...
$ make buildkernel
$ make packages

    There is now a PKG_VERSION directory with latest link pointing to it
    Distribute the packages to server

$ something something that update the source tree
$ make buildworld ...
$ make buildkernel
$ make update-packages
You know have a PKG_VERSION directory in the REPODIR and latest link pointing to it.
In PKG_VERSION dir only the packages which differs from the latest run are
named PKG_VERSION, otherwise the old packages are there.

The process is :
Build the new packages in the PKG_VERSION directory
Compare the internal data with the PKG_VERSION_FROM version. The comparison is done
by checking the internal hash of the packages.
By default PKG_VERSION_FROM is set to what the latest link points to.
If the old and new version matches, we rm the new package and cp the old one.

Differential Revision:	https://reviews.freebsd.org/D25984
2020-11-02 18:23:50 +00:00
Kyle Evans
5f2aaba453 Makefile: add a small blurb about building with gcc xtoolchain
The key details are to install the appropriate flavor of devel/freebsd-gcc9
and pass CROSS_TOOLCHAIN while building.

Suggested by:	kib
2020-10-16 15:16:23 +00:00
Warner Losh
bf0cf8dfba Eliminate building LINT makefiles
LINT config files are about to be checked in directly. Eliminate
building them by hand here from NOTES files.

Reviewed by: kevans
Differential Revision: https://reviews.freebsd.org/D26540
2020-10-09 00:27:40 +00:00
Brandon Bergren
b75abea4d0 [PowerPC64LE] Set up powerpc.powerpc64le architecture
This is the initial set up for PowerPC64LE.

The current plan is for this arch to remain experimental for FreeBSD 13.

This started as a weekend learning project for me and kinda snowballed from
there.

(More to follow momentarily.)

Reviewed by:	imp (earlier version), emaste
Sponsored by:	Tag1 Consulting, Inc.
Differential Revision:	https://reviews.freebsd.org/D26399
2020-09-22 23:49:30 +00:00
Alex Richardson
dce3fcd4ff Fix typo in r364325 that broke tinderbox with -DBUILD_WITH_STRICT_TMPPATH
${TARGET_ARCH} is empty here which results in empy MAKE_PARAMS being
passed to the buildkernel phase. This breaks the build when using the
strict TMPPATH since cc will not be included in $PATH.

Reviewed By:	jhb
2020-08-25 13:30:19 +00:00
John Baldwin
7d0c2b1131 Add a USE_GCC_TOOLCHAINS knob to make universe.
This uses GCC toolchains instead of LLVM on architectures supported by
GCC.  Currently this uses GCC 6 on aarch64, amd64, i386, and mips.

Although this does also try to use GCC 6 on powerpc, it is always
skipped for now since a powerpc-gcc6 package is not available and the
structure of make universe makes it hard to skip a subset of arches
for a target.  This should be short-lived as freebsd-gcc9 does include
a powerpc-gcc9 package so powerpc should work once this switches to
GCC 9.

Discussed with:	emaste
Differential Revision:	https://reviews.freebsd.org/D25732
2020-08-17 20:11:43 +00:00