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