2021-10-11 18:37:13 -03:00

208 lines
5.1 KiB
Makefile

#
# @(#)Makefile 1.1 94/10/31 SMI
#
# This makefile is still not perfect, but a "make clean" followed
# by a "make" will rebuild everything. "touch files" are used to
# avoid reconfiguring on every "make".
# Note that the targets are all actual files, so e.g., it's
# $(ARCH)/LINT, not just LINT.
.SUFFIXES:
DESTDIR=
CHOWN=/etc/chown
CONFIG=/etc/config
ARCH:sh = arch -k
KERNELS= GENERIC \
GENERIC_SMALL \
MINIROOT \
MUNIX
MAKEFILES= kadb/Makefile \
boot/Makefile \
$(ARCH)/conf/Makefile
# those files that should cause a reconfigure (not the same as a rebuild)
#
CONFIGFILES= $(ARCH)/conf/files \
$(ARCH)/conf/devices \
$(ARCH)/conf/Makefile.src \
$(ARCH)/conf/Makefile.obj \
conf.common/files.cmn \
conf.common/master
OTHERFILES= $(ARCH)/genassym.c \
conf.common/Makefile.install \
conf.common/EXCEPTIONS \
conf.common/README \
conf.common/RELEASE \
conf.common/defines \
conf.common/mkconfig.sh \
conf.common/newvers.sh \
conf.common/param.c \
sun/swapgeneric.c \
sun/symbols.raw
MOSTFILES= $(LIBDIR) $(SPECDIR) $(MAKEFILES) $(CONFIGFILES) $(OTHERFILES)
# touch files which need to be removed on a clean
#
TOUCHFILES=config_* configfiles headerfiles
# Various directories
#
KERNELDIRS= $(KERNELS:%=$(ARCH)/%)
LINTDIR= $(ARCH)/LINT
OTHER_KERNELS= $(ARCH)/GENERIC_SMALL $(ARCH)/MUNIX $(ARCH)/MINIROOT
# Subdirectories that have makefiles of their own
# and need to have 'make depend' run before descending into them.
#
DEPENDS=kadb
# Subdirectories (with makefiles) that have config dependencies.
#
CONFIGS=$(KERNELDIRS)
# Subdirectories (with makefiles) that have no dependencies or preconditions.
#
SIMPLES=boot adb
# Subdirectories with makefiles that implement clean and install
# The kernels are excluded:
# clean requires config (which can take a very long time), and every
# install is the same in every kernel makefile, so they would conflict
#
SUBDIR= $(SIMPLES) $(DEPENDS)
# Libraries which must be up to date before building the kernel.
# XXX we only need source and header files, not libraries
#
LIBDIR= des rpc rpcsvc boot/lib/$(ARCH)
# Directories which need special treatment
#
SPECDIR= pixrect sunwindow
# Encapsulate architectural dependencies here
#
ALL.ARCH= all.sun4 all.sun4c all.sun4m
all: all.$(ARCH)
$(ALL.ARCH): $(MOSTFILES) $(CONFIGS) ${SUBDIR} ${LINTDIR}
$(DEPENDS): FRC
cd $@ && $(MAKE) ${MFLAGS} depend
cd $@ && $(MAKE) ${MFLAGS}
$(LIBDIR) $(SIMPLES): FRC
cd $@ && $(MAKE) ${MFLAGS}
pixrect: FRC
cd ../usr.lib/libpixrect && $(MAKE) $(MFLAGS) kernel
sunwindow: FRC
cd $@/rect && $(MAKE) $(MFLAGS) src
cd $@ && $(MAKE) $(MFLAGS) hdr SUBDIRS="attr misc pw rect win"
$(CONFIGS): config_$$(@F) FRC
cd $@ && $(MAKE) ${MFLAGS}
$(LINTDIR): config_GENERIC FRC
install -d $(LINTDIR)
cd $(ARCH)/conf && $(MAKE) $(MFLAGS) LINT && $(CONFIG) -g LINT
cd $(LINTDIR) && $(MAKE) ${MFLAGS} lint | 2>&1 tee lint.errs
#
# Handle config dependencies
#
$(KERNELS:%=config_%): configfiles $(ARCH)/conf/$$(@F:config_%=%)
cd $(ARCH)/conf && \
$(MAKE) $(MFLAGS) $(@F:config_%=%) && \
${CONFIG} -g $(CONFIGFLAGS) $(@F:config_%=%)
touch $@
$(KERNELS:%=$(ARCH)/conf/%):
cd $(@D) && $(MAKE) $(MFLAGS) $(@F)
#
# These kludges exist because:
# * the way some symbolic links are handled
# * some header files are not retrieved when the install_h target is run
# * the files needed to run config are thrown in here
# * not all files are SCCS'ed
#
configfiles: headerfiles $(CONFIGFILES)
touch $@
headerfiles:
cd krpc && $(MAKE) $(MFLAGS)
cd specfs && $(MAKE) $(MFLAGS)
cd sparc && $(MAKE) $(MFLAGS)
cd pcfs && $(MAKE) $(MFLAGS)
cd debug && $(MAKE) $(MFLAGS)
cd lwp && $(MAKE) $(MFLAGS) kernel
touch $@
#
# End of get kludges
#
install:
set -x;for i in ${SUBDIR} ${OTHER_KERNELS}; do \
(cd $$i && $(MAKE) ${MFLAGS} DESTDIR=${DESTDIR} install); done
cd $(ARCH)/conf && $(MAKE) $(MFLAGS) DESTDIR=${DESTDIR} install
clean: $(MAKEFILES) FRC
$(RM) a.out core *.s *.o $(TOUCHFILES)
@set -x;for i in ${SUBDIR} $(LINTDIR) $(OTHER_KERNELS); \
do ( if [ -d $$i ];then cd $$i && $(MAKE) ${MFLAGS} clean;fi;);done
#
# Install header files
#
# network directories...
#
NETDIRS=net netinet nettli
#
# include all filesystem directories
#
FSDIRS= lofs tfs specfs nfs rfs ufs tmpfs hsfs pcfs
SYSDIRS=$(NETDIRS) $(FSDIRS) debug sparc sys vm os
SUNSYSDIRS=sbusdev scsi sun sun4 sun4c sun4m \
sundev sunif sunwindowdev
MACHSYSDIRSsun4=$(SUNSYSDIRS)
MACHSYSDIRSsun4c=$(SUNSYSDIRS)
MACHSYSDIRSsun4m=$(SUNSYSDIRS)
MACHSYSDIRSvax=vax vaxif vaxmba vaxuba
STANDDIRS=boot stand/mon
install_h: headerfiles FRC
set -x; for i in $(SYSDIRS) $(MACHSYSDIRS$(ARCH)); do \
install -d -o bin -m 755 $(DESTDIR)/usr/include/$$i; \
( cd $$i && \
$(MAKE) $(MFLAGS) $@ CHOWN=$(CHOWN) DESTDIR=$(DESTDIR) ); \
done
@set -x; for i in $(STANDDIRS); do \
( cd $$i && \
$(MAKE) $(MFLAGS) $@ CHOWN=$(CHOWN) DESTDIR=$(DESTDIR) ); \
done
#
# Make a tags file and set up links to it from all kernel
# source directories.
#
tags: FRC
cd $(ARCH)/GENERIC && ${MAKE} $(MFLAGS) tags
m=$(ARCH); \
for i in `ls -d */. | grep -v "^$$m/."`; do \
$(RM) $$i/tags; ln -s ../$$m/tags $$i/tags; \
done
#
# FoRCing target
#
FRC: