Makefile revision 1.77
1# $OpenBSD: Makefile,v 1.77 2001/09/07 19:35:37 mickey 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}/include && ${MAKE} prereq && exec ${SUDO} ${MAKE} includes 81 ${SUDO} ${MAKE} cleandir 82 cd ${.CURDIR}/lib && ${MAKE} depend && ${MAKE} && \ 83 NOMAN=1 exec ${SUDO} ${MAKE} install 84 cd ${.CURDIR}/gnu/lib && ${MAKE} depend && ${MAKE} && \ 85 NOMAN=1 exec ${SUDO} ${MAKE} install 86.if (${KERBEROS:L} == "yes") 87 cd ${.CURDIR}/kerberosIV/lib && ${MAKE} depend && ${MAKE} && \ 88 NOMAN=1 exec ${SUDO} ${MAKE} install 89.endif 90.if (${KERBEROS5:L} == "yes") 91 cd ${.CURDIR}/kerberosV/lib && ${MAKE} depend && ${MAKE} && \ 92 NOMAN=1 exec ${SUDO} ${MAKE} install 93.endif 94 cd ${.CURDIR}/gnu/usr.bin/perl && \ 95 ${MAKE} -f Makefile.bsd-wrapper depend && \ 96 ${MAKE} -f Makefile.bsd-wrapper perl.lib && \ 97 exec ${SUDO} ${MAKE} -f Makefile.bsd-wrapper install.lib 98 ${MAKE} depend && ${MAKE} && exec ${SUDO} ${MAKE} install 99 100.if !defined(TARGET) 101cross-tools: 102 echo "TARGET must be set"; exit 1 103.else 104cross-tools: cross-helpers cross-dirs cross-includes cross-binutils \ 105 cross-gcc cross-lib 106 107CROSSDIR= ${DESTDIR}/usr/cross/${TARGET} 108CROSSENV= AR=${CROSSDIR}/usr/bin/ar AS=${CROSSDIR}/usr/bin/as \ 109 CC=${CROSSDIR}/usr/bin/cc CPP=${CROSSDIR}/usr/bin/cpp \ 110 LD=${CROSSDIR}/usr/bin/ld NM=${CROSSDIR}/usr/bin/nm \ 111 LORDER=${CROSSDIR}/usr/bin/lorder \ 112 RANLIB=${CROSSDIR}/usr/bin/ranlib \ 113 SIZE=${CROSSDIR}/usr/bin/size STRIP=${CROSSDIR}/usr/bin/strip \ 114 HOSTCC=cc 115CROSSPATH= ${PATH}:${CROSSDIR}/usr/bin 116 117.if (${TARGET} == "sparc64") 118CROSSENV+= CPPFLAGS=-D__arch64__ 119CPPFLAGS=-D__arch64__ 120.endif 121 122cross-env: 123 @echo ${CROSSENV} DESTDIR=${CROSSDIR} 124 125cross-helpers: 126 @-mkdir -p ${CROSSDIR} 127 echo _MACHINE_ARCH | \ 128 cat ${.CURDIR}/sys/arch/${TARGET}/include/param.h - | \ 129 ${CPP} ${CPPFLAGS} -E -I${.CURDIR}/sys/arch | \ 130 sed -n '$$p' >${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 140 @-mkdir -p ${CROSSDIR}/usr/include/kerberosIV 141 @-mkdir -p ${CROSSDIR}/usr/include/kerberosV 142 @-mkdir -p ${CROSSDIR}/usr/lib 143 @-mkdir -p ${CROSSDIR}/usr/libexec 144 @-mkdir -p ${CROSSDIR}/var/db 145 @-mkdir -p ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON` 146 @ln -sf ${CROSSDIR}/usr/include \ 147 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/include 148 @ln -sf ${CROSSDIR}/usr/lib \ 149 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/lib 150 @-mkdir -p ${CROSSDIR}/usr/obj 151 @-mkdir -p ${CROSSDIR}/usr/bin 152 @-mkdir -p ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin 153 154${CROSSDIR}/stamp.dirs: 155 @touch ${CROSSDIR}/stamp.dirs 156 157cross-includes: cross-dirs 158 cd include; \ 159 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 160 ${MAKE} prereq && \ 161 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` \ 162 ${MAKE} DESTDIR=${CROSSDIR} includes 163 164.if ${TARGET} == "macppc" || ${TARGET} == "alpha" || ${TARGET} == "hppa" || \ 165 ${TARGET} == "sparc64"|| ${TARGET} == "mvmeppc" 166cross-binutils: cross-binutils-new cross-binutils-links 167.else 168cross-binutils: cross-binutils-old cross-binutils-links 169.endif 170 171cross-binutils-new: cross-dirs 172 export BSDSRCDIR=`pwd`; \ 173 (cd ${.CURDIR}/gnu/usr.bin/binutils; \ 174 BSDOBJDIR=${CROSSDIR}/usr/obj \ 175 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 176 ${MAKE} -f Makefile.bsd-wrapper obj); \ 177 (cd ${CROSSDIR}/usr/obj/gnu/usr.bin/binutils; \ 178 /bin/sh ${BSDSRCDIR}/gnu/usr.bin/binutils/configure \ 179 --prefix ${CROSSDIR}/usr \ 180 --disable-nls --disable-gdbtk --disable-commonbfdlib \ 181 --target `cat ${CROSSDIR}/TARGET_CANON` && \ 182 ${MAKE} CFLAGS="${CFLAGS}" && ${MAKE} install ) && \ 183 ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 755 \ 184 ${.CURDIR}/usr.bin/lorder/lorder.sh \ 185 ${CROSSDIR}/usr/bin/lorder 186 187cross-binutils-old: cross-gas cross-ar cross-ld cross-strip cross-size \ 188 cross-ranlib cross-nm 189 190cross-binutils-links: cross-dirs 191 for cmd in ar as ld nm ranlib size strip; do \ 192 if [ ! -e ${CROSSDIR}/usr/bin/$$cmd -a -e ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd ]; then \ 193 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd \ 194 ${CROSSDIR}/usr/bin/$$cmd ;\ 195 elif [ -e ${CROSSDIR}/usr/bin/$$cmd -a ! -e ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd ]; then \ 196 ln -sf ${CROSSDIR}/usr/bin/$$cmd \ 197 ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-$$cmd; \ 198 fi ;\ 199 done 200 201cross-gas: cross-dirs 202 (cd ${.CURDIR}/gnu/usr.bin/gas; \ 203 BSDOBJDIR=${CROSSDIR}/usr/obj \ 204 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 205 ${MAKE} obj; \ 206 TARGET_MACHINE_ARCH=${TARGET} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 207 ${MAKE} depend all; \ 208 TARGET_MACHINE_ARCH=${TARGET} \ 209 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 210 ${MAKE} NOMAN= install) 211 ln -sf ${CROSSDIR}/usr/bin/as \ 212 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/as 213 214cross-ld: cross-dirs 215 (cd ${.CURDIR}/gnu/usr.bin/ld; \ 216 BSDOBJDIR=${CROSSDIR}/usr/obj \ 217 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 218 ${MAKE} obj; \ 219 TARGET_MACHINE_ARCH=${TARGET} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 220 ${MAKE} NOMAN= depend all; \ 221 TARGET_MACHINE_ARCH=${TARGET} \ 222 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 223 ${MAKE} NOMAN= install) 224 ln -sf ${CROSSDIR}/usr/bin/ld \ 225 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ld 226 227cross-ar: cross-dirs 228 (cd ${.CURDIR}/usr.bin/ar; \ 229 BSDOBJDIR=${CROSSDIR}/usr/obj \ 230 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 231 ${MAKE} obj; \ 232 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 233 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 234 ${MAKE} NOMAN= install) 235 ln -sf ${CROSSDIR}/usr/bin/ar \ 236 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ar 237 238cross-ranlib: cross-dirs 239 (cd ${.CURDIR}/usr.bin/ranlib; \ 240 BSDOBJDIR=${CROSSDIR}/usr/obj \ 241 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 242 ${MAKE} obj; \ 243 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN= depend all; \ 244 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 245 ${MAKE} NOMAN= install) 246 ln -sf ${CROSSDIR}/usr/bin/ranlib \ 247 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ranlib 248 249cross-strip: cross-dirs 250 (cd ${.CURDIR}/usr.bin/strip; \ 251 BSDOBJDIR=${CROSSDIR}/usr/obj \ 252 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 253 ${MAKE} obj; \ 254 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 255 ${MAKE} TARGET_MACHINE_ARCH=${TARGET} NOMAN= depend all; \ 256 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 257 ${MAKE} TARGET_MACHINE_ARCH=${TARGET} NOMAN= install) 258 ln -sf ${CROSSDIR}/usr/bin/strip \ 259 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/strip 260 261cross-size: cross-dirs 262 (cd ${.CURDIR}/usr.bin/size; \ 263 BSDOBJDIR=${CROSSDIR}/usr/obj \ 264 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 265 ${MAKE} obj; \ 266 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 267 ${MAKE} TARGET_MACHINE_ARCH=${TARGET} NOMAN= depend all; \ 268 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 269 ${MAKE} NOMAN= install) 270 ln -sf ${CROSSDIR}/usr/bin/size \ 271 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/size 272 273cross-nm: cross-dirs 274 (cd ${.CURDIR}/usr.bin/nm; \ 275 BSDOBJDIR=${CROSSDIR}/usr/obj \ 276 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 277 ${MAKE} obj; \ 278 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 279 ${MAKE} TARGET_MACHINE_ARCH=${TARGET} 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 PATH=${CROSSPATH} ${MAKE} BISON=yacc LANGUAGES=c \ 295 LDFLAGS=${LDSTATIC} build_infodir=. \ 296 GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" && \ 297 ${MAKE} BISON=yacc LANGUAGES=c LDFLAGS=${LDSTATIC} \ 298 GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" \ 299 build_infodir=. INSTALL_MAN= INSTALL_HEADERS_DIR= install) 300 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-gcc \ 301 ${CROSSDIR}/usr/bin/cc 302 ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ 303 ${CROSSDIR}/usr/obj/gnu/egcs/gcc/cpp \ 304 ${CROSSDIR}/usr/libexec/cpp 305 sed -e 's#/usr/libexec/cpp#${CROSSDIR}/usr/libexec/cpp#' \ 306 -e 's#/usr/include#${CROSSDIR}/usr/include#' \ 307 ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/bin/cpp 308 chmod ${BINMODE} ${CROSSDIR}/usr/bin/cpp 309 chown ${BINOWN}:${BINGRP} ${CROSSDIR}/usr/bin/cpp 310 311# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later 312cross-lib: cross-dirs 313 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 314 export MACHINE MACHINE_ARCH; \ 315 (cd ${.CURDIR}/lib; \ 316 BSDOBJDIR=${CROSSDIR}/usr/obj \ 317 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 318 ${MAKE} obj; \ 319 for lib in csu libc; do \ 320 (cd $$lib; \ 321 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 322 ${MAKE} NOMAN= depend; \ 323 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 324 ${MAKE} NOMAN=; \ 325 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 326 DESTDIR=${CROSSDIR} ${MAKE} NOMAN= install); \ 327 done; \ 328 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 329 ${MAKE} NOMAN= depend; \ 330 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 331 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 332 DESTDIR=${CROSSDIR} SKIPDIR=libocurses/PSD.doc \ 333 ${MAKE} NOMAN= install) 334.if (${KERBEROS:L} == "yes") 335 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 336 export MACHINE MACHINE_ARCH; \ 337 cd kerberosIV/lib; \ 338 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 339 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} obj; \ 340 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 341 ${MAKE} NOMAN= depend; \ 342 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 343 ${CROSSENV} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 344 ${MAKE} NOMAN= install 345.endif 346.if (${KERBEROS5:L} == "yes") 347 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 348 export MACHINE MACHINE_ARCH; \ 349 cd kerberosV/lib; \ 350 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 351 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} obj; \ 352 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 353 ${MAKE} NOMAN= depend; \ 354 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 355 ${CROSSENV} DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 356 ${MAKE} NOMAN= install 357.endif 358.endif 359 360.include <bsd.subdir.mk> 361