Makefile revision 1.83
1# $OpenBSD: Makefile,v 1.83 2002/02/22 23:31:11 art 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 regress 51.endif 52 53.if exists(regress) 54regression-tests: 55 @echo Running regression tests... 56 @cd ${.CURDIR}/regress && ${MAKE} depend && exec ${MAKE} regress 57.endif 58 59includes: 60 cd ${.CURDIR}/include && ${MAKE} prereq && exec ${SUDO} ${MAKE} includes 61 62beforeinstall: 63 cd ${.CURDIR}/etc && exec ${MAKE} DESTDIR=${DESTDIR} distrib-dirs 64 cd ${.CURDIR}/include && exec ${MAKE} includes 65 66afterinstall: 67.ifndef NOMAN 68 cd ${.CURDIR}/share/man && exec ${MAKE} makedb 69.endif 70 71build: 72.ifdef GLOBAL_AUTOCONF_CACHE 73 cp /dev/null ${GLOBAL_AUTOCONF_CACHE} 74.endif 75 cd ${.CURDIR}/share/mk && exec ${SUDO} ${MAKE} install 76 cd ${.CURDIR}/include && ${MAKE} prereq && exec ${SUDO} ${MAKE} includes 77 ${SUDO} ${MAKE} cleandir 78 cd ${.CURDIR}/lib && ${MAKE} depend && ${MAKE} && \ 79 NOMAN=1 exec ${SUDO} ${MAKE} install 80 cd ${.CURDIR}/gnu/lib && ${MAKE} depend && ${MAKE} && \ 81 NOMAN=1 exec ${SUDO} ${MAKE} install 82.if (${KERBEROS:L} == "yes") 83 cd ${.CURDIR}/kerberosIV/lib && ${MAKE} depend && ${MAKE} && \ 84 NOMAN=1 exec ${SUDO} ${MAKE} install 85.endif 86.if (${KERBEROS5:L} == "yes") 87 cd ${.CURDIR}/kerberosV/lib && ${MAKE} depend && ${MAKE} && \ 88 NOMAN=1 exec ${SUDO} ${MAKE} install 89.endif 90 cd ${.CURDIR}/gnu/usr.bin/perl && \ 91 ${MAKE} -f Makefile.bsd-wrapper depend && \ 92 ${MAKE} -f Makefile.bsd-wrapper perl.lib && \ 93 exec ${SUDO} ${MAKE} -f Makefile.bsd-wrapper install.lib 94 ${MAKE} depend && ${MAKE} && exec ${SUDO} ${MAKE} install 95 96.if !defined(TARGET) 97cross-tools: 98 echo "TARGET must be set"; exit 1 99.else 100cross-tools: cross-helpers cross-dirs cross-includes cross-binutils \ 101 cross-gcc cross-lib 102 103CROSSDIR= ${DESTDIR}/usr/cross/${TARGET} 104CROSSENV= AR=${CROSSDIR}/usr/bin/ar AS=${CROSSDIR}/usr/bin/as \ 105 CC=${CROSSDIR}/usr/bin/cc CPP=${CROSSDIR}/usr/bin/cpp \ 106 CXX=${CROSSDIR}/usr/bin/c++ \ 107 LD=${CROSSDIR}/usr/bin/ld NM=${CROSSDIR}/usr/bin/nm \ 108 LORDER=/usr/bin/lorder RANLIB=${CROSSDIR}/usr/bin/ranlib \ 109 SIZE=${CROSSDIR}/usr/bin/size STRIP=${CROSSDIR}/usr/bin/strip \ 110 HOSTCC=cc 111CROSSPATH= ${PATH}:${CROSSDIR}/usr/bin 112 113cross-env: 114 @echo ${CROSSENV} DESTDIR=${CROSSDIR} MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` 115 116cross-helpers: 117 @-mkdir -p ${CROSSDIR} 118 @case ${TARGET} in \ 119 sparc|i386|m68k|alpha|hppa|powerpc|sparc64|m88k|vax) \ 120 echo ${TARGET} ;;\ 121 amiga|sun3|mac68k|hp300|mvme68k) \ 122 echo m68k ;;\ 123 mvme88k) \ 124 echo m88k ;;\ 125 mvmeppc|macppc) \ 126 echo powerpc ;;\ 127 *) \ 128 (echo Unknown arch ${TARGET} >&2) ; exit 1;; \ 129 esac > ${CROSSDIR}/TARGET_ARCH 130 @echo TARGET_ARCH is `cat ${CROSSDIR}/TARGET_ARCH` 131 @eval `grep '^osr=' sys/conf/newvers.sh`; \ 132 sed "s/\$$/-unknown-openbsd$$osr/" ${CROSSDIR}/TARGET_ARCH > \ 133 ${CROSSDIR}/TARGET_CANON 134 135cross-dirs: ${CROSSDIR}/stamp.dirs 136 @-mkdir -p ${CROSSDIR} 137 @-mkdir -p ${CROSSDIR}/usr/obj 138 @-mkdir -p ${CROSSDIR}/usr/bin 139 @-mkdir -p ${CROSSDIR}/usr/include/kerberosIV 140 @-mkdir -p ${CROSSDIR}/usr/include/kerberosV 141 @-mkdir -p ${CROSSDIR}/usr/lib/apache/include/xml 142 @-mkdir -p ${CROSSDIR}/usr/libexec 143 @-mkdir -p ${CROSSDIR}/var/db 144 @-mkdir -p ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON` 145 @ln -sf ${CROSSDIR}/usr/include \ 146 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/include 147 @ln -sf ${CROSSDIR}/usr/lib \ 148 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/lib 149 @-mkdir -p ${CROSSDIR}/usr/obj 150 @-mkdir -p ${CROSSDIR}/usr/bin 151 @-mkdir -p ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin 152 153${CROSSDIR}/stamp.dirs: 154 @touch ${CROSSDIR}/stamp.dirs 155 156cross-includes: cross-dirs 157 cd include; \ 158 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 159 ${MAKE} prereq && \ 160 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 161 ${MAKE} DESTDIR=${CROSSDIR} includes 162 163.if ${TARGET} == "macppc" || ${TARGET} == "alpha" || ${TARGET} == "hppa" || \ 164 ${TARGET} == "sparc64"|| ${TARGET} == "mvmeppc" 165cross-binutils: cross-binutils-new cross-binutils-links 166.else 167cross-binutils: cross-binutils-old cross-binutils-links 168.endif 169 170cross-binutils-new: cross-dirs 171 export BSDSRCDIR=`pwd`; \ 172 (cd ${.CURDIR}/gnu/usr.bin/binutils; \ 173 BSDOBJDIR=${CROSSDIR}/usr/obj \ 174 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 175 ${MAKE} -f Makefile.bsd-wrapper obj); \ 176 (cd ${CROSSDIR}/usr/obj/gnu/usr.bin/binutils; \ 177 /bin/sh ${BSDSRCDIR}/gnu/usr.bin/binutils/configure \ 178 --prefix ${CROSSDIR}/usr \ 179 --disable-nls --disable-gdbtk --disable-commonbfdlib \ 180 --target `cat ${CROSSDIR}/TARGET_CANON` && \ 181 ${MAKE} CFLAGS="${CFLAGS}" && ${MAKE} install ) 182 183cross-binutils-old: cross-gas cross-ar cross-ld cross-strip cross-size \ 184 cross-ranlib cross-nm 185 186cross-binutils-links: cross-dirs 187 for cmd in ar as ld nm ranlib size strip; do \ 188 if [ ! -e ${CROSSDIR}/usr/bin/$$cmd -a -e ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd ]; then \ 189 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd \ 190 ${CROSSDIR}/usr/bin/$$cmd ;\ 191 elif [ -e ${CROSSDIR}/usr/bin/$$cmd -a ! -e ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd ]; then \ 192 ln -sf ${CROSSDIR}/usr/bin/$$cmd \ 193 ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd; \ 194 fi ;\ 195 done 196 197cross-gas: cross-dirs 198 (cd ${.CURDIR}/gnu/usr.bin/gas; \ 199 BSDOBJDIR=${CROSSDIR}/usr/obj \ 200 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 201 ${MAKE} obj; \ 202 TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 203 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} depend all; \ 204 TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 205 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 206 ${MAKE} NOMAN= install) 207 ln -sf ${CROSSDIR}/usr/bin/as \ 208 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/as 209 210cross-ld: cross-dirs 211 (cd ${.CURDIR}/gnu/usr.bin/ld; \ 212 BSDOBJDIR=${CROSSDIR}/usr/obj \ 213 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 214 ${MAKE} obj; \ 215 TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 216 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 217 TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 218 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 219 ${MAKE} NOMAN= install) 220 ln -sf ${CROSSDIR}/usr/bin/ld \ 221 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ld 222 223cross-ar: cross-dirs 224 (cd ${.CURDIR}/usr.bin/ar; \ 225 BSDOBJDIR=${CROSSDIR}/usr/obj \ 226 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 227 ${MAKE} obj; \ 228 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 229 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 230 ${MAKE} NOMAN= install) 231 ln -sf ${CROSSDIR}/usr/bin/ar \ 232 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ar 233 234cross-ranlib: cross-dirs 235 (cd ${.CURDIR}/usr.bin/ranlib; \ 236 BSDOBJDIR=${CROSSDIR}/usr/obj \ 237 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 238 ${MAKE} obj; \ 239 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 240 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 241 ${MAKE} NOMAN= install) 242 ln -sf ${CROSSDIR}/usr/bin/ranlib \ 243 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ranlib 244 245cross-strip: cross-dirs 246 (cd ${.CURDIR}/usr.bin/strip; \ 247 BSDOBJDIR=${CROSSDIR}/usr/obj \ 248 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 249 ${MAKE} obj; \ 250 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 251 ${MAKE} TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 252 NOMAN= depend all; \ 253 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 254 ${MAKE} TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 255 NOMAN= install) 256 ln -sf ${CROSSDIR}/usr/bin/strip \ 257 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/strip 258 259cross-size: cross-dirs 260 (cd ${.CURDIR}/usr.bin/size; \ 261 BSDOBJDIR=${CROSSDIR}/usr/obj \ 262 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 263 ${MAKE} obj; \ 264 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 265 ${MAKE} TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 266 NOMAN= depend all; \ 267 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 268 ${MAKE} NOMAN= install) 269 ln -sf ${CROSSDIR}/usr/bin/size \ 270 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/size 271 272cross-nm: cross-dirs 273 (cd ${.CURDIR}/usr.bin/nm; \ 274 BSDOBJDIR=${CROSSDIR}/usr/obj \ 275 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 276 ${MAKE} obj; \ 277 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 278 ${MAKE} TARGET_MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 279 NOMAN= depend all; \ 280 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 281 ${MAKE} NOMAN= install) 282 ln -sf ${CROSSDIR}/usr/bin/nm \ 283 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/nm 284 285cross-gcc: cross-dirs 286 cd ${.CURDIR}/gnu/egcs/gcc; \ 287 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 288 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 289 ${MAKE} -f Makefile.bsd-wrapper obj 290 (cd ${CROSSDIR}/usr/obj/gnu/egcs/gcc; \ 291 /bin/sh ${.CURDIR}/gnu/egcs/gcc/configure \ 292 --prefix ${CROSSDIR}/usr \ 293 --target `cat ${CROSSDIR}/TARGET_CANON` \ 294 --with-gxx-include-dir=${CROSSDIR}/usr/include/g++ && \ 295 PATH=${CROSSPATH} ${MAKE} BISON=yacc LANGUAGES="c c++" \ 296 LDFLAGS=${LDSTATIC} build_infodir=. \ 297 GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" && \ 298 ${MAKE} BISON=yacc LANGUAGES="c c++" LDFLAGS=${LDSTATIC} \ 299 GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" \ 300 build_infodir=. INSTALL_MAN= INSTALL_HEADERS_DIR= install) 301 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-gcc \ 302 ${CROSSDIR}/usr/bin/cc 303 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-g++ \ 304 ${CROSSDIR}/usr/bin/c++ 305 ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 306 ${CROSSDIR}/usr/obj/gnu/egcs/gcc/cpp \ 307 ${CROSSDIR}/usr/libexec/cpp 308 sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/libexec/cpp#' \ 309 -e 's#/usr/include#${CROSSDIR}/usr/include#' \ 310 ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/bin/cpp 311 chmod ${BINMODE} ${CROSSDIR}/usr/bin/cpp 312 chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/bin/cpp 313 314# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later 315cross-lib: cross-dirs 316 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 317 export MACHINE MACHINE_ARCH; \ 318 (cd ${.CURDIR}/lib; \ 319 BSDOBJDIR=${CROSSDIR}/usr/obj \ 320 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 321 ${MAKE} obj; \ 322 for lib in csu libc; do \ 323 (cd $$lib; \ 324 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 325 ${MAKE} NOMAN= depend; \ 326 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 327 ${MAKE} NOMAN=; \ 328 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 329 DESTDIR=${CROSSDIR} ${MAKE} NOMAN= install); \ 330 done; \ 331 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 332 ${MAKE} NOMAN= depend; \ 333 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 334 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 335 DESTDIR=${CROSSDIR} SKIPDIR=libocurses/PSD.doc \ 336 ${MAKE} NOMAN= install) 337.if (${KERBEROS:L} == "yes") 338 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 339 export MACHINE MACHINE_ARCH; \ 340 cd kerberosIV/lib; \ 341 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 342 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} obj; \ 343 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 344 ${MAKE} NOMAN= depend; \ 345 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 346 ${CROSSENV} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 347 ${MAKE} NOMAN= install 348.endif 349.if (${KERBEROS5:L} == "yes") 350 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 351 export MACHINE MACHINE_ARCH; \ 352 cd kerberosV/lib; \ 353 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 354 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} obj; \ 355 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 356 ${MAKE} NOMAN= depend; \ 357 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 358 ${CROSSENV} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 359 ${MAKE} NOMAN= install 360.endif 361.endif 362 363.include <bsd.subdir.mk> 364