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