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