Makefile revision 1.204
1# $NetBSD: Makefile,v 1.204 2019/09/26 09:21:34 bad Exp $ 2 3.include <bsd.own.mk> 4.include <bsd.endian.mk> 5 6# Make sure that the ordered build/install processing applies when using 7# plain make. 8.MAIN: build_install 9 10# TOOLDIR must be valid, unless MKTOOLS=no 11.if ${MKTOOLS:Uyes} != "no" 12.if "${TOOLDIR}" == "" 13.error "TOOLDIR is undefined or empty" 14.elif "${TOOLDIR:tW:M/*}" == "" 15.error "TOOLDIR is not an absolute path: ${TOOLDIR}" 16#.elif !exists(TOOLDIR) # XXX .exists fails for directories 17#.error "TOOLDIR does not exist: ${TOOLDIR}" 18.endif 19.endif # MKTOOLS != no 20 21# TOOLS_BUILDRUMP == yes builds only the subset of the tools required 22# for building rump kernels and the hypervisor. It is typically used 23# when building rump kernels targeted for non-NetBSD systems (via 24# buildrump.sh), and should not be set for a regular "make build". 25TOOLS_BUILDRUMP?=no 26 27.if ${TOOLCHAIN_MISSING} == "no" 28. if defined(HAVE_GCC) && ${HAVE_GCC} > 0 29TOOLCHAIN_BITS= gmake .WAIT 30TOOLCHAIN_BITS+= gmp .WAIT 31TOOLCHAIN_BITS+= mpfr .WAIT 32TOOLCHAIN_BITS+= mpc .WAIT 33. endif 34.endif 35 36.if ${TOOLCHAIN_MISSING} == "no" 37TOOLCHAIN_BITS+= binutils .WAIT 38.endif 39 40.if defined(HAVE_GCC) && ${HAVE_GCC} > 0 41. if ${TOOLCHAIN_MISSING} == "no" 42TOOLCHAIN_BITS+= gcc 43. if ${MKCROSSGDB:Uno} != "no" || make(obj) 44TOOLCHAIN_BITS+= gdb 45. endif 46TOOLCHAIN_BITS+= .WAIT 47. endif 48.endif 49 50.if defined(HAVE_PCC) 51. if ${TOOLCHAIN_MISSING} == "no" 52TOOLCHAIN_BITS+= pcc 53. endif 54.endif 55 56.if ${TOOLCHAIN_MISSING} == "no" || defined(EXTERNAL_TOOLCHAIN) 57TOOLCHAIN_BITS+= dbsym mdsetimage 58.endif 59 60DTRACE_BITS= 61.if ${MKDTRACE} != "no" || ${MKCTF} != "no" 62DTRACE_BITS+= .WAIT libelf 63DTRACE_BITS+= .WAIT libdwarf 64DTRACE_BITS+= .WAIT libctf 65.endif 66.if ${MKCTF} != "no" 67DTRACE_BITS+= .WAIT ctfconvert ctfmerge 68.endif 69 70LINT_BITS= 71.if ${MKLINT} != "no" 72LINT_BITS= lint lint2 73.endif 74 75# All of host-mkdep, compat, and binstall are needed before anything 76# else. Within this group, they must be built in a specific order, and 77# all of them must be built before any of them is installed. They may 78# be installed in any order. This can't be expressed using the .WAIT 79# notation inside the SUBDIR list. 80# 81# XXX .ORDER does not work when multiple targets are passed on the 82# make command line without "-j", so use dependencies in addition to .ORDER. 83# 84.ORDER: dependall-host-mkdep dependall-compat dependall-binstall 85.if make(dependall-host-mkdep) && make(dependall-compat) 86dependall-compat: dependall-host-mkdep 87.endif 88.if make(dependall-compat) && make(dependall-binstall) 89dependall-binstall: dependall-compat 90.endif 91 92# Dependencies in SUBDIR below ordered to maximize parallel ability. 93# See above for special treatment for host-mkdep, compat, and binstall. 94# 95SUBDIR= host-mkdep compat binstall \ 96 .WAIT mktemp .WAIT sed .WAIT genassym 97.if ${TOOLS_BUILDRUMP} == "no" 98SUBDIR+= cap_mkdb crunchgen ctags gencat hexdump \ 99 ${LINT_BITS} \ 100 makewhatis mtree nbperf .WAIT uudecode 101.endif 102 103SUBDIR+= cat rpcgen join lorder m4 mkdep tsort .WAIT yacc .WAIT awk .WAIT lex 104.if ${TOOLS_BUILDRUMP} == "no" 105SUBDIR+= xz-include .WAIT grep xz-lib pax .WAIT libprop 106 107SUBDIR += .WAIT texinfo \ 108 .WAIT tic \ 109 .WAIT ${TOOLCHAIN_BITS} \ 110 ${DTRACE_BITS} \ 111 asn1_compile cksum compile_et db \ 112 file lint1 slc \ 113 makefs sortinfo \ 114 .WAIT menuc mkcsmapper mkesdb mklocale mknod msgc \ 115 .WAIT disklabel gpt \ 116 .WAIT paxctl \ 117 .WAIT fdisk \ 118 .WAIT installboot \ 119 pwd_mkdb strfile sunlabel vgrind zic 120.endif 121SUBDIR+= stat .WAIT config 122.if ${TOOLS_BUILDRUMP} == "no" 123SUBDIR+= xz-bin 124.endif 125 126.if ${MKLLVM} != "no" || ${MKLLVMRT} != "no" 127SUBDIR+= \ 128 llvm .WAIT \ 129 llvm-lib/libLLVMDemangle llvm-lib/libLLVMSupport llvm-lib/libLLVMTableGen .WAIT \ 130 llvm-tblgen 131.endif 132.if ${MKLLVM} != "no" 133SUBDIR+= \ 134 llvm-clang-tblgen 135.endif 136.if ${MKLLVM} != "no" && !defined(EXTERNAL_TOOLCHAIN) 137SUBDIR+= \ 138 .WAIT llvm-include .WAIT \ 139 llvm-lib .WAIT \ 140 llvm-clang 141. if ${MKLLD} != "no" 142SUBDIR+= llvm-lld 143. endif 144. if ${MKMCLINKER} != "no" 145SUBDIR+= llvm-mcld 146. endif 147.endif 148 149.if ${MKMAN} != "no" || ${MKDOC} != "no" || ${MKHTML} != "no" 150. if ${MKGROFF} != "no" 151SUBDIR+= groff 152. endif 153SUBDIR+= mandoc 154.endif 155 156.if ${TOOLS_BUILDRUMP} == "no" 157 158.if ${MKMAINTAINERTOOLS:Uno} != "no" 159SUBDIR+= autoconf .WAIT gettext 160.endif 161 162.if ${USE_PIGZGZIP} != "no" 163SUBDIR+= pigz 164.endif 165 166.if ${MACHINE} == "hppa" 167SUBDIR+= hppa-mkboot 168.endif 169 170.if ${MACHINE} == "ibmnws" 171SUBDIR+= ibmnws-ncdcs 172.endif 173 174.if ${MACHINE} == "macppc" 175SUBDIR+= macppc-fixcoff 176.endif 177 178.if (${MACHINE} == "prep" || ${MACHINE} == "rs6000" || ${MACHINE} == "bebox") 179SUBDIR+= powerpc-mkbootimage 180.endif 181 182.if ${MACHINE_CPU} == "arm" 183SUBDIR+= arm-elf2aout 184.endif 185 186.if ${MACHINE_CPU} == "m68k" 187SUBDIR+= m68k-elf2aout 188.endif 189 190.if (${MACHINE_ARCH} == "mipsel" || ${MACHINE_ARCH} == "mipseb" || \ 191 ${MACHINE_ARCH} == "mips64el" || ${MACHINE_ARCH} == "mips64eb") 192SUBDIR+= mips-elf2ecoff 193.endif 194 195.if (${MACHINE} == "sgimips") 196SUBDIR+= sgivol 197.endif 198 199.if ${MACHINE} == "acorn32" 200SUBDIR+= sparkcrc 201.endif 202 203.if (${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64") 204SUBDIR+= fgen 205.endif 206 207.if ${MACHINE} == "amiga" 208SUBDIR+= amiga-elf2bb 209SUBDIR+= amiga-txlt 210.endif 211 212.if ${MACHINE} == "hp300" 213SUBDIR+= hp300-mkboot 214.endif 215 216.if ${MACHINE} == "evbarm" \ 217 && ${MACHINE_CPU} == "arm" \ 218 && ${TARGET_ENDIANNESS} == "1234" 219SUBDIR+= elftosb 220.endif 221 222.if ${MACHINE} == "evbarm" || ${MACHINE} == "evbmips" || \ 223 ${MACHINE} == "evbppc" || ${MACHINE} == "sandpoint" 224SUBDIR+= mkubootimage 225SUBDIR+= libfdt .WAIT 226SUBDIR+= dtc 227.endif 228 229.if ${MKX11} != "no" 230SUBDIR+= makestrs 231SUBDIR+= makekeys 232.endif 233 234SUBDIR+= cvslatest 235 236.endif # TOOLS_BUILDRUMP != no 237 238check_MKTOOLS: .PHONY .NOTMAIN 239.if ${MKTOOLS:Uyes} == "no" 240 @echo '*** WARNING: "MKTOOLS" is set to "no"; this will prevent building and' 241 @echo '*** updating your host toolchain. This should be used only as a' 242 @echo '*** temporary workaround for toolchain problems, as it will result' 243 @echo '*** in version skew and build errors over time!' 244.endif 245 246.if ${MKTOOLS:Uyes} == "no" || ${USETOOLS} != "yes" # { 247SUBDIR= # empty 248realall realdepend install: check_MKTOOLS 249.endif # } 250 251.include <bsd.subdir.mk> 252.include <bsd.buildinstall.mk> 253.include <bsd.obj.mk> 254 255.if !defined(PREVIOUSTOOLDIR) 256. if exists(PREVIOUSTOOLDIR) 257PREVIOUSTOOLDIR!= cat PREVIOUSTOOLDIR 258. else 259PREVIOUSTOOLDIR= 260. endif 261.endif 262 263CLEANFILES+= PREVIOUSTOOLDIR 264 265realall realdepend: .MAKE 266.if !empty(PREVIOUSTOOLDIR) && "${PREVIOUSTOOLDIR}" != "${TOOLDIR}" 267 @echo "*** WARNING: TOOLDIR has moved?" 268 @echo "*** PREVIOUSTOOLDIR '${PREVIOUSTOOLDIR}'" 269 @echo "*** != TOOLDIR '${TOOLDIR}'" 270 @echo "*** Cleaning mis-matched tools" 271 rm -f PREVIOUSTOOLDIR 272 (cd ${.CURDIR} && ${MAKE} PREVIOUSTOOLDIR=${TOOLDIR} cleandir) 273.endif 274 echo ${TOOLDIR} >PREVIOUSTOOLDIR 275 276cleandir: 277 rm -f ${CLEANFILES} 278