xref: /dragonfly/Makefile (revision 5c694678)
1#
2# $FreeBSD: src/Makefile,v 1.234.2.19 2003/04/16 09:59:40 ru Exp $
3#
4# The user-driven targets are:
5#
6# buildworld          - Rebuild *everything* but the kernel, including glue to
7#                       help do upgrades.
8# quickworld          - Skip bootstrap, build and cross-build tool steps.
9# realquickworld      - Skip above steps, plus depend.
10# crossworld          - Just do the bootstrap, build, and cross-build steps.
11#
12# buildportschroot    - Build the chroot environment for buildports
13# buildports	      - Build dragonfly/base dports
14#
15# installworld        - Install everything built by "buildworld", and the
16#                       rescue tools and initrd image if they do not exist.
17# installworld-force  - Install everything built by "buildworld";
18#                       special case for old systems.
19# installports	      - Install ports built via buildports.
20# cleanupports	      - umount all the special chroot mounts for buildports
21#			and cleanup any dsynth mounts that might be left over.
22#
23# world               - buildworld + installworld.
24# buildkernel         - Rebuild the kernel and the kernel-modules from scratch
25#                       using build/bootstrap/cross tools from the last
26#                       buildworld.
27# nativekernel        - Rebuild the kernel and the kernel-modules from scratch
28#                       using native tools.
29# quickkernel         - Rebuild the kernel quickly (build or native), and do
30#                       not clean out the obj modules.
31# realquickkernel     - Like quickkernel, but skips depend too.
32# installkernel       - Install the kernel and the kernel-modules.
33# reinstallkernel     - Reinstall the kernel and the kernel-modules.
34# kernel              - buildkernel + installkernel.
35# preinstall          - Do certain operations (typically the addition of new
36#                       users and groups used by utilities to be installed)
37#                       before doing installworld.
38# upgrade             - Upgrade the files in /etc and also setup the rest
39#                       of the system for DragonFly. ex. two compilers.
40# build-all           - Runs buildworld and buildkernel both with -j hw.ncpu
41#			Also runs buildportschroot and buildports
42# install-all         - Runs installkernel, installworld and upgrade all with
43#                       -j 1
44#
45# initrd              - Install the statically linked rescue tools and the
46#                       initrd image built by "buildworld".
47# backupworld         - Copy /bin /sbin /usr/bin /usr/sbin /usr/lib
48#                       /usr/libexec to manual backup dir.
49# restoreworld        - Install binaries from manual backup dir to world.
50# restoreworld-auto   - Install binaries from auto-backup dir to world;
51#                       installworld target makes backup to auto-backup dir.
52# backup-auto-clean   - Delete backup from auto-backup dir.
53# backup-clean        - Delete backup from manual backup dir.
54#
55# This makefile is simple by design. The DragonFly make automatically reads
56# /usr/share/mk/sys.mk unless the -m argument is specified on the
57# command line. By keeping this makefile simple, it doesn't matter too
58# much how different the installed mk files are from those in the source
59# tree. This makefile executes a child make process, forcing it to use
60# the mk files from the source tree which are supposed to DTRT.
61#
62# Most of the user-driven targets (as listed above) are implemented in
63# Makefile.inc1.
64#
65# For individuals wanting to build from the sources currently on their
66# system, the simple instructions are:
67#
68# 1.  `cd /usr/src'  (or to the directory containing your source tree).
69# 2.  `make world'
70#
71# For individuals wanting to upgrade their sources (even if only a
72# delta of a few days):
73#
74# 1.  `cd /usr/src'       (or to the directory containing your source tree).
75# 2.  `make buildworld'
76# 3.  `make buildkernel KERNCONF=YOUR_KERNEL_HERE'   (default X86_64_GENERIC).
77# 4.  `make installkernel KERNCONF=YOUR_KERNEL_HERE' (default X86_64_GENERIC).
78# 5.  `make installworld'
79# 6.  `make upgrade'
80# 7.  `reboot'
81# 8.  `make initrd'  (after making sure that the new world works well).
82#
83# If TARGET_ARCH=arch (e.g. x86_64) is specified you can
84# cross build world for other architectures using the buildworld target,
85# and once the world is built you can cross build a kernel using the
86# buildkernel target.
87#
88# For more information, see the build(7) manual page.
89#
90
91TGTS=	all all-man buildkernel quickkernel realquickkernel nativekernel \
92	buildworld crossworld quickworld realquickworld checkdpadd clean \
93	cleandepend cleandir depend everything \
94	buildportschroot buildports installports mountports umountports \
95	hierarchy install installcheck installkernel \
96	reinstallkernel installworld installworld-force os-release initrd \
97	libraries lint maninstall \
98	manlint mk obj objlink regress rerelease tags \
99	backupworld restoreworld restoreworld-auto \
100	build-all install-all \
101	backup-clean backup-auto-clean \
102	_obj _includes _libraries _depend _worldtmp \
103	_bootstrap-tools _build-tools _cross-tools
104#TGTS+=	mandiff # XXX temporary target
105
106BITGTS=	files includes
107BITGTS:=${BITGTS} ${BITGTS:S/^/build/} ${BITGTS:S/^/install/}
108
109.ORDER: buildworld installworld
110.ORDER: buildworld buildkernel
111.ORDER: buildworld nativekernel
112.ORDER: buildworld quickkernel
113.ORDER: buildworld realquickkernel
114.ORDER: buildkernel installkernel
115.ORDER: buildkernel reinstallkernel
116.ORDER: quickworld installworld
117.ORDER: quickworld buildkernel
118.ORDER: quickworld nativekernel
119.ORDER: quickworld quickkernel
120.ORDER: quickworld realquickkernel
121.ORDER: quickkernel installkernel
122.ORDER: quickkernel reinstallkernel
123.ORDER: realquickkernel installkernel
124.ORDER: realquickkernel reinstallkernel
125.ORDER: build-all install-all
126
127_HOSTPATH=	/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
128MAKE=	PATH=${_HOSTPATH} make -m ${.CURDIR}/share/mk -f Makefile.inc1
129
130#
131# Handle the user-driven targets, using the source relative mk files.
132#
133${TGTS} ${BITGTS}: .PHONY
134	@cd ${.CURDIR}; \
135		${MAKE} ${.TARGET}
136
137# Fail with an error when no target is given.
138.MAIN: _guard
139
140_guard: .PHONY
141	@echo
142	@echo "Explicit target required.  See build(7)."
143	@echo
144	@false
145
146STARTTIME!= LC_ALL=C date
147
148#
149# world
150#
151# Attempt to rebuild and reinstall *everything*, with reasonable chance of
152# success, regardless of how old your existing system is.
153#
154world:
155	@echo "--------------------------------------------------------------"
156	@echo ">>> make world started on ${STARTTIME}"
157	@echo "--------------------------------------------------------------"
158.if target(pre-world)
159	@echo
160	@echo "--------------------------------------------------------------"
161	@echo ">>> starting pre-world target"
162	@echo "--------------------------------------------------------------"
163	@cd ${.CURDIR}; ${MAKE} pre-world
164	@echo "--------------------------------------------------------------"
165	@echo ">>> pre-world target complete"
166	@echo "--------------------------------------------------------------"
167.endif
168	@cd ${.CURDIR}; ${MAKE} buildworld
169	@cd ${.CURDIR}; ${MAKE} -B installworld
170.if target(post-world)
171	@echo
172	@echo "--------------------------------------------------------------"
173	@echo ">>> starting post-world target"
174	@echo "--------------------------------------------------------------"
175	@cd ${.CURDIR}; ${MAKE} post-world
176	@echo "--------------------------------------------------------------"
177	@echo ">>> post-world target complete"
178	@echo "--------------------------------------------------------------"
179.endif
180	@echo
181	@echo "--------------------------------------------------------------"
182	@printf ">>> make world completed on `LC_ALL=C date`\n                        (started ${STARTTIME})\n"
183	@echo "--------------------------------------------------------------"
184
185# kernel
186#
187# Short hand for `make buildkernel installkernel'
188#
189kernel: buildkernel installkernel
190
191#
192# A simple test target used as part of the test to see if make supports
193# the -m argument.  Also test that make will only evaluate a conditional
194# as far as is necessary to determine its value.
195#
196test:
197.if defined(notdef)
198.undef notdef
199.if defined(notdef) && ${notdef:tu}
200.endif
201.endif
202
203#
204# Upgrade the installed make to the current version using the installed
205# headers, libraries and build tools. This is required on installed versions
206# prior to 2.2.5 in which the installed make doesn't support the -m argument.
207#
208make:
209	@echo
210	@echo "--------------------------------------------------------------"
211	@echo " Upgrading the installed make"
212	@echo "--------------------------------------------------------------"
213	@cd ${.CURDIR}/usr.bin/make; \
214		make obj && make depend && make all && make install
215
216# Handle pre-installworld operations (e.g., creating of new users/groups).
217#
218installworld: preinstall
219preinstall:
220	@cd ${.CURDIR}/etc; make -m ${.CURDIR}/share/mk preinstall
221
222# Handle the upgrade of /etc, post-installworld updating of static files
223# and removing obsolete files.
224#
225upgrade:
226	@cd ${.CURDIR}/etc; make -m ${.CURDIR}/share/mk upgrade_etc
227.if !defined(NOMAN) && !defined(NO_MAKEDB_RUN)
228	@cd ${.CURDIR}/share/man; make makedb
229.endif
230	@echo "--------------------------------------------------------------"
231	@echo "Now you can reboot into the new system!  If the new system works as"
232	@echo "expected, consider updating the rescue tools and initrd image with:"
233	@echo "    # cd ${.CURDIR}; make initrd"
234	@echo "NOTE: Do this only after verifying the new system works as expected!"
235	@echo ""
236	@echo "You also need to upgrade the 3rd-party packages with:"
237	@echo "    # pkg update; pkg upgrade [-f]"
238	@echo "--------------------------------------------------------------"
239