Makefile revision 1.80
1# $OpenBSD: Makefile,v 1.80 2001/09/25 09:43:22 espie Exp $ 2 3# 4# For more information on building in tricky environments, please see 5# the list of possible environment variables described in 6# /usr/share/mk/bsd.README. 7# 8# Building recommendations: 9# 10# 1) If at all possible, put this source tree in /usr/src. If /usr/src 11# must be a symbolic link, setenv BSDSRCDIR to point to the real location. 12# 13# 2) It is also recommended that you compile with objects outside the 14# source tree. To do this, ensure /usr/obj exists or points to some 15# area of disk of sufficient size. Then do "cd /usr/src; make obj". 16# This will make a symbolic link called "obj" in each directory, as 17# well as populate the /usr/obj properly with directories for the 18# objects. 19# 20# 3) It is strongly recommended that you build and install a new kernel 21# before rebuilding your system. Some of the new programs may use new 22# functionality or depend on API changes that your old kernel doesn't have. 23# 24# 4) If you are reasonably sure that things will compile OK, use the 25# "make build" target supplied here. Good luck. 26# 27# 5) If you want to setup a cross-build environment, there is a "cross-tools" 28# target available which upon completion of "make TARGET=<target> cross-tools" 29# (where <target> is one of the names in the /sys/arch directory) will produce 30# a set of compilation tools along with the includes in the /usr/cross/<target> 31# directory. 32# 33 34.include <bsd.own.mk> # for NOMAN, if it's there. 35 36SUBDIR+= lib include bin libexec sbin usr.bin usr.sbin share games 37SUBDIR+= gnu 38 39SUBDIR+= sys lkm 40 41.if (${KERBEROS:L} == "yes") 42SUBDIR+= kerberosIV 43.endif 44 45.if (${KERBEROS5:L} == "yes") 46SUBDIR+= kerberosV 47.endif 48 49.if make(clean) || make(cleandir) || make(obj) 50SUBDIR+= distrib 51.endif 52 53.if exists(regress) 54.ifmake !(install) 55SUBDIR+= regress 56.endif 57 58regression-tests: 59 @echo Running regression tests... 60 @cd ${.CURDIR}/regress && exec ${MAKE} regress 61.endif 62 63includes: 64 cd ${.CURDIR}/include && ${MAKE} prereq && exec ${SUDO} ${MAKE} includes 65 66beforeinstall: 67 cd ${.CURDIR}/etc && exec ${MAKE} DESTDIR=${DESTDIR} distrib-dirs 68 cd ${.CURDIR}/include && exec ${MAKE} includes 69 70afterinstall: 71.ifndef NOMAN 72 cd ${.CURDIR}/share/man && exec ${MAKE} makedb 73.endif 74 75build: 76.ifdef GLOBAL_AUTOCONF_CACHE 77 cp /dev/null ${GLOBAL_AUTOCONF_CACHE} 78.endif 79 cd ${.CURDIR}/share/mk && exec ${SUDO} ${MAKE} install 80 cd ${.CURDIR}/gnu/share && exec ${SUDO} ${MAKE} install 81 cd ${.CURDIR}/include && ${MAKE} prereq && exec ${SUDO} ${MAKE} includes 82 ${SUDO} ${MAKE} cleandir 83 cd ${.CURDIR}/lib && ${MAKE} depend && ${MAKE} && \ 84 NOMAN=1 exec ${SUDO} ${MAKE} install 85 cd ${.CURDIR}/gnu/lib && ${MAKE} depend && ${MAKE} && \ 86 NOMAN=1 exec ${SUDO} ${MAKE} install 87.if (${KERBEROS:L} == "yes") 88 cd ${.CURDIR}/kerberosIV/lib && ${MAKE} depend && ${MAKE} && \ 89 NOMAN=1 exec ${SUDO} ${MAKE} install 90.endif 91.if (${KERBEROS5:L} == "yes") 92 cd ${.CURDIR}/kerberosV/lib && ${MAKE} depend && ${MAKE} && \ 93 NOMAN=1 exec ${SUDO} ${MAKE} install 94.endif 95 cd ${.CURDIR}/gnu/usr.bin/perl && \ 96 ${MAKE} -f Makefile.bsd-wrapper depend && \ 97 ${MAKE} -f Makefile.bsd-wrapper perl.lib && \ 98 exec ${SUDO} ${MAKE} -f Makefile.bsd-wrapper install.lib 99 ${MAKE} depend && ${MAKE} && exec ${SUDO} ${MAKE} install 100 101.if !defined(TARGET) 102cross-tools: 103 echo "TARGET must be set"; exit 1 104.else 105cross-tools: cross-helpers cross-dirs cross-includes cross-binutils \ 106 cross-gcc cross-lib 107 108CROSSDIR= ${DESTDIR}/usr/cross/${TARGET} 109CROSSENV= AR=${CROSSDIR}/usr/bin/ar AS=${CROSSDIR}/usr/bin/as \ 110 CC=${CROSSDIR}/usr/bin/cc CPP=${CROSSDIR}/usr/bin/cpp \ 111 CXX=${CROSSDIR}/usr/bin/c++ \ 112 LD=${CROSSDIR}/usr/bin/ld NM=${CROSSDIR}/usr/bin/nm \ 113 LORDER=/usr/bin/lorder RANLIB=${CROSSDIR}/usr/bin/ranlib \ 114 SIZE=${CROSSDIR}/usr/bin/size STRIP=${CROSSDIR}/usr/bin/strip \ 115 HOSTCC=cc 116CROSSPATH= ${PATH}:${CROSSDIR}/usr/bin 117 118cross-env: 119 @echo ${CROSSENV} DESTDIR=${CROSSDIR} MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` 120 121cross-helpers: 122 @-mkdir -p ${CROSSDIR} 123 @case ${TARGET} in \ 124 sparc|i386|m68k|alpha|hppa|powerpc|sparc64|m88k|vax) \ 125 echo ${TARGET} ;;\ 126 amiga|sun3|mac68k|hp300|mvme68k) \ 127 echo m68k ;;\ 128 mvme88k) \ 129 echo m88k ;;\ 130 mvmeppc|macppc) \ 131 echo powerpc ;;\ 132 *) \ 133 (echo Unknown arch ${TARGET} >&2) ; exit 1;; \ 134 esac > ${CROSSDIR}/TARGET_ARCH 135 @echo TARGET_ARCH is `cat ${CROSSDIR}/TARGET_ARCH` 136 @eval `grep '^osr=' sys/conf/newvers.sh`; \ 137 sed "s/\$$/-unknown-openbsd$$osr/" ${CROSSDIR}/TARGET_ARCH > \ 138 ${CROSSDIR}/TARGET_CANON 139 140cross-dirs: ${CROSSDIR}/stamp.dirs 141 @-mkdir -p ${CROSSDIR} 142 @-mkdir -p ${CROSSDIR}/usr/obj 143 @-mkdir -p ${CROSSDIR}/usr/bin 144 @-mkdir -p ${CROSSDIR}/usr/include/kerberosIV 145 @-mkdir -p ${CROSSDIR}/usr/include/kerberosV 146 @-mkdir -p ${CROSSDIR}/usr/lib/apache/include/xml 147 @-mkdir -p ${CROSSDIR}/usr/libexec 148 @-mkdir -p ${CROSSDIR}/var/db 149 @-mkdir -p ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON` 150 @ln -sf ${CROSSDIR}/usr/include \ 151 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/include 152 @ln -sf ${CROSSDIR}/usr/lib \ 153 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/lib 154 @-mkdir -p ${CROSSDIR}/usr/obj 155 @-mkdir -p ${CROSSDIR}/usr/bin 156 @-mkdir -p ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin 157 158${CROSSDIR}/stamp.dirs: 159 @touch ${CROSSDIR}/stamp.dirs 160 161cross-includes: cross-dirs 162 cd include; \ 163 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 164 ${MAKE} prereq && \ 165 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 166 ${MAKE} DESTDIR=${CROSSDIR} includes 167 168.if ${TARGET} == "macppc" || ${TARGET} == "alpha" || ${TARGET} == "hppa" || \ 169 ${TARGET} == "sparc64"|| ${TARGET} == "mvmeppc" 170cross-binutils: cross-binutils-new cross-binutils-links 171.else 172cross-binutils: cross-binutils-old cross-binutils-links 173.endif 174 175cross-binutils-new: cross-dirs 176 export BSDSRCDIR=`pwd`; \ 177 (cd ${.CURDIR}/gnu/usr.bin/binutils; \ 178 BSDOBJDIR=${CROSSDIR}/usr/obj \ 179 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 180 ${MAKE} -f Makefile.bsd-wrapper obj); \ 181 (cd ${CROSSDIR}/usr/obj/gnu/usr.bin/binutils; \ 182 /bin/sh ${BSDSRCDIR}/gnu/usr.bin/binutils/configure \ 183 --prefix ${CROSSDIR}/usr \ 184 --disable-nls --disable-gdbtk --disable-commonbfdlib \ 185 --target `cat ${CROSSDIR}/TARGET_CANON` && \ 186 ${MAKE} CFLAGS="${CFLAGS}" && ${MAKE} install ) 187 188cross-binutils-old: cross-gas cross-ar cross-ld cross-strip cross-size \ 189 cross-ranlib cross-nm 190 191cross-binutils-links: cross-dirs 192 for cmd in ar as ld nm ranlib size strip; do \ 193 if [ ! -e ${CROSSDIR}/usr/bin/$$cmd -a -e ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd ]; then \ 194 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd \ 195 ${CROSSDIR}/usr/bin/$$cmd ;\ 196 elif [ -e ${CROSSDIR}/usr/bin/$$cmd -a ! -e ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd ]; then \ 197 ln -sf ${CROSSDIR}/usr/bin/$$cmd \ 198 ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd; \ 199 fi ;\ 200 done 201 202cross-gas: cross-dirs 203 (cd ${.CURDIR}/gnu/usr.bin/gas; \ 204 BSDOBJDIR=${CROSSDIR}/usr/obj \ 205 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 206 ${MAKE} obj; \ 207 TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 208 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} depend all; \ 209 TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 210 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 211 ${MAKE} NOMAN= install) 212 ln -sf ${CROSSDIR}/usr/bin/as \ 213 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/as 214 215cross-ld: cross-dirs 216 (cd ${.CURDIR}/gnu/usr.bin/ld; \ 217 BSDOBJDIR=${CROSSDIR}/usr/obj \ 218 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 219 ${MAKE} obj; \ 220 TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 221 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 222 TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 223 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 224 ${MAKE} NOMAN= install) 225 ln -sf ${CROSSDIR}/usr/bin/ld \ 226 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ld 227 228cross-ar: cross-dirs 229 (cd ${.CURDIR}/usr.bin/ar; \ 230 BSDOBJDIR=${CROSSDIR}/usr/obj \ 231 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 232 ${MAKE} obj; \ 233 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 234 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 235 ${MAKE} NOMAN= install) 236 ln -sf ${CROSSDIR}/usr/bin/ar \ 237 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ar 238 239cross-ranlib: cross-dirs 240 (cd ${.CURDIR}/usr.bin/ranlib; \ 241 BSDOBJDIR=${CROSSDIR}/usr/obj \ 242 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 243 ${MAKE} obj; \ 244 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 245 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 246 ${MAKE} NOMAN= install) 247 ln -sf ${CROSSDIR}/usr/bin/ranlib \ 248 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ranlib 249 250cross-strip: cross-dirs 251 (cd ${.CURDIR}/usr.bin/strip; \ 252 BSDOBJDIR=${CROSSDIR}/usr/obj \ 253 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 254 ${MAKE} obj; \ 255 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 256 ${MAKE} TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 257 NOMAN= depend all; \ 258 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 259 ${MAKE} TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 260 NOMAN= install) 261 ln -sf ${CROSSDIR}/usr/bin/strip \ 262 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/strip 263 264cross-size: cross-dirs 265 (cd ${.CURDIR}/usr.bin/size; \ 266 BSDOBJDIR=${CROSSDIR}/usr/obj \ 267 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 268 ${MAKE} obj; \ 269 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 270 ${MAKE} TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 271 NOMAN= depend all; \ 272 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 273 ${MAKE} NOMAN= install) 274 ln -sf ${CROSSDIR}/usr/bin/size \ 275 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/size 276 277cross-nm: cross-dirs 278 (cd ${.CURDIR}/usr.bin/nm; \ 279 BSDOBJDIR=${CROSSDIR}/usr/obj \ 280 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 281 ${MAKE} obj; \ 282 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 283 ${MAKE} TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 284 NOMAN= depend all; \ 285 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 286 ${MAKE} NOMAN= install) 287 ln -sf ${CROSSDIR}/usr/bin/nm \ 288 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/nm 289 290cross-gcc: cross-dirs 291 cd ${.CURDIR}/gnu/egcs/gcc; \ 292 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 293 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 294 ${MAKE} -f Makefile.bsd-wrapper obj 295 (cd ${CROSSDIR}/usr/obj/gnu/egcs/gcc; \ 296 /bin/sh ${.CURDIR}/gnu/egcs/gcc/configure \ 297 --prefix ${CROSSDIR}/usr \ 298 --target `cat ${CROSSDIR}/TARGET_CANON` \ 299 --with-gxx-include-dir=${CROSSDIR}/usr/include/g++ && \ 300 PATH=${CROSSPATH} ${MAKE} BISON=yacc LANGUAGES="c c++" \ 301 LDFLAGS=${LDSTATIC} build_infodir=. \ 302 GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" && \ 303 ${MAKE} BISON=yacc LANGUAGES="c c++" LDFLAGS=${LDSTATIC} \ 304 GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" \ 305 build_infodir=. INSTALL_MAN= INSTALL_HEADERS_DIR= install) 306 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-gcc \ 307 ${CROSSDIR}/usr/bin/cc 308 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-g++ \ 309 ${CROSSDIR}/usr/bin/c++ 310 ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 311 ${CROSSDIR}/usr/obj/gnu/egcs/gcc/cpp \ 312 ${CROSSDIR}/usr/libexec/cpp 313 sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/libexec/cpp#' \ 314 -e 's#/usr/include#${CROSSDIR}/usr/include#' \ 315 ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/bin/cpp 316 chmod ${BINMODE} ${CROSSDIR}/usr/bin/cpp 317 chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/bin/cpp 318 319# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later 320cross-lib: cross-dirs 321 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 322 export MACHINE MACHINE_ARCH; \ 323 (cd ${.CURDIR}/lib; \ 324 BSDOBJDIR=${CROSSDIR}/usr/obj \ 325 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 326 ${MAKE} obj; \ 327 for lib in csu libc; do \ 328 (cd $$lib; \ 329 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 330 ${MAKE} NOMAN= depend; \ 331 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 332 ${MAKE} NOMAN=; \ 333 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 334 DESTDIR=${CROSSDIR} ${MAKE} NOMAN= install); \ 335 done; \ 336 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 337 ${MAKE} NOMAN= depend; \ 338 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 339 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 340 DESTDIR=${CROSSDIR} SKIPDIR=libocurses/PSD.doc \ 341 ${MAKE} NOMAN= install) 342.if (${KERBEROS:L} == "yes") 343 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 344 export MACHINE MACHINE_ARCH; \ 345 cd kerberosIV/lib; \ 346 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 347 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} obj; \ 348 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 349 ${MAKE} NOMAN= depend; \ 350 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 351 ${CROSSENV} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 352 ${MAKE} NOMAN= install 353.endif 354.if (${KERBEROS5:L} == "yes") 355 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 356 export MACHINE MACHINE_ARCH; \ 357 cd kerberosV/lib; \ 358 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 359 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} obj; \ 360 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 361 ${MAKE} NOMAN= depend; \ 362 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 363 ${CROSSENV} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 364 ${MAKE} NOMAN= install 365.endif 366.endif 367 368.include <bsd.subdir.mk> 369