[BACK]Return to Makefile CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / etc

File: [cvs.NetBSD.org] / src / etc / Makefile (download)

Revision 1.428.2.1, Tue Jul 18 19:13:07 2017 UTC (6 years, 8 months ago) by snj
Branch: netbsd-8
CVS Tags: netbsd-8-2-RELEASE, netbsd-8-1-RELEASE, netbsd-8-1-RC1, netbsd-8-0-RELEASE, netbsd-8-0-RC2, netbsd-8-0-RC1, matt-nb8-mediatek-base, matt-nb8-mediatek
Changes since 1.428: +18 -4 lines

Pull up following revision(s) (requested by jmcneill in ticket #114):
	sys/arch/arm/samsung/exynos_intr.h: revision 1.3
	sys/arch/arm/sunxi/sun8i_h3_ccu.c: revision 1.1
	sys/arch/arm/sunxi/sun8i_h3_ccu.c: revision 1.2
	sys/arch/arm/sunxi/sun8i_h3_ccu.c: revision 1.3
	sys/arch/arm/sunxi/sunxi_gates.c: revision 1.1
	distrib/utils/embedded/mkimage: revision 1.66
	sys/arch/arm/sunxi/sun8i_h3_ccu.c: revision 1.4
	sys/arch/arm/sunxi/sunxi_rsb.c: revision 1.1
	sys/arch/arm/sunxi/sun8i_h3_ccu.c: revision 1.5
	sys/arch/arm/sunxi/sun8i_h3_ccu.c: revision 1.6
	sys/arch/arm/sunxi/sun8i_h3_ccu.c: revision 1.7
	sys/dev/gpio/gpio.c: revision 1.59
	sys/arch/arm/sunxi/sunxi_ccu_prediv.c: revision 1.1
	sys/conf/Makefile.kern.inc: revision 1.257
	sys/arch/evbarm/conf/ODROID-XU_INSTALL: file removal
	sys/arch/arm/sunxi/sunxi_ccu_prediv.c: revision 1.2
	sys/conf/Makefile.kern.inc: revision 1.258
	sys/arch/arm/fdt/psci_fdt.h: revision 1.1
	sys/arch/arm/sunxi/sunxi_resets.c: revision 1.1
	sys/arch/evbarm/conf/files.sunxi: revision 1.1
	sys/arch/evbarm/fdt/fdt_machdep.c: revision 1.8
	sys/arch/evbarm/fdt/fdt_machdep.c: revision 1.9
	sys/arch/arm/samsung/files.exynos: revision 1.22
	distrib/utils/embedded/conf/armv7.conf: revision 1.13
	sys/arch/arm/samsung/files.exynos: revision 1.23
	sys/arch/evbarm/conf/std.tegra: revision 1.15
	distrib/utils/embedded/conf/armv7.conf: revision 1.14
	sys/arch/arm/samsung/files.exynos: revision 1.24
	distrib/utils/embedded/conf/armv7.conf: revision 1.15
	sys/arch/evbarm/sunxi/genassym.cf: revision 1.1
	sys/arch/arm/samsung/exynos_fdt.c: file removal
	sys/dev/fdt/fdt_pinctrl.c: revision 1.4
	sys/arch/arm/samsung/exynos_sysmmu.c: revision 1.2
	sys/arch/arm/sunxi/sun8i_h3_gpio.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_twi.c: revision 1.1
	sys/dev/usb/ehci.c: revision 1.255
	sys/arch/arm/sunxi/sunxi_twi.c: revision 1.2
	sys/arch/arm/sunxi/sun8i_a83t_ccu.h: revision 1.1
	sys/dev/ic/dwc_mmc.c: revision 1.11
	sys/arch/arm/cortex/gic.c: revision 1.24
	distrib/evbarm/instkernel/ramdisk/Makefile: revision 1.17
	etc/etc.evbarm/Makefile.inc: revision 1.87
	etc/etc.evbarm/Makefile.inc: revision 1.88
	sys/arch/arm/fdt/gic_fdt.c: revision 1.5
	etc/Makefile: revision 1.429
	sys/arch/arm/fdt/gic_fdt.c: revision 1.6
	sys/arch/arm/fdt/gic_fdt.c: revision 1.7
	sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.2
	sys/arch/evbarm/conf/std.sunxi: revision 1.1
	sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.3
	sys/arch/evbarm/conf/std.sunxi: revision 1.2
	sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.4
	sys/arch/evbarm/conf/std.sunxi: revision 1.3
	sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.5
	sys/arch/arm/sunxi/sunxi_ccu_div.c: revision 1.1
	sys/dev/gpio/gpiovar.h: revision 1.17
	sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.6
	sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.7
	sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.8
	sys/arch/arm/sunxi/sunxi_rsb.h: revision 1.1
	sys/arch/arm/samsung/exynos_i2c.c: revision 1.12
	sys/dev/fdt/fdtvar.h: revision 1.21
	sys/arch/evbarm/sunxi/sunxi_start.S: revision 1.1
	sys/arch/arm/samsung/exynos_i2c.c: revision 1.13
	sys/dev/fdt/fdtvar.h: revision 1.22
	sys/arch/evbarm/conf/SUNXI: revision 1.10
	sys/dev/fdt/fdtvar.h: revision 1.23
	sys/arch/evbarm/conf/SUNXI: revision 1.11
	sys/dev/fdt/gpioleds.c: revision 1.1
	sys/dev/fdt/fdtvar.h: revision 1.24
	sys/arch/evbarm/conf/SUNXI: revision 1.12
	sys/arch/evbarm/conf/SUNXI: revision 1.13
	sys/arch/arm/cortex/gic.c: revision 1.30
	sys/arch/evbarm/conf/SUNXI: revision 1.14
	sys/arch/evbarm/conf/SUNXI: revision 1.15
	sys/arch/evbarm/conf/SUNXI: revision 1.16
	sys/arch/arm/sunxi/sunxi_emac.c: revision 1.1
	etc/Makefile: revision 1.430
	sys/arch/arm/sunxi/sunxi_emac.c: revision 1.2
	etc/Makefile: revision 1.431
	sys/arch/evbarm/conf/VEXPRESS_A15: revision 1.17
	sys/arch/arm/sunxi/sunxi_emac.c: revision 1.3
	sys/arch/arm/sunxi/sunxi_emac.c: revision 1.4
	sys/arch/arm/samsung/exynos5422_clock.c: revision 1.6
	sys/arch/arm/samsung/exynos_platform.c: revision 1.1
	sys/dev/ofw/ofw_subr.c: revision 1.29
	sys/arch/arm/samsung/exynos_platform.c: revision 1.2
	sys/arch/evbarm/conf/mk.vexpress: revision 1.3
	sys/arch/arm/samsung/exynos_platform.c: revision 1.3
	sys/arch/evbarm/conf/mk.vexpress: revision 1.4
	sys/arch/arm/samsung/exynos_platform.c: revision 1.4
	sys/arch/arm/arm/psci.h: revision 1.1
	sys/arch/arm/samsung/exynos_platform.c: revision 1.5
	sys/arch/arm/samsung/exynos_platform.c: revision 1.6
	sys/arch/evbarm/fdt/fdt_machdep.c: revision 1.10
	external/bsd/mdocml/bin/mandoc/Makefile: revision 1.12
	sys/dev/fdt/files.fdt: revision 1.17
	sys/dev/fdt/files.fdt: revision 1.18
	sys/dev/fdt/files.fdt: revision 1.19
	sys/arch/arm/samsung/exynos_sscom.c: revision 1.8
	sys/arch/arm/sunxi/sun8i_a83t_ccu.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_mmc.c: revision 1.1
	sys/arch/arm/samsung/exynos_sscom.c: revision 1.9
	sys/arch/arm/conf/files.arm: revision 1.133
	sys/arch/arm/samsung/mct_var.h: revision 1.5
	sys/arch/arm/sunxi/sunxi_platform.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_platform.c: revision 1.2
	sys/arch/evbarm/conf/std.vexpress: revision 1.6
	sys/arch/arm/sunxi/sunxi_platform.c: revision 1.3
	sys/arch/arm/sunxi/sun6i_a31_gpio.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_platform.c: revision 1.4
	sys/arch/arm/sunxi/sun6i_a31_gpio.c: revision 1.2
	sys/arch/arm/sunxi/files.sunxi: revision 1.1
	sys/dev/ofw/ofw_subr.c: revision 1.30
	sys/arch/arm/sunxi/files.sunxi: revision 1.2
	sys/dev/ofw/openfirm.h: revision 1.35
	sys/arch/arm/sunxi/files.sunxi: revision 1.3
	sys/dev/ofw/openfirm.h: revision 1.36
	sys/arch/arm/sunxi/files.sunxi: revision 1.4
	sys/arch/arm/sunxi/files.sunxi: revision 1.5
	sys/arch/evbarm/exynos/exynos_machdep.c: file removal
	sys/arch/arm/sunxi/sunxi_gpio.h: revision 1.1
	sys/arch/arm/samsung/sscom.c: revision 1.9
	sys/arch/arm/sunxi/files.sunxi: revision 1.6
	sys/dev/fdt/ohci_fdt.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_usbphy.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_gpio.h: revision 1.2
	sys/arch/arm/sunxi/files.sunxi: revision 1.7
	sys/arch/arm/sunxi/sunxi_usbphy.c: revision 1.2
	sys/arch/arm/sunxi/sunxi_gpio.h: revision 1.3
	sys/arch/arm/sunxi/files.sunxi: revision 1.8
	sys/arch/arm/sunxi/sunxi_usbphy.c: revision 1.3
	sys/arch/arm/sunxi/files.sunxi: revision 1.9
	sys/arch/arm/samsung/exynos_sscom.c: revision 1.10
	sys/arch/evbarm/conf/mk.tegra: revision 1.5
	sys/arch/arm/samsung/exynos_dwcmmc.c: revision 1.4
	sys/arch/evbarm/conf/mk.tegra: revision 1.6
	sys/arch/evbarm/conf/EXYNOS: revision 1.15
	sys/arch/evbarm/conf/EXYNOS: revision 1.16
	sys/arch/evbarm/conf/EXYNOS: revision 1.17
	sys/arch/arm/sunxi/sunxi_ccu.c: revision 1.1
	sys/arch/evbarm/conf/EXYNOS: revision 1.19
	sys/arch/arm/sunxi/sunxi_ccu.c: revision 1.2
	sys/arch/arm/sunxi/sunxi_ccu.c: revision 1.3
	sys/arch/arm/sunxi/sunxi_ccu.c: revision 1.4
	sys/arch/arm/sunxi/sunxi_ccu.c: revision 1.5
	sys/arch/arm/sunxi/sunxi_emac.h: revision 1.1
	sys/arch/evbarm/conf/mk.sunxi: revision 1.1
	sys/arch/evbarm/include/bootconfig.h: revision 1.7
	sys/arch/evbarm/conf/TEGRA: revision 1.24
	sys/arch/arm/arm/psci.c: revision 1.1
	sys/dev/led.c: revision 1.1
	sys/dev/led.c: revision 1.2
	sys/arch/arm/arm/psci_arm.S: revision 1.1
	sys/arch/arm/sunxi/sunxi_ccu_gate.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_ccu_gate.c: revision 1.2
	sys/dev/fdt/ehci_fdt.c: revision 1.1
	sys/dev/fdt/ehci_fdt.c: revision 1.2
	sys/arch/arm/sunxi/sun6i_a31_ccu.h: revision 1.1
	sys/arch/evbarm/conf/EXYNOS: revision 1.21
	sys/arch/arm/sunxi/files.sunxi: revision 1.10
	sys/arch/arm/sunxi/files.sunxi: revision 1.11
	sys/dev/fdt/fdtbus.c: revision 1.14
	sys/arch/arm/sunxi/sunxi_mmc.h: revision 1.1
	sys/arch/arm/samsung/exynos5422_dma.c: file removal
	usr.bin/config/mkmakefile.c: revision 1.69
	sys/conf/files: revision 1.1178
	sys/arch/arm/sunxi/sunxi_platform.h: revision 1.1
	sys/arch/evbarm/exynos/exynos_start.S: revision 1.4
	sys/arch/arm/samsung/exynos_pinctrl.c: revision 1.11
	sys/arch/arm/samsung/exynos_pinctrl.c: revision 1.12
	sys/arch/arm/sunxi/sunxi_rtc.c: revision 1.1
	sys/arch/arm/sunxi/sun8i_h3_ccu.h: revision 1.1
	sys/arch/arm/samsung/exynos5410_clock.c: revision 1.1
	sys/arch/arm/samsung/exynos5410_clock.c: revision 1.2
	sys/arch/evbarm/conf/SUNXI: revision 1.1
	external/bsd/elftosb/usr.sbin/elftosb/Makefile: revision 1.5
	sys/arch/evbarm/conf/SUNXI: revision 1.2
	sys/arch/arm/fdt/psci_fdt.c: revision 1.1
	sys/arch/evbarm/conf/SUNXI: revision 1.3
	sys/arch/evbarm/conf/SUNXI: revision 1.4
	sys/arch/evbarm/conf/files.exynos: revision 1.3
	sys/arch/evbarm/conf/SUNXI: revision 1.5
	sys/arch/evbarm/conf/SUNXI: revision 1.6
	sys/arch/arm/sunxi/sunxi_ccu_nm.c: revision 1.1
	sys/dev/fdt/fixedfactorclock.c: revision 1.1
	sys/dev/fdt/fdt_subr.c: revision 1.14
	sys/arch/evbarm/conf/SUNXI: revision 1.7
	sys/arch/arm/sunxi/sunxi_ccu_nm.c: revision 1.2
	sys/arch/arm/sunxi/sun8i_a83t_gpio.c: revision 1.1
	sys/dev/fdt/fdt_subr.c: revision 1.15
	sys/arch/evbarm/conf/SUNXI: revision 1.8
	sys/arch/arm/sunxi/sunxi_ccu_nm.c: revision 1.3
	sys/dev/ic/dwc_mmc_reg.h: revision 1.6
	sys/dev/fdt/fdt_subr.c: revision 1.16
	sys/arch/evbarm/conf/SUNXI: revision 1.9
	usr.bin/config/mkmakefile.c: revision 1.70
	sys/dev/fdt/fdt_phy.c: revision 1.1
	sys/arch/evbarm/conf/ODROID-XU: file removal
	sys/arch/arm/fdt/arm_fdt.c: revision 1.4
	sys/arch/arm/samsung/exynos_reg.h: revision 1.14
	sys/conf/files: revision 1.1180
	sys/arch/arm/samsung/exynos_reg.h: revision 1.15
	sys/arch/arm/sunxi/sunxi_ccu.h: revision 1.1
	sys/arch/arm/sunxi/sunxi_ccu.h: revision 1.2
	sys/arch/arm/sunxi/sunxi_ccu.h: revision 1.3
	sys/arch/arm/sunxi/sunxi_ccu.h: revision 1.4
	sys/arch/arm/sunxi/sunxi_ccu.h: revision 1.5
	sys/arch/arm/sunxi/sunxi_ccu.h: revision 1.6
	sys/dev/ic/dwc_mmc_var.h: revision 1.6
	sys/arch/arm/samsung/exynos_combiner.c: revision 1.7
	sys/arch/evbarm/exynos/platform.h: revision 1.2
	sys/arch/arm/fdt/files.fdt: revision 1.12
	sys/arch/evbarm/conf/std.exynos: revision 1.2
	sys/arch/evbarm/conf/std.exynos: revision 1.3
	sys/arch/arm/rockchip/rockchip_dwcmmc.c: revision 1.6
	sys/arch/arm/sunxi/sunxi_com.c: revision 1.1
	sys/dev/led.h: revision 1.1
	sys/arch/evbarm/conf/std.exynos: revision 1.5
	sys/arch/arm/sunxi/sunxi_com.c: revision 1.2
	sys/arch/evbarm/conf/files.evbarm: revision 1.26
	usr.bin/config/defs.h: revision 1.99
	sys/arch/arm/fdt/arm_fdtvar.h: revision 1.6
	sys/arch/arm/samsung/exynos_soc.c: revision 1.32
	sys/arch/arm/sunxi/sun6i_a31_ccu.c: revision 1.1
	sys/arch/arm/sunxi/sun6i_a31_ccu.c: revision 1.2
	sys/arch/arm/samsung/mct.c: revision 1.11
	sys/arch/evbarm/conf/ODROID-U: file removal
	sys/arch/arm/samsung/mct.c: revision 1.12
	sys/arch/arm/sunxi/sunxi_ccu_nkmp.c: revision 1.1
	sys/arch/arm/sunxi/sunxi_ccu_nkmp.c: revision 1.2
	sys/arch/arm/sunxi/sunxi_ccu_nkmp.c: revision 1.3
	sys/arch/arm/sunxi/sunxi_ccu_nkmp.c: revision 1.4
Get the EXYNOS kernel building again with recent FDT changes. Untested.
Use arm_fdt_cpu_hatch and add mmu entry for DTB
Fix exynos5 devmap, bootstrap, and implement early_putchar.
Calculate UART frequency based on bootloader config.
Fix KERNEL_BASE_PHYS (how did this ever work?)
Avoid divide-by-zero for unconfigured PLLs
Correctly initialize i2cbus attach args.
Add delay and enable mct timecounter.
Fix build w/o VERBOSE_INIT_ARM
Remove ODROID-U and ODROID-XU kernel configs as they no longer work.
- Replace CONSADDR with SSCOM2CONSOLE in example
- Remove gtmr (Exynos5422 uses mct)
- cinclude EXYNOS.local instead of TEGRA.local
Use fdtbus_intr_establish to hook in block interrupts instead of
intr_establish.
Simplify MCT; just enable it and then attach an ARMv7 generic timer.
Add support for building DTB files during kernel build, from christos.
build vexpress-v2p-ca15-tc1.dtb with the kernel
build tegra124-apalis-eval.dtb, tegra124-jetson-tk1.dtb, tegra124-nyan-big.dtb, tegra124-nyan-blaze.dtb, and tegra124-venice2.dtb with the kernel
Allow multiline makeoptions to work by quoting the newline..
Bump for quoting makeoptions with multiple lines.
un-c99
bump required config version for multiline makeoptions feature
Set DTS makeoption in kernel config
Assign DTB files to a variable so we can make -V DTB
put the dtb files with their kernels.
no need for debug printing.
Don't assume that CPU index = GIC CPU interface number. We can determine
the current CPU interface number by reading from the read-only
GICD_ITARGETSR0 through GICD_ITARGETSR7 registers.
This gets interrupts working on Exynos 5422, where the boot processor has
GIC CPU interface #4.
use -v to get the expanded variable.
Use -v to get the expanded variables.
Get baud rate from sclk_uartN instead of uartN. Print IRQ number at attach.
Fix PLL con0 register locations and add uart clocks
Disable exyortc for now, it doesn't work.
More or less a rewrite of dwc_mmc, based on awin_mmc, adding DMA support.
Update for new dwc_mmc driver
Fix dmesg
Add Exynos 5410 clock controller driver.
Fix a few typos in clock parent names for mmc clocks.
From jmcneill@
Update for new dwc_mmc driver
Implement platform reset for exynos5
Attach fdtbus to a /clocks node with no compatible string.
Add support for ARM Power State Coordination Interface (PSCI).
Support interrupt sharing.
Add initial support for Allwinner H3 SoC.
ARM Trusted Firmware reserves SGIs 8-15 for secure use. Even without ATF,
U-Boot on some platforms may use SGIs in this range for the PSCI
implementation.
Change ARMGIC_IPI_BASE to 0 from (16 - NIPI) and add a compile-time assert
to ensure that we don't end up with a conflict.
Add H3 MMC support
SD/MMC clock fixes
Add FDT PHY interface.
Add glue for generic ehci/ohci bindings.
Rename a variable, NFC.
Support parents in different clock domains.
Add USB stuff. Doesn't quite work yet.
Synopsys DesignWare APB UART needs "options COM_AWIN" for now.
Add i2c glue.
Add RTC driver.
PHY registers start at index 1. Now USB works.
Don't allow sharing edge and level triggered interrupts.
Add arm_fdt_memory_dump helper for dumping physical addresses from ddb
Print clocks with aprint_debug
Remove unused defines
Add fdtbus_get_string helper
Add of_search_compatible, which searches an array of compat_data structures
for a matching "compatible" entry matching the supplied OFW node. This
allows us to associate data with compatible strings.
Add driver for Allwinner Gigabit Ethernet (EMAC) as found in sun8i and
later family SoCs.
This is a port of my FreeBSD driver which has been confirmed to work on
Allwinner H3, A83T, and A64 SoCs.
Fix dmesg
Add basic support for Allwinner A31.
Add basic FDT GPIO support.
Fix the pinctrl api to match the spec. A pinctrl config can have more
than one xref, and an xref may have specifier data associated with it.
Enable sunxi pinctrl support
Adjust to new pinctrl API
Add P2WI/RSB driver, based on awin_p2wi.c.
Fix typo in a compat string.
Configure pin defaults at attach
No need to explicitly set pinctrl config 0 now
Fix some register definitions.
Disallow sharing between MPSAFE and non-MPSAFE handlers.
Add of_match_compat_data.
This routine searches an array of compat_data structures for a
matching "compatible" entry matching the supplied OFW node.
Add options __HAVE_CPU_UAREA_ALLOC_IDLELWP
Add support for reserved memory and MEMORY_DISK_DYNAMIC for FDT-based
kernels.
the extent code cannot use the full range of u_long,
so ignore the last page before 4GB too.  ok jmcneill@
Copy install ramdisk to releasedir. Provide both a raw ffs and
Legacy U-Boot version of it.
Replace HUMMINGBIRD_A31 with SUNXI kernel on armv7.img and include .dtb
files for SUNXI and TEGRA kernels on the MSDOS partition.
Let the controller provide a default name for pins. This makes pins easier
to locate when we have multiple banks and a variable number of pins per
bank.
Attach gpio(4) to sunxigpio
Test for kernel build directory before reading DTB list
Add support for Allwinner A83T SoC.
Add A83T files
Fixup busdma sync and locking in the RX path. Disable batch RX/TX ints.
Fix AHB2 register definition and explicitly set AHB2 parent to PLL_PERIPH0/2 -- this gives us 50% more bus bandwidth for emac
Restore TX_INTERVAL_DEFAULT to 64
Drop the sunxi_emac_rx_batch feature. It was originally designed to
reduce the amount of mutex unlock/lock cycles during the RX path on
FreeBSD and if_input, but it is not required to drop the lock before
calling if_percpuq_enqueue on NetBSD.
Write back the data value instead of mask in sunxi_gpio_write
Add a helper for exposing LED controls via sysctl.
Add GPIO LED driver.
add gpioleds
Add misc. gates and resets driver, and explicitly enable PIO clocks
at attach.
Add fdtbus_get_string_index helper.
Add driver for fixed-factor clocks.
Add ffclock
Remove the requirement for ehci to attach after companion devices.
"go for it" - skrll@
Remove the hack to find companion devices and just assume 1 companion if
ETTF flag is not set.
Remove pass numbers for ehci/ohci now that the attach order no longer matters
Use unsigned char for ctype functions, suggested by christos
Add : to body of populate_sunxi to appease bash.
port-evbarm/52388: Fix number of args to a debug printf.

#	$NetBSD: Makefile,v 1.428.2.1 2017/07/18 19:13:07 snj Exp $
#	from: @(#)Makefile	8.7 (Berkeley) 5/25/95

# Environment variables without default values:
#   DESTDIR must be set before anything in this file will work.
#   RELEASEDIR is where the tarred up stuff for a snapshot or
#	release will be placed.
#
# Environment variables with default values:
#   LOCALTIME will set the default local time for the system you
#	build; it determines what /etc/localtime is symlink'd to.
#   KERNSRCDIR points to kernel source; it is set by default to ../sys,
#	but can be overridden.
#   KERNOBJDIR is the kernel build directory, it defaults to
#	${KERNSRCDIR}/arch/${MACHINE}/compile, but can be overridden.
#   KERNCONFDIR is where the configuration files for kernels are found;
#	default is ${KERNSRCDIR}/arch/${MACHINE}/conf but can be overridden.
#   MKPOSTFIX; if not `no', install postfix configuration
#   MKUNPRIVED; if not `no', allow non-root installs.
#   MKUPDATE; if not `no', don't do a 'make clean' before kernel compile
#
# Targets:
#    distribution: makes a full NetBSD distribution in DESTDIR. If
#	INSTALL_DONE is set, it will not do a `make install.'
#	if DISTRIBUTION_DONE is set, it will not do anything.
#    distrib-dirs: creates an empty NetBSD directory tree in DESTDIR.
#	Called by distribution.
#    snapshot: calls distribution, above, and then tars up the files
#	into a release(7) format in RELEASEDIR/${RELEASEMACHINEDIR}.
#	Any port-dependent stuff for this target is found in
#	etc.${MACHINE}/Makefile.inc.
#    release: a synonym for `snapshot'
#

# For MK* vars
.include <bsd.own.mk>

.include <bsd.kernobj.mk>	# For KERNSRCDIR, KERNOBJDIR, ...
.include <bsd.endian.mk>	# For TARGET_ENDIANNESS

.MAKEOVERRIDES+=	USETOOLS

TZDIR=		/usr/share/zoneinfo
LOCALTIME?=	UTC
CKSUM?=		${TOOL_CKSUM}
MAKESUMS=	MAKE=${MAKE:Q} CKSUM=${CKSUM:Q} ${HOST_SH} ${NETBSDSRCDIR}/distrib/sets/makesums
DISTRIBVER!=	${HOST_SH} ${NETBSDSRCDIR}/sys/conf/osrelease.sh

GZIP_FLAGS= -9 ${GZIP_N_FLAG}

# Flags for creating ISO CDROM image
# mkisofs is expected to be in $PATH, install via pkgsrc/sysutils/cdrtools
# Note: At least mkisofs 2.0 should be used.
#
.if !defined(MKISOFS)
MKISOFS!=       (which mkisofs || echo true) 2>/dev/null
.endif
DISTRIBREV!=	${HOST_SH} ${KERNSRCDIR}/conf/osrelease.sh -s
# ISO 9660 volume ID.  Note that this can only contain [A-Z0-9_].
ISO_VOLID!=	echo NETBSD_${DISTRIBREV} | tr a-z A-Z
MKISOFS_FLAGS+= -J -l -hide-joliet-trans-tbl -r -T \
		-V ${ISO_VOLID} \
		-publisher "The NetBSD Project" \
		-m "${RELEASEDIR}/${RELEASEMACHINEDIR}/installation/cdrom"
.if ${MKISOFS_FLAGS:N-v}
MKISOFS_FLAGS+=	-quiet
.endif
 
# Reproducible build parameters
.if ${MKREPRO:Uno} == "no"
BUILDER!=	echo $${USER-root}@$$(hostname)
.else
BUILDER=	builder@localhost.NetBSD.org
.endif
.if ${MKREPRO_TIMESTAMP:Uno} == "no"
PAX_TIMESTAMP=
BUILD_DATE!=	date -u
.else
PAX_TIMESTAMP=--timestamp "${MKREPRO_TIMESTAMP}"
BUILD_DATE!=	date -u -r "${MKREPRO_TIMESTAMP}"
.endif

# MD Makefile.inc may append MD targets to BIN[123].  Make sure all
# are empty, to preserve the old semantics of setting them below with "+=".
#
BIN1=
BIN2=
BIN3=

# Directories to build in ${RELEASEDIR}/${RELEASEMACHINEDIR}.
# MD Makefile.inc files can add to this.
# NOTE: Parent directories must be listed before subdirectories.
#
INSTALLATION_DIRS=	binary binary/sets binary/kernel installation

.if exists(etc.${RELEASEMACHINE}/Makefile.inc)
.include "etc.${RELEASEMACHINE}/Makefile.inc"
.endif

# -rw-r--r--
BINOWN= root
BINGRP= wheel
UTMPGRP= utmp
BIN1+=	bootptab changelist csh.cshrc csh.login \
	csh.logout daily daily.conf dm.conf envsys.conf floppytab ftpchroot \
	ftpusers gettytab gpio.conf group hosts hosts.lpd inetd.conf \
	locate.conf login.conf mailer.conf man.conf monthly monthly.conf \
	mrouted.conf named.conf netconfig networks newsyslog.conf \
	nsswitch.conf ntp.conf passwd.conf pkgpath.conf phones printcap \
	profile protocols rbootd.conf rc rc.conf rc.local rc.subr \
	rc.shutdown remote rpc security security.conf services shells \
	shrc sysctl.conf syslog.conf weekly weekly.conf wscons.conf

# Use machine-specific disktab if it exists, or the MI one otherwise
.if exists(etc.${MACHINE}/disktab)
BIN1+=	etc.${MACHINE}/disktab
.else
BIN1+=	disktab
.endif

.if exists(etc.${MACHINE}/ld.so.conf) && empty(MACHINE_ARCH:M*arm*hf*)
BIN1+=	etc.${MACHINE}/ld.so.conf
.endif

.if exists(etc.${MACHINE}/ttyaction)
BIN1+=	etc.${MACHINE}/ttyaction
.endif

# -rw-rw-r--
BIN2+=	motd
FILESBUILD_motd=	YES

# -rw-------
BIN3+=	hosts.equiv

SYSPKG=	etc
ETC_PKG=-T etc_pkg
BASE_PKG=-T base_pkg
ETC_INSTALL_FILE=cd ${.CURDIR} && ${INSTALL_FILE} ${ETC_PKG}
ETC_INSTALL_OBJ_FILE=cd ${.OBJDIR} && ${INSTALL_FILE} ${ETC_PKG}

.if ${TARGET_ENDIANNESS} == "1234"
PWD_MKDB_ENDIAN=	-L
.elif ${TARGET_ENDIANNESS} == "4321"
PWD_MKDB_ENDIAN=	-B
.else
PWD_MKDB_ENDIAN=
.endif


# distribution --
#	Build a distribution
#
distribution: .PHONY .MAKE check_DESTDIR distrib-dirs
.if !defined(DISTRIBUTION_DONE)
.if !defined(INSTALL_DONE)
	${MAKEDIRTARGET} ${NETBSDSRCDIR} include _DISTRIB=
	${MAKEDIRTARGET} ${NETBSDSRCDIR} install _DISTRIB=
.endif	# !INSTALL_DONE
	${MAKEDIRTARGET} . install-etc-files
. if ${MKX11} != "no"
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/external/mit/xorg distribution
. endif
. if ${MKEXTSRC} != "no"
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/extsrc distribution
. endif
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/distrib/sets makesetfiles
.endif	# !DISTRIBUTION_DONE


# motd is copied from a different ${MOTD_SOURCE} depending on DISTRIBVER
#
.if !empty(DISTRIBVER:M*.99.*)
MOTD_SOURCE=	motd.current
.elif !empty(DISTRIBVER:M*BETA*)
MOTD_SOURCE=	motd.beta
.elif !empty(DISTRIBVER:M*RC*)
MOTD_SOURCE=	motd.rc
.elif !empty(DISTRIBVER:M*STABLE*)
MOTD_SOURCE=	motd.stable
.else
MOTD_SOURCE=	motd.default
.endif
CLEANFILES+= motd
motd: ${.CURDIR}/${MOTD_SOURCE} ${_NETBSD_VERSION_DEPENDS}
	${_MKTARGET_CREATE}
	${HOST_INSTALL_FILE} ${.CURDIR}/${MOTD_SOURCE} ${.TARGET}

CLEANFILES+=	MAKEDEV
MAKEDEV_MACHINE=${"${MACHINE_CPU}" == "aarch64":?${MACHINE_CPU}:${MACHINE}}
MAKEDEV: ${.CURDIR}/MAKEDEV.awk ${.CURDIR}/MAKEDEV.tmpl \
    ${.CURDIR}/etc.${MAKEDEV_MACHINE}/MAKEDEV.conf
	${_MKTARGET_CREATE}
	MACHINE=${MAKEDEV_MACHINE:Q} MACHINE_ARCH=${MACHINE_ARCH:Q} \
	    NETBSDSRCDIR=${NETBSDSRCDIR:Q} \
	    ${TOOL_AWK} -f ${.CURDIR}/MAKEDEV.awk ${.CURDIR}/MAKEDEV.tmpl \
	    > ${.TARGET}

.include "${NETBSDSRCDIR}/etc/Makefile.params"

CLEANFILES+=	etc-release
etc-release: .EXEC .MAKE
	${_MKTARGET_CREATE}
	@(	echo "NetBSD ${DISTRIBVER}/${MACHINE}"; \
		echo ; \
		cat ${NETBSDSRCDIR}/sys/conf/copyright; \
		echo ; \
		echo "Build information:"; \
		printf "%20s   %s\n" "Build date" "${BUILD_DATE}"; \
		printf "%20s   %s\n"  "Built by" "${BUILDER}"; \
		if [ -n "${BUILDID}" ]; then \
		    printf "%20s   %s\n"  "Build ID" "${BUILDID}" ; \
		fi ; \
		if [ -n "${BUILDINFO}" ]; then \
		    echo ; \
		    info="$$(printf "%b" ${BUILDINFO:Q})" ; \
		    printf "%s\n" "$${info}" \
		    | ${TOOL_SED} -e 's/^/        /' ; \
		fi ; \
		echo ; \
		echo "Build settings:"; \
		echo ; \
		${PRINT_PARAMS} ; \
	) >${.OBJDIR}/${.TARGET}

install-etc-release: .PHONY etc-release
	${_MKMSG_INSTALL} etc/release
	${ETC_INSTALL_OBJ_FILE} -o ${BINOWN} -g ${BINGRP} -m 444 \
	    etc-release ${DESTDIR}/etc/release


FILESDIR=		/etc
CONFIGFILES=
CONFIGSYMLINKS=

.for file in ${BIN1}
CONFIGFILES+=		${file}
FILESMODE_${file:T}=	644
.endfor

.for file in ${BIN2}
CONFIGFILES+=		${file}
FILESMODE_${file:T}=	664
.endfor

.for file in ${BIN3}
CONFIGFILES+=		${file}
FILESMODE_${file:T}=	600
.endfor

.if (${MKPOSTFIX} != "no")
CONFIGFILES+=		aliases
FILESDIR_aliases=	/etc/mail
FILESMODE_aliases=	644
.endif

CONFIGFILES+=		MAKEDEV.local
FILESDIR_MAKEDEV.local=	/dev
FILESMODE_MAKEDEV.local=${BINMODE}

CONFIGFILES+=		crontab
FILESDIR_crontab=	/var/cron/tabs
FILESNAME_crontab=	root
FILESMODE_crontab=	600

CONFIGFILES+=		minfree
FILESDIR_minfree=	/var/crash
FILESMODE_minfree=	600

CONFIGSYMLINKS+=	${TZDIR}/${LOCALTIME}	/etc/localtime \
			/usr/sbin/rmt		/etc/rmt


# install-etc-files --
#	Install etc (config) files; not performed by "make build"
#
install-etc-files: .PHONY .MAKE check_DESTDIR MAKEDEV
	${_MKMSG_INSTALL} ${DESTDIR}/etc/master.passwd
	${ETC_INSTALL_FILE} -o root -g wheel -m 600 \
	    master.passwd ${DESTDIR}/etc
	${TOOL_PWD_MKDB} -p ${PWD_MKDB_ENDIAN} -d ${DESTDIR}/ \
	    ${DESTDIR}/etc/master.passwd
.if ${MKUNPRIVED} != "no"
	( \
		mode=0600; \
		for metaent in spwd.db passwd pwd.db; do \
	    		echo "./etc/$${metaent} type=file mode=$${mode} uname=root gname=wheel tags=etc_pkg"; \
			mode=0644; \
		done; \
	) | ${METALOG.add}
.endif	# MKUNPRIVED != no
	${_MKMSG_INSTALL} ${DESTDIR}/etc/ttys
.if exists(${.CURDIR}/etc.${MACHINE}/ttys)
	${ETC_INSTALL_OBJ_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
	    ${.CURDIR}/etc.${MACHINE}/ttys ${DESTDIR}/etc
.else
	${ETC_INSTALL_OBJ_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
	    ${.CURDIR}/etc.${MACHINE_CPU}/ttys ${DESTDIR}/etc
.endif
.if exists(etc.${MACHINE}/boot.cfg)
	${_MKMSG_INSTALL} ${DESTDIR}/boot.cfg
	${ETC_INSTALL_OBJ_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
	    ${.CURDIR}/etc.${MACHINE}/boot.cfg ${DESTDIR}/
.endif
	${_MKMSG_INSTALL} ${DESTDIR}/dev/MAKEDEV
	${ETC_INSTALL_OBJ_FILE} -o ${BINOWN} -g ${BINGRP} -m 555 \
	    MAKEDEV ${DESTDIR}/dev
.for owner group mode file in \
		${BINOWN} operator	664	/etc/dumpdates  \
		${BINOWN} operator	600	/etc/skeykeys \
		root wheel		600	/var/at/at.deny \
		root wheel		644	/var/db/locate.database \
		${BINOWN} ${BINGRP}	600	/var/log/authlog \
		root wheel		600	/var/log/cron \
		${BINOWN} ${UTMPGRP}	664	/var/log/lastlog \
		${BINOWN} ${UTMPGRP}	664	/var/log/lastlogx \
		${BINOWN} ${BINGRP}	640	/var/log/lpd-errs \
		${BINOWN} ${BINGRP}	600	/var/log/maillog \
		${BINOWN} ${BINGRP}	644	/var/log/messages \
		${BINOWN} ${BINGRP}	600	/var/log/secure \
		${BINOWN} ${UTMPGRP}	664	/var/log/wtmp \
		${BINOWN} ${UTMPGRP}	664	/var/log/wtmpx \
		${BINOWN} ${BINGRP}	600	/var/log/xferlog \
		daemon staff		664	/var/msgs/bounds \
		${BINOWN} ${UTMPGRP}	664	/var/run/utmp \
		${BINOWN} ${UTMPGRP}	664	/var/run/utmpx \
		games games		664	/var/games/atc_score \
		games games		664	/var/games/battlestar.log \
		games games		664	/var/games/cfscores \
		games games		664	/var/games/criblog \
		games games		660	/var/games/hackdir/perm \
		games games		660	/var/games/hackdir/record \
		games games		664	/var/games/larn/llog12.0 \
		games games		664	/var/games/larn/lscore12.0 \
		games games		664	/var/games/larn/playerids \
		games games		664	/var/games/robots_roll \
		games games		664	/var/games/rogue.scores \
		games games		664	/var/games/saillog \
		games games		664	/var/games/snakerawscores \
		games games		664	/var/games/snake.log \
		games games		664	/var/games/tetris.scores
	${_MKMSG_INSTALL} ${DESTDIR}${file}
	if [ ! -e ${DESTDIR}${file} -o -s ${DESTDIR}${file} ]; then \
		${ETC_INSTALL_FILE} -o ${owner} -g ${group} -m ${mode} \
    			/dev/null ${DESTDIR}${file}; \
	else true; fi
.endfor
.for subdir in . defaults bluetooth iscsi mtree namedb pam.d powerd rc.d root skel ssh
	${MAKEDIRTARGET} ${subdir} configinstall
.endfor
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/external/bsd/dhcpcd/sbin/dhcpcd configinstall
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/usr.bin/mail configinstall
.if (${MKPF} != "no")
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/usr.sbin/pf configinstall
.endif
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/crypto/external/bsd/openssh/bin configinstall
.if (${MKPOSTFIX} != "no")
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/external/ibm-public/postfix configinstall
.endif
.if (${MKATF} != "no")
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/external/bsd/atf/etc/atf configinstall
.endif
.if (${MKKYUA} != "no")
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/external/bsd/kyua-cli/etc/kyua configinstall
.endif


# install-obsolete-lists --
#	Install var/db/obsolete set lists; this is performed by "make build"
#
OBSOLETE.dir=		${.OBJDIR}/obsolete.dir
OBSOLETE.files=		base comp etc games man misc text
.if ${MKDEBUG} != "no"
OBSOLETE.files+=	debug
.endif
.if ${MKKMOD} != "no"
OBSOLETE.files+=	modules
.endif
.if ${MKATF} != "no"
OBSOLETE.files+=	tests
.endif
.if ${MKX11} != "no"
OBSOLETE.files+=	xbase xcomp xetc xfont xserver
.endif

# XXX make "makeobsolete" set wise; then generate files respectively
install-obsolete-lists: .PHONY .MAKE
	mkdir -p ${OBSOLETE.dir}
.if ${MKX11} != "no"
	(cd ${NETBSDSRCDIR}/distrib/sets && \
	    AWK=${TOOL_AWK:Q} MAKE=${MAKE:Q} ${HOST_SH} ./makeobsolete -b -t ${OBSOLETE.dir})
.else
	(cd ${NETBSDSRCDIR}/distrib/sets && \
	    AWK=${TOOL_AWK:Q} MAKE=${MAKE:Q} ${HOST_SH} ./makeobsolete -t ${OBSOLETE.dir})
.endif
.for file in ${OBSOLETE.files}
	${_MKMSG_INSTALL} ${DESTDIR}/var/db/obsolete/${file}
	if [ ! -e ${DESTDIR}/var/db/obsolete/${file} ] || \
	    ! cmp -s ${OBSOLETE.dir}/${file} ${DESTDIR}/var/db/obsolete/${file}; then \
		${ETC_INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m 644 \
		    ${OBSOLETE.dir}/${file} ${DESTDIR}/var/db/obsolete; \
	else true; fi
.endfor


# distrib-dirs --
#	Populate $DESTDIR with directories needed by NetBSD
#
distrib-dirs: .PHONY check_DESTDIR
	cd ${NETBSDSRCDIR}/etc/mtree && ${MAKE} distrib-dirs


# release, snapshot --
#	Build a full distribution including kernels & install media.
#
release snapshot: .PHONY .MAKE check_DESTDIR check_RELEASEDIR snap_md_post
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/distrib/sets sets
	${MAKESUMS} -A -t ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets \
		${KERNEL_SETS:@.SETS.@kern-${.SETS.}.tgz@}
	${MAKESUMS} -t ${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/kernel '*.gz'


# iso-image --
#	Standalone target to create a CDROM image after the release
#	was composed.  Should be run after "make release" in src and xsrc.
#	The do-iso-image is to be called from etc.$MACHINE/Makefile.inc
#
#	Note: At least mkisofs 2.0 should be used.
#
CDROM_NAME_ADD?=
CDROM_IMAGE?=${RELEASEDIR}/images/NetBSD-${DISTRIBVER}-${MACHINE}.iso
CDROM.dir=	${.OBJDIR}/cdrom.dir
CDROM.pathlist=	${.OBJDIR}/cdrom.pathlist

iso-image:

.if ${MKISOFS} != true
do-iso-image: .PHONY check_DESTDIR check_RELEASEDIR iso-image-md-post
	${MAKESUMS} -t ${RELEASEDIR}/images/ '*.iso'
	@echo "iso-image created as: ${CDROM_IMAGE}"
.else
do-iso-image:
	@echo iso-image: mkisofs not found
.endif

iso-image-setup: .PHONY check_RELEASEDIR
	rm -f ${CDROM.pathlist}
.for extra in README SOURCE_DATE source
.if exists(${RELEASEDIR}/${extra})
	echo "${extra}=${RELEASEDIR}/${extra}" >> ${CDROM.pathlist}
.endif
.endfor
	echo "${MACHINE}/=${RELEASEDIR}/${RELEASEMACHINEDIR}/" >> ${CDROM.pathlist}
	mkdir -p ${CDROM.dir}

check_imagedir:
	mkdir -p ${RELEASEDIR}/images

# iso-image-mi --
#	Create the image after the MD operations have completed.
#
iso-image-mi: .PHONY check_DESTDIR check_RELEASEDIR iso-image-md-pre check_imagedir
	@if ! ${MKISOFS} --version; then \
		echo "install pkgsrc/sysutils/cdrtools and run 'make iso-image'." ; \
		false; \
	fi
	${MKISOFS} ${MKISOFS_FLAGS} -graft-points -path-list ${CDROM.pathlist} \
	    -o ${CDROM_IMAGE} ${CDROM.dir}

# iso-image-md-pre --
#	Setup ${CDROM.dir} to produce a bootable CD image.
#	Overridden by etc.$MACHINE/Makefile.inc
#
iso-image-md-pre: .PHONY check_DESTDIR check_RELEASEDIR iso-image-setup
#	(empty -- look in the machine-dependent Makefile.inc)

# iso-image-md-post --
#	Fixup the CD-image to be bootable.
#	Overridden by etc.$MACHINE/Makefile.inc
#
iso-image-md-post: .PHONY check_DESTDIR check_RELEASEDIR iso-image-mi
#	(empty -- look in the machine-dependent Makefile.inc)


# live-image --
#	Standalone target to create live images after the release was composed.
#	Should be run after "make release" in src and xsrc.
#	LIVEIMG_RELEASEDIR specifies where to install live images and
#	it can be set in MD etc.${MACHINE}/Makefile.inc.
#
LIVEIMG_RELEASEDIR?= ${RELEASEDIR}/images

live-image: .PHONY check_DESTDIR check_RELEASEDIR
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/distrib live_image \
	    LIVEIMG_RELEASEDIR=${LIVEIMG_RELEASEDIR}
	${MAKESUMS} -t ${LIVEIMG_RELEASEDIR} '*.img.gz'

# install-image --
#	Standalone target to create installation images
#	after the release was composed.
#	Should be run after "make release" in src and xsrc.
#	INSTIMG_RELEASEDIR specifies where to install live images and
#	it can be set in MD etc.${MACHINE}/Makefile.inc.
#
INSTIMG_RELEASEDIR?= ${RELEASEDIR}/images

install-image: .PHONY check_DESTDIR check_RELEASEDIR
	${MAKEDIRTARGET} ${NETBSDSRCDIR}/distrib install_image \
	    INSTIMG_RELEASEDIR=${INSTIMG_RELEASEDIR}
	${MAKESUMS} -t ${INSTIMG_RELEASEDIR} '*.img.gz'

# snap_pre --
#	Create ${RELEASEDIR} and necessary subdirectories.
#
snap_pre: .PHONY check_DESTDIR check_RELEASEDIR distribution
	${INSTALL} -d -m 755 ${RELEASEDIR}
.if ${MKUPDATE} == "no"
# Could be a mount point, ignore the errors
	-/bin/rm -rf ${RELEASEDIR}/${RELEASEMACHINEDIR}
.endif
	${INSTALL} -d -m 755 ${RELEASEDIR}/${RELEASEMACHINEDIR}
.for dir in ${INSTALLATION_DIRS}
	${INSTALL} -d -m 755 ${RELEASEDIR}/${RELEASEMACHINEDIR}/${dir}
.endfor

# snap_post --
#	Build the install media and notes from distrib
#
snap_post: .PHONY .MAKE build_kernelsets build_releasekernels
.if ${MKUPDATE} == "no"
	cd ${NETBSDSRCDIR}/distrib && ${MAKE} cleandir
.endif
	cd ${NETBSDSRCDIR}/distrib && ${MAKE} depend && ${MAKE} && \
	    ${MAKE} release

# build kernels --
#	This target builds the kernels specified by each port.
#	A port may specify the following kernels:
#
#	KERNEL_SETS		The list of kernels that will be
#				packaged into sets, named
#				kern-${kernel}.tgz.  These kernels
#				are also placed in the binary/kernel
#				area of the release package as
#				netbsd-${kernel}.gz.
#
#	EXTRA_KERNELS		Additional kernels to place in the
#				binary/kernel area of the release
#				package as netbsd-${kernel}.gz, but
#				which are not placed into sets. This
#				allows a port to provide e.g. a netbootable
#				installation kernel containing a ramdisk.
#
#	BUILD_KERNELS		Additional kernels to build which are
#				not placed into sets nor into the
#				binary/kernel area of the release
#				package.  These are typically kernels
#				that are built for inclusion only in
#				installation disk/CD-ROM/tape images.
#
#	A port may also specify KERNEL_SUFFIXES, which is an optional list
#	of filename suffixes for kernels to include in the kernel sets and
#	in the binary/kernel area of the release package (e.g. "netbsd" vs.
#	"netbsd.ecoff" and "netbsd.srec").  It is not an error if kernels
#	with these suffixes do not exist in the kernel build directory.
#
#
# A list of all the kernels to build, which can be overridden from
# external sources (such as make(1)'s environment or command line)
#
ALL_KERNELS?=	${KERNEL_SETS} ${EXTRA_KERNELS} ${BUILD_KERNELS}
.export ALL_KERNELS

GETKERNELAWK=	${TOOL_AWK} '/^config/ {print $$2; found=1} \
		END{ if (found == 0) print "netbsd"; }'

build_kernels: .PHONY
#	Configure & compile kernels listed in ${ALL_KERNELS}
#
# The 'sync' is so that all writes during the build are pushed back
# to the disk.  Not having it causes problems on some host systems
# (e.g. Linux) when building on NFS.
#
.if !defined(KERNELS_DONE)						# {
.for configfile in ${ALL_KERNELS:O:u}					# {
build_kernels: kern-${configfile}
kern-${configfile}: .PHONY .MAKE
	cd ${KERNCONFDIR} && ${TOOL_CONFIG} ${CONFIGOPTS} -s ${KERNSRCDIR} \
	    -U DEBUG -b ${KERNOBJDIR}/${configfile:C/.*\///} ${configfile}
.if ${MKUPDATE} == "no"
	${MAKE} -C ${KERNOBJDIR}/${configfile:C/.*\///} distclean
.endif
	${MAKE} -C ${KERNOBJDIR}/${configfile:C/.*\///} depend && \
	${MAKE} -C ${KERNOBJDIR}/${configfile:C/.*\///} 
	sync
.endfor	# ALL_KERNELS							# }
.endif	# KERNELS_DONE							# }

build_kernelsets: .PHONY
#	Create kernel sets from ${KERNEL_SETS} into
#	${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets
#
.for configfile in ${KERNEL_SETS:O:u}					# {
.for configsel in ${ALL_KERNELS:O:u}
.if ${configfile} == ${configsel}
build_kernelsets: kernset-${configfile}
kernset-${configfile}: .PHONY build_kernels snap_pre
	@kernlist=$$(${GETKERNELAWK} ${KERNCONFDIR}/${configfile}); \
	kerndir=${KERNOBJDIR}/${configfile:C/.*\///}; \
	kernsuffixes="${KERNEL_SUFFIXES:S/^/./}"; \
	kern_tgz=${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/sets/kern-${configfile}.tgz; \
	pax_cmd="GZIP=${GZIP_FLAGS:Q} ${TOOL_PAX} ${PAX_TIMESTAMP} --use-compress-program ${TOOL_GZIP:Q} -O -w -M -N ${NETBSDSRCDIR}/etc -f $${kern_tgz}"; \
	cd $${kerndir} && { \
		kernels=; newest=; \
		for kernel in $${kernlist}; do \
			for s in "" $${kernsuffixes}; do \
				ks="$${kernel}$${s}"; \
				[ -f $${ks} ] || continue; \
				kernels="$${kernels} $${ks}"; \
				[ -z "$${newest}" -o $${ks} -nt "$${newest}" ] && \
					newest=$${ks}; \
			done; \
		done; \
		[ $${kern_tgz} -nt "$${newest}" ] || { \
			echo "echo $${kernels} | $${pax_cmd}"; \
			( echo "/set uname=${BINOWN} gname=${BINGRP}"; \
			echo ". type=dir optional"; \
			dtblist=$$(${MAKE} -v DTB); \
			for dtb in $${dtblist}; do \
				echo "./$${dtb} type=file"; \
			done; \
			for kernel in $${kernels}; do \
				echo "./$${kernel} type=file"; \
			done ) | eval $${pax_cmd}; \
		} \
	}
.endif
.endfor
.endfor	# KERNEL_SETS							# }

build_releasekernels: .PHONY
#	Build kernel.gz from ${KERNEL_SETS} ${EXTRA_KERNELS} into
#	${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/kernel
#
.for configfile in ${KERNEL_SETS:O:u} ${EXTRA_KERNELS:O:u}		# {
.for configsel in ${ALL_KERNELS:O:u}
.if ${configfile} == ${configsel}
build_releasekernels: releasekern-${configfile}
releasekern-${configfile}: .PHONY build_kernels snap_pre
	@kernlist=$$(${GETKERNELAWK} ${KERNCONFDIR}/${configfile:C/.*\///}); \
	kerndir=${KERNOBJDIR}/${configfile:C/.*\///}; \
	kernsuffixes="${KERNEL_SUFFIXES:S/^/./}"; \
	dest="${RELEASEDIR}/${RELEASEMACHINEDIR}/binary/kernel"; \
	cd $${kerndir} && {	\
		dtblist=$$(${MAKE} -v DTB); \
		for dtb in $${dtblist}; do \
			[ ! -f $${dtb} ] && continue; \
			dtb_gz="$${dest}/$${dtb}.gz"; \
			[ $${dtb_gz} -nt $${dtb} ] && continue; \
			rm -f $${dtb_gz}; \
			echo "${TOOL_GZIP} ${GZIP_FLAGS} -c < $${kerndir}/$${dtb} > $${dtb_gz}"; \
			${TOOL_GZIP} ${GZIP_FLAGS} -c < $${dtb} > $${dtb_gz}; \
		done; \
		for kernel in $${kernlist}; do \
			for s in "" $${kernsuffixes}; do \
				ks="$${kernel}$${s}"; \
				[ ! -f $${ks} ] && continue; \
				knl_gz="$${dest}/$${kernel}-${configfile:C/.*\///}$${s}.gz"; \
				[ $${knl_gz} -nt $${ks} ] && continue; \
				rm -f $${knl_gz}; \
				echo "${TOOL_GZIP} ${GZIP_FLAGS} -c < $${kerndir}/$${ks} > $${knl_gz}"; \
				${TOOL_GZIP} ${GZIP_FLAGS} -c < $${ks} > $${knl_gz}; \
			done; \
		done; \
	}
.endif
.endfor
.endfor	# KERNEL_SETS EXTRA_KERNELS					# }

# snap_md_post --
#	Machine dependent distribution media operations.
#	Overridden by etc.$MACHINE/Makefile.inc
#
snap_md_post: .PHONY check_DESTDIR check_RELEASEDIR snap_post
#	(empty -- look in the machine-dependent Makefile.inc)


clean:
	-rm -rf ${CDROM.dir} ${CDROM.pathlist} ${OBSOLETE.dir}

SUBDIR=	defaults rc.d mtree

.include <bsd.prog.mk>
.include <bsd.subdir.mk>

test:
	@echo ${OBSOLETE.files}