Makefile revision 1.62
1# $OpenBSD: Makefile,v 1.62 2001/01/17 20:14:04 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 make(clean) || make(cleandir) || make(obj) 46SUBDIR+= distrib 47.endif 48 49.if exists(regress) 50.ifmake !(install) 51SUBDIR+= regress 52.endif 53 54regression-tests: 55 @echo Running regression tests... 56 @(cd ${.CURDIR}/regress && ${MAKE} regress) 57.endif 58 59includes: 60 (cd ${.CURDIR}/include; ${MAKE} prereq; ${MAKE} includes) 61 62beforeinstall: 63.ifndef DESTDIR 64 (cd ${.CURDIR}/etc && ${MAKE} DESTDIR= distrib-dirs) 65.else 66 (cd ${.CURDIR}/etc && ${MAKE} distrib-dirs) 67.endif 68 (cd ${.CURDIR}/include; ${MAKE} includes) 69 70afterinstall: 71.ifndef NOMAN 72 (cd ${.CURDIR}/share/man && ${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 && ${SUDO} ${MAKE} install) 80 (cd ${.CURDIR}/include; ${MAKE} prereq; ${SUDO} ${MAKE} includes) 81 ${SUDO} ${MAKE} cleandir 82 (cd ${.CURDIR}/lib && ${MAKE} depend && ${MAKE} && \ 83 NOMAN=1 ${SUDO} ${MAKE} install) 84 (cd ${.CURDIR}/gnu/lib && ${MAKE} depend && ${MAKE} && \ 85 NOMAN=1 ${SUDO} ${MAKE} install) 86.if (${KERBEROS:L} == "yes") 87 (cd ${.CURDIR}/kerberosIV/lib && ${MAKE} depend && ${MAKE} && \ 88 NOMAN=1 ${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 ${SUDO} ${MAKE} -f Makefile.bsd-wrapper install.lib) 94.if (${MACHINE_ARCH} == "mips") 95 ldconfig -R 96.endif 97 ${MAKE} depend && ${MAKE} && ${SUDO} ${MAKE} install 98 99.if !defined(TARGET) 100cross-tools: 101 echo "TARGET must be set"; exit 1 102.else 103cross-tools: cross-helpers cross-dirs cross-includes cross-binutils \ 104 cross-gcc cross-lib 105 106CROSSDIR= ${DESTDIR}/usr/cross/${TARGET} 107CROSSENV= AR=${CROSSDIR}/usr/bin/ar AS=${CROSSDIR}/usr/bin/as \ 108 CC=${CROSSDIR}/usr/bin/cc CPP=${CROSSDIR}/usr/bin/cpp \ 109 LD=${CROSSDIR}/usr/bin/ld NM=${CROSSDIR}/usr/bin/nm \ 110 LORDER=${CROSSDIR}/usr/bin/lorder \ 111 RANLIB=${CROSSDIR}/usr/bin/ranlib \ 112 SIZE=${CROSSDIR}/usr/bin/size STRIP=${CROSSDIR}/usr/bin/strip \ 113 HOSTCC=cc 114 115cross-helpers: 116 mkdir -p ${CROSSDIR} 117 echo _MACHINE_ARCH | \ 118 cat ${.CURDIR}/sys/arch/${TARGET}/include/param.h - | \ 119 ${CPP} -E -I${.CURDIR}/sys/arch | \ 120 sed -n '$$p' >${CROSSDIR}/TARGET_ARCH 121# GROSS KLUDGE MACHINE_ARCH is mips, but we use mipsel for gnu tools. 122.if ${TARGET} == "arc" || ${TARGET} == "pmax" 123 eval `grep '^osr=' sys/conf/newvers.sh`; \ 124 sed "s/\$$/el-unknown-openbsd$$osr/" ${CROSSDIR}/TARGET_ARCH > \ 125 ${CROSSDIR}/TARGET_CANON 126.else 127 eval `grep '^osr=' sys/conf/newvers.sh`; \ 128 sed "s/\$$/-unknown-openbsd$$osr/" ${CROSSDIR}/TARGET_ARCH > \ 129 ${CROSSDIR}/TARGET_CANON 130.endif 131 132cross-dirs: ${CROSSDIR}/stamp.dirs 133 @-mkdir -p ${CROSSDIR} 134 @-mkdir -p ${CROSSDIR}/usr/obj 135 @-mkdir -p ${CROSSDIR}/usr/bin 136 @-mkdir -p ${CROSSDIR}/usr/include 137 @-mkdir -p ${CROSSDIR}/usr/lib 138 @-mkdir -p ${CROSSDIR}/var/db 139 @-mkdir -p ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON` 140 @ln -sf ${CROSSDIR}/usr/include \ 141 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/include 142 @ln -sf ${CROSSDIR}/usr/lib \ 143 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/lib 144 @-mkdir -p ${CROSSDIR}/usr/obj 145 @-mkdir -p ${CROSSDIR}/usr/bin 146 @-mkdir -p ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin 147 148${CROSSDIR}/stamp.dirs: 149 @touch ${CROSSDIR}/stamp.dirs 150 151cross-includes: cross-dirs 152 export MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH` ;\ 153 ${MAKE} DESTDIR=${CROSSDIR} includes 154 155.if ${TARGET} == "powerpc" || ${TARGET} == "alpha" || ${TARGET} == "arc" || \ 156 ${TARGET} == "pmax" || ${TARGET} == "wgrisc" || ${TARGET} == "hppa" 157cross-binutils: cross-binutils-new 158.else 159cross-binutils: cross-binutils-old 160.endif 161 162cross-binutils-new: cross-dirs 163 export BSDSRCDIR=`pwd`; \ 164 (cd ${.CURDIR}/gnu/usr.bin/binutils; \ 165 BSDOBJDIR=${CROSSDIR}/usr/obj \ 166 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 167 ${MAKE} -f Makefile.bsd-wrapper obj); \ 168 (cd ${CROSSDIR}/usr/obj/gnu/usr.bin/binutils; \ 169 /bin/sh ${BSDSRCDIR}/gnu/usr.bin/binutils/configure \ 170 --prefix ${CROSSDIR}/usr \ 171 --disable-nls --disable-gdbtk --disable-commonbfdlib \ 172 --target `cat ${CROSSDIR}/TARGET_CANON` && \ 173 ${MAKE} CFLAGS=${CFLAGS} && ${MAKE} install) 174 ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 755 \ 175 ${.CURDIR}/usr.bin/lorder/lorder.sh \ 176 ${CROSSDIR}/usr/bin/lorder 177 178cross-binutils-old: cross-gas cross-ar cross-ld cross-strip cross-size \ 179 cross-ranlib cross-nm 180 181cross-gas: cross-dirs 182 (cd ${.CURDIR}/gnu/usr.bin/gas; \ 183 BSDOBJDIR=${CROSSDIR}/usr/obj \ 184 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 185 ${MAKE} obj; \ 186 TARGET_MACHINE_ARCH=${TARGET} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 187 ${MAKE}; \ 188 TARGET_MACHINE_ARCH=${TARGET} \ 189 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 190 ${MAKE} NOMAN= install) 191 ln -sf ${CROSSDIR}/usr/bin/as \ 192 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/as 193 194cross-ld: cross-dirs 195 (cd ${.CURDIR}/gnu/usr.bin/ld; \ 196 BSDOBJDIR=${CROSSDIR}/usr/obj \ 197 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 198 ${MAKE} obj; \ 199 TARGET_MACHINE_ARCH=${TARGET} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 200 ${MAKE} NOMAN=; \ 201 TARGET_MACHINE_ARCH=${TARGET} \ 202 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 203 ${MAKE} NOMAN= install) 204 ln -sf ${CROSSDIR}/usr/bin/ld \ 205 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ld 206 207cross-ar: cross-dirs 208 (cd ${.CURDIR}/usr.bin/ar; \ 209 BSDOBJDIR=${CROSSDIR}/usr/obj \ 210 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 211 ${MAKE} obj; \ 212 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 213 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 214 ${MAKE} NOMAN= install) 215 ln -sf ${CROSSDIR}/usr/bin/ar \ 216 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ar 217 218cross-ranlib: cross-dirs 219 (cd ${.CURDIR}/usr.bin/ranlib; \ 220 BSDOBJDIR=${CROSSDIR}/usr/obj \ 221 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 222 ${MAKE} obj; \ 223 MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 224 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 225 ${MAKE} NOMAN= install) 226 ln -sf ${CROSSDIR}/usr/bin/ranlib \ 227 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/ranlib 228 229cross-strip: cross-dirs 230 (cd ${.CURDIR}/usr.bin/strip; \ 231 BSDOBJDIR=${CROSSDIR}/usr/obj \ 232 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 233 ${MAKE} obj; \ 234 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 235 ${MAKE} TARGET_MACHINE_ARCH=${TARGET} NOMAN=; \ 236 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 237 ${MAKE} TARGET_MACHINE_ARCH=${TARGET} NOMAN= install) 238 ln -sf ${CROSSDIR}/usr/bin/strip \ 239 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/strip 240 241cross-size: cross-dirs 242 (cd ${.CURDIR}/usr.bin/size; \ 243 BSDOBJDIR=${CROSSDIR}/usr/obj \ 244 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 245 ${MAKE} obj; \ 246 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 247 ${MAKE} TARGET_MACHINE_ARCH=${TARGET} NOMAN=; \ 248 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 249 ${MAKE} NOMAN= install) 250 ln -sf ${CROSSDIR}/usr/bin/size \ 251 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/size 252 253cross-nm: cross-dirs 254 (cd ${.CURDIR}/usr.bin/nm; \ 255 BSDOBJDIR=${CROSSDIR}/usr/obj \ 256 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 257 ${MAKE} obj; \ 258 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 259 ${MAKE} TARGET_MACHINE_ARCH=${TARGET} NOMAN=; \ 260 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 261 ${MAKE} NOMAN= install) 262 ln -sf ${CROSSDIR}/usr/bin/nm \ 263 ${CROSSDIR}/usr/`cat ${CROSSDIR}/TARGET_CANON`/bin/nm 264 265cross-gcc: cross-dirs 266 cd ${.CURDIR}/gnu/egcs/gcc; \ 267 BSDOBJDIR=${CROSSDIR}/usr/obj BSDSRCDIR=${.CURDIR} \ 268 MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 269 ${MAKE} -f Makefile.bsd-wrapper obj 270 (cd ${CROSSDIR}/usr/obj/gnu/egcs/gcc; \ 271 /bin/sh ${.CURDIR}/gnu/egcs/gcc/configure \ 272 --prefix ${CROSSDIR}/usr \ 273 --target `cat ${CROSSDIR}/TARGET_CANON` && \ 274 ${MAKE} BISON=yacc LANGUAGES=c LDFLAGS=${LDSTATIC} \ 275 build_infodir=. \ 276 GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" && \ 277 ${MAKE} BISON=yacc LANGUAGES=c LDFLAGS=${LDSTATIC} \ 278 GCC_FOR_TARGET="./xgcc -B./ -I${CROSSDIR}/usr/include" \ 279 build_infodir=. INSTALL_MAN= INSTALL_HEADERS_DIR= install) 280 ln -sf ${CROSSDIR}/usr/bin/`cat ${CROSSDIR}/TARGET_CANON`-gcc \ 281 ${CROSSDIR}/usr/bin/cc 282 CPP=`${CROSSDIR}/usr/bin/cc -print-libgcc-file-name | \ 283 sed 's/libgcc\.a/cpp/'`; \ 284 sed -e 's#/usr/libexec/cpp#'$$CPP'#' \ 285 -e 's#/usr/include#${CROSSDIR}/usr/include#' \ 286 ${.CURDIR}/usr.bin/cpp/cpp.sh > ${CROSSDIR}/usr/bin/cpp 287 chmod ${BINMODE} ${CROSSDIR}/usr/bin/cpp 288 chown ${BINOWN}.${BINGRP} ${CROSSDIR}/usr/bin/cpp 289 290# XXX MAKEOBJDIR maybe should be obj.${TARGET} here, revisit later 291cross-lib: cross-dirs 292 MACHINE=${TARGET} MACHINE_ARCH=`cat ${CROSSDIR}/TARGET_ARCH`; \ 293 export MACHINE MACHINE_ARCH; \ 294 (cd ${.CURDIR}/lib; \ 295 BSDOBJDIR=${CROSSDIR}/usr/obj \ 296 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 297 ${MAKE} obj; \ 298 for lib in csu libc; do \ 299 (cd $$lib; \ 300 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 301 ${MAKE} NOMAN= depend; \ 302 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 303 ${MAKE} NOMAN=; \ 304 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 305 DESTDIR=${CROSSDIR} ${MAKE} NOMAN= install); \ 306 done; \ 307 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 308 ${MAKE} NOMAN= depend; \ 309 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} ${MAKE} NOMAN=; \ 310 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 311 DESTDIR=${CROSSDIR} SKIPDIR=libocurses/PSD.doc \ 312 ${MAKE} NOMAN= install) 313.if (${KERBEROS:L} == "yes") 314 (cd kerberosIV; \ 315 BSDOBJDIR=${CROSSDIR}/usr/obj \ 316 BSDSRCDIR=${.CURDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 317 ${MAKE} obj; \ 318 for lib in acl krb kadm kafs kdb; do \ 319 (cd $$lib; \ 320 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 321 ${MAKE} NOMAN= depend; \ 322 ${CROSSENV} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 323 ${MAKE} NOMAN=; \ 324 DESTDIR=${CROSSDIR} MAKEOBJDIR=obj.${MACHINE}.${TARGET} \ 325 ${MAKE} NOMAN= install); \ 326 done) 327.endif 328.endif 329 330.include <bsd.subdir.mk> 331