Home | History | Annotate | Line # | Download | only in mk
      1 #	$NetBSD: bsd.own.mk,v 1.1018 2017/10/08 15:03:50 christos Exp $
      2 
      3 # This needs to be before bsd.init.mk
      4 .if defined(BSD_MK_COMPAT_FILE)
      5 .include <${BSD_MK_COMPAT_FILE}>
      6 .endif
      7 
      8 .if !defined(_BSD_OWN_MK_)
      9 _BSD_OWN_MK_=1
     10 
     11 MAKECONF?=	/etc/mk.conf
     12 .-include "${MAKECONF}"
     13 
     14 #
     15 # CPU model, derived from MACHINE_ARCH
     16 #
     17 MACHINE_CPU=	${MACHINE_ARCH:C/mipse[bl]/mips/:C/mips64e[bl]/mips/:C/sh3e[bl]/sh3/:S/coldfire/m68k/:S/m68000/m68k/:C/arm.*/arm/:C/earm.*/arm/:S/earm/arm/:S/powerpc64/powerpc/:S/aarch64eb/aarch64/:S/or1knd/or1k/:C/riscv../riscv/}
     18 
     19 #
     20 # Subdirectory used below ${RELEASEDIR} when building a release
     21 #
     22 RELEASEMACHINEDIR?=	${MACHINE}
     23 
     24 #
     25 # Subdirectory or path component used for the following paths:
     26 #   distrib/${RELEASEMACHINE}
     27 #   distrib/notes/${RELEASEMACHINE}
     28 #   etc/etc.${RELEASEMACHINE}
     29 # Used when building a release.
     30 #
     31 RELEASEMACHINE?=	${MACHINE}
     32 
     33 #
     34 # NEED_OWN_INSTALL_TARGET is set to "no" by pkgsrc/mk/bsd.pkg.mk to
     35 # ensure that things defined by <bsd.own.mk> (default targets,
     36 # INSTALL_FILE, etc.) are not conflicting with bsd.pkg.mk.
     37 #
     38 NEED_OWN_INSTALL_TARGET?=	yes
     39 
     40 #
     41 # This lists the platforms which do not have working in-tree toolchains.  For
     42 # the in-tree gcc toolchain, this list is empty.
     43 #
     44 # If some future port is not supported by the in-tree toolchain, this should
     45 # be set to "yes" for that port only.
     46 #
     47 # .if ${MACHINE} == "playstation2"
     48 # TOOLCHAIN_MISSING?=	yes
     49 # .endif
     50 
     51 TOOLCHAIN_MISSING?=	no
     52 
     53 .if ${MACHINE_CPU} == "aarch64" && !defined(EXTERNAL_TOOLCHAIN) && ${MKLLVM:Uyes} != "no"
     54 MKLLVM?=	yes
     55 HAVE_LLVM?=	yes
     56 MKGCC?=		no
     57 .endif
     58 
     59 #
     60 # GCC Using platforms.
     61 #
     62 .if ${MKGCC:Uyes} != "no"
     63 
     64 #
     65 # What GCC is used?
     66 #
     67 .if ${MACHINE_CPU} == "aarch64"
     68 HAVE_GCC?=	0
     69 .else
     70 HAVE_GCC?=	53
     71 .endif
     72 
     73 #
     74 # Platforms that can't run a modern GCC natively
     75 .if ${MACHINE_ARCH} == "m68000"
     76 MKGCCCMDS?=	no
     77 .endif
     78 
     79 #
     80 # We import the old gcc as "gcc.old" when upgrading.  EXTERNAL_GCC_SUBDIR is
     81 # set to the relevant subdirectory in src/external/gpl3 for his HAVE_GCC.
     82 #
     83 .if ${HAVE_GCC} == 53
     84 EXTERNAL_GCC_SUBDIR=	gcc.old
     85 .else
     86 EXTERNAL_GCC_SUBDIR=	/does/not/exist
     87 .endif
     88 .else
     89 MKGCCCMDS?=	no
     90 .endif
     91 
     92 .if !empty(MACHINE_ARCH:Mearm*)
     93 _LIBC_COMPILER_RT.${MACHINE_ARCH}=	yes
     94 .endif
     95 
     96 _LIBC_COMPILER_RT.aarch64=	yes
     97 _LIBC_COMPILER_RT.aarch64eb=	yes
     98 _LIBC_COMPILER_RT.i386=		yes
     99 _LIBC_COMPILER_RT.powerpc=	yes
    100 _LIBC_COMPILER_RT.powerpc64=	yes
    101 _LIBC_COMPILER_RT.sparc=	yes
    102 _LIBC_COMPILER_RT.sparc64=	yes
    103 _LIBC_COMPILER_RT.x86_64=	yes
    104 
    105 .if ${HAVE_LLVM:Uno} == "yes" && ${_LIBC_COMPILER_RT.${MACHINE_ARCH}:Uno} == "yes"
    106 HAVE_LIBGCC?=	no
    107 .else
    108 HAVE_LIBGCC?=	yes
    109 .endif
    110 
    111 
    112 # ia64 is not support
    113 .if ${HAVE_LLVM:Uno} == "yes" || !empty(MACHINE_ARCH:Mearm*)
    114 HAVE_LIBGCC_EH?=	no
    115 .else
    116 HAVE_LIBGCC_EH?=	yes
    117 .endif
    118 
    119 .if ${MACHINE} == "alpha" || \
    120     ${MACHINE} == "hppa" || \
    121     ${MACHINE} == "ia64" || \
    122     ${MACHINE_CPU} == "mips"
    123 HAVE_SSP?=	no
    124 .else
    125 HAVE_SSP?=	yes
    126 .if !defined(NOFORT) && ${USE_FORT:Uno} != "no"
    127 USE_SSP?=	yes
    128 .endif
    129 .endif
    130 
    131 #
    132 # What GDB is used?
    133 #
    134 HAVE_GDB?=	712
    135 
    136 .if ${HAVE_GDB} == 712
    137 EXTERNAL_GDB_SUBDIR=		gdb
    138 .elif ${HAVE_GDB} == 710
    139 EXTERNAL_GDB_SUBDIR=		gdb.old
    140 .else
    141 EXTERNAL_GDB_SUBDIR=		/does/not/exist
    142 .endif
    143 
    144 #
    145 # What binutils is used?
    146 #
    147 HAVE_BINUTILS?=	227
    148 
    149 .if ${HAVE_BINUTILS} == 227
    150 EXTERNAL_BINUTILS_SUBDIR=	binutils
    151 .else
    152 EXTERNAL_BINUTILS_SUBDIR=	/does/not/exist
    153 .endif
    154 
    155 .if empty(.MAKEFLAGS:tW:M*-V .OBJDIR*)
    156 .if defined(MAKEOBJDIRPREFIX) || defined(MAKEOBJDIR)
    157 PRINTOBJDIR=	${MAKE} -r -V .OBJDIR -f /dev/null xxx
    158 .else
    159 PRINTOBJDIR=	${MAKE} -V .OBJDIR
    160 .endif
    161 .else
    162 PRINTOBJDIR=	echo /error/bsd.own.mk/PRINTOBJDIR # avoid infinite recursion
    163 .endif
    164 
    165 #
    166 # Determine if running in the NetBSD source tree by checking for the
    167 # existence of build.sh and tools/ in the current or a parent directory,
    168 # and setting _SRC_TOP_ to the result.
    169 #
    170 .if !defined(_SRC_TOP_)			# {
    171 _SRC_TOP_!= cd "${.CURDIR}"; while :; do \
    172 		here=`pwd`; \
    173 		[ -f build.sh  ] && [ -d tools ] && { echo $$here; break; }; \
    174 		case $$here in /) echo ""; break;; esac; \
    175 		cd ..; done
    176 
    177 .MAKEOVERRIDES+=	_SRC_TOP_
    178 
    179 .endif					# }
    180 
    181 #
    182 # If _SRC_TOP_ != "", we're within the NetBSD source tree.
    183 # * Set defaults for NETBSDSRCDIR and _SRC_TOP_OBJ_.
    184 # * Define _NETBSD_VERSION_DEPENDS.  Targets that depend on the
    185 #   NetBSD version, or on variables defined at build time, can
    186 #   declare a dependency on ${_NETBSD_VERSION_DEPENDS}.
    187 #
    188 .if (${_SRC_TOP_} != "")		# {
    189 
    190 NETBSDSRCDIR?=	${_SRC_TOP_}
    191 
    192 .if !defined(_SRC_TOP_OBJ_)
    193 _SRC_TOP_OBJ_!=		cd "${_SRC_TOP_}" && ${PRINTOBJDIR}
    194 .MAKEOVERRIDES+=	_SRC_TOP_OBJ_
    195 .endif
    196 
    197 _NETBSD_VERSION_DEPENDS=	${_SRC_TOP_OBJ_}/params
    198 _NETBSD_VERSION_DEPENDS+=	${NETBSDSRCDIR}/sys/sys/param.h
    199 _NETBSD_VERSION_DEPENDS+=	${NETBSDSRCDIR}/sys/conf/newvers.sh
    200 _NETBSD_VERSION_DEPENDS+=	${NETBSDSRCDIR}/sys/conf/osrelease.sh
    201 ${_SRC_TOP_OBJ_}/params: .NOTMAIN .OPTIONAL # created by top level "make build"
    202 
    203 .endif	# _SRC_TOP_ != ""		# }
    204 
    205 
    206 .if (${_SRC_TOP_} != "") && \
    207     (${TOOLCHAIN_MISSING} == "no" || defined(EXTERNAL_TOOLCHAIN))
    208 USETOOLS?=	yes
    209 .endif
    210 USETOOLS?=	no
    211 
    212 
    213 .if ${MACHINE_ARCH} == "mips" || ${MACHINE_ARCH} == "mips64" || \
    214     ${MACHINE_ARCH} == "sh3"
    215 .BEGIN:
    216 	@echo "Must set MACHINE_ARCH to one of ${MACHINE_ARCH}eb or ${MACHINE_ARCH}el"
    217 	@false
    218 .elif defined(REQUIRETOOLS) && \
    219       (${TOOLCHAIN_MISSING} == "no" || defined(EXTERNAL_TOOLCHAIN)) && \
    220       ${USETOOLS} == "no"
    221 .BEGIN:
    222 	@echo "USETOOLS=no, but this component requires a version-specific host toolchain"
    223 	@false
    224 .endif
    225 
    226 #
    227 # Host platform information; may be overridden
    228 #
    229 .include <bsd.host.mk>
    230 
    231 .if ${USETOOLS} == "yes"						# {
    232 
    233 #
    234 # Provide a default for TOOLDIR.
    235 #
    236 .if !defined(TOOLDIR)
    237 TOOLDIR:=	${_SRC_TOP_OBJ_}/tooldir.${HOST_OSTYPE}
    238 .MAKEOVERRIDES+= TOOLDIR
    239 .endif
    240 
    241 #
    242 # This is the prefix used for the NetBSD-sourced tools.
    243 #
    244 _TOOL_PREFIX?=	nb
    245 
    246 #
    247 # If an external toolchain base is specified, use it.
    248 #
    249 .if defined(EXTERNAL_TOOLCHAIN)						# {
    250 AR=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-ar
    251 AS=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-as
    252 LD=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-ld
    253 NM=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-nm
    254 OBJCOPY=	${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-objcopy
    255 OBJDUMP=	${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-objdump
    256 RANLIB=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-ranlib
    257 READELF=	${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-readelf
    258 SIZE=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-size
    259 STRINGS=	${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-strings
    260 STRIP=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-strip
    261 
    262 TOOL_CC.gcc=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-gcc
    263 TOOL_CPP.gcc=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-cpp
    264 TOOL_CXX.gcc=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-c++
    265 TOOL_FC.gcc=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-g77
    266 TOOL_OBJC.gcc=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-gcc
    267 
    268 TOOL_CC.clang=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-clang
    269 TOOL_CPP.clang=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-clang-cpp
    270 TOOL_CXX.clang=		${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-clang++
    271 TOOL_OBJC.clang=	${EXTERNAL_TOOLCHAIN}/bin/${MACHINE_GNU_PLATFORM}-clang
    272 .else									# } {
    273 # Define default locations for common tools.
    274 .if ${USETOOLS_BINUTILS:Uyes} == "yes"					#  {
    275 AR=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-ar
    276 AS=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-as
    277 LD=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-ld
    278 NM=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-nm
    279 OBJCOPY=	${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-objcopy
    280 OBJDUMP=	${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-objdump
    281 RANLIB=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-ranlib
    282 READELF=	${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-readelf
    283 SIZE=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-size
    284 STRINGS=	${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-strings
    285 STRIP=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-strip
    286 
    287 # GCC supports C, C++, Fortran and Objective C
    288 TOOL_CC.gcc=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-gcc
    289 TOOL_CPP.gcc=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-cpp
    290 TOOL_CXX.gcc=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-c++
    291 TOOL_FC.gcc=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-g77
    292 TOOL_OBJC.gcc=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-gcc
    293 .endif									#  }
    294 
    295 # Clang supports C, C++ and Objective C
    296 TOOL_CC.clang=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-clang
    297 TOOL_CPP.clang=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-clang-cpp
    298 TOOL_CXX.clang=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-clang++
    299 TOOL_OBJC.clang=	${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-clang
    300 
    301 # PCC supports C and Fortran
    302 TOOL_CC.pcc=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-pcc
    303 TOOL_CPP.pcc=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-pcpp
    304 TOOL_CXX.pcc=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-p++
    305 
    306 #
    307 # Make sure DESTDIR is set, so that builds with these tools always
    308 # get appropriate -nostdinc, -nostdlib, etc. handling.  The default is
    309 # <empty string>, meaning start from /, the root directory.
    310 #
    311 DESTDIR?=
    312 
    313 .if !defined(HOSTPROG) && !defined(HOSTLIB)
    314 .  if ${DESTDIR} != ""
    315 CPPFLAGS+=	--sysroot=${DESTDIR}
    316 LDFLAGS+=	--sysroot=${DESTDIR}
    317 .  else
    318 CPPFLAGS+=	--sysroot=/
    319 LDFLAGS+=	--sysroot=/
    320 .  endif
    321 .endif
    322 .endif	# EXTERNAL_TOOLCHAIN						# }
    323 
    324 DBSYM=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-dbsym
    325 ELF2AOUT=	${TOOLDIR}/bin/${_TOOL_PREFIX}m68k-elf2aout
    326 ELF2ECOFF=	${TOOLDIR}/bin/${_TOOL_PREFIX}mips-elf2ecoff
    327 INSTALL=	${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-install
    328 LEX=		${TOOLDIR}/bin/${_TOOL_PREFIX}lex
    329 LINT=		CC=${CC:Q} ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-lint
    330 LORDER=		NM=${NM:Q} MKTEMP=${TOOL_MKTEMP:Q} ${TOOLDIR}/bin/${_TOOL_PREFIX}lorder
    331 MKDEP=		CC=${CC:Q} ${TOOLDIR}/bin/${_TOOL_PREFIX}mkdep
    332 MKDEPCXX=	CC=${CXX:Q} ${TOOLDIR}/bin/${_TOOL_PREFIX}mkdep
    333 PAXCTL=		${TOOLDIR}/bin/${_TOOL_PREFIX}paxctl
    334 TSORT=		${TOOLDIR}/bin/${_TOOL_PREFIX}tsort -q
    335 YACC=		${TOOLDIR}/bin/${_TOOL_PREFIX}yacc
    336 
    337 TOOL_AMIGAAOUT2BB=	${TOOLDIR}/bin/${_TOOL_PREFIX}amiga-aout2bb
    338 TOOL_AMIGAELF2BB=	${TOOLDIR}/bin/${_TOOL_PREFIX}amiga-elf2bb
    339 TOOL_AMIGATXLT=		${TOOLDIR}/bin/${_TOOL_PREFIX}amiga-txlt
    340 TOOL_ASN1_COMPILE=	${TOOLDIR}/bin/${_TOOL_PREFIX}asn1_compile
    341 TOOL_AWK=		${TOOLDIR}/bin/${_TOOL_PREFIX}awk
    342 TOOL_CAP_MKDB=		${TOOLDIR}/bin/${_TOOL_PREFIX}cap_mkdb
    343 TOOL_CAT=		${TOOLDIR}/bin/${_TOOL_PREFIX}cat
    344 TOOL_CKSUM=		${TOOLDIR}/bin/${_TOOL_PREFIX}cksum
    345 TOOL_CLANG_TBLGEN=		${TOOLDIR}/bin/${_TOOL_PREFIX}clang-tblgen
    346 TOOL_COMPILE_ET=	${TOOLDIR}/bin/${_TOOL_PREFIX}compile_et
    347 TOOL_CONFIG=		${TOOLDIR}/bin/${_TOOL_PREFIX}config
    348 TOOL_CRUNCHGEN=		MAKE=${.MAKE:Q} ${TOOLDIR}/bin/${_TOOL_PREFIX}crunchgen
    349 TOOL_CTAGS=		${TOOLDIR}/bin/${_TOOL_PREFIX}ctags
    350 TOOL_CTFCONVERT=	${TOOLDIR}/bin/${_TOOL_PREFIX}ctfconvert
    351 TOOL_CTFMERGE=		${TOOLDIR}/bin/${_TOOL_PREFIX}ctfmerge
    352 TOOL_CVSLATEST=		${TOOLDIR}/bin/${_TOOL_PREFIX}cvslatest
    353 TOOL_DB=		${TOOLDIR}/bin/${_TOOL_PREFIX}db
    354 TOOL_DISKLABEL=		${TOOLDIR}/bin/nbdisklabel
    355 TOOL_DTC=		${TOOLDIR}/bin/${_TOOL_PREFIX}dtc
    356 TOOL_EQN=		${TOOLDIR}/bin/${_TOOL_PREFIX}eqn
    357 TOOL_FDISK=		${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-fdisk
    358 TOOL_FGEN=		${TOOLDIR}/bin/${_TOOL_PREFIX}fgen
    359 TOOL_GENASSYM=		${TOOLDIR}/bin/${_TOOL_PREFIX}genassym
    360 TOOL_GENCAT=		${TOOLDIR}/bin/${_TOOL_PREFIX}gencat
    361 TOOL_GMAKE=		${TOOLDIR}/bin/${_TOOL_PREFIX}gmake
    362 TOOL_GPT=		${TOOLDIR}/bin/${_TOOL_PREFIX}gpt
    363 # grep exists in src/tools, but is not hooked up into the build.
    364 #TOOL_GREP=		${TOOLDIR}/bin/${_TOOL_PREFIX}grep
    365 TOOL_GREP=		grep
    366 TOOL_GROFF=		PATH=${TOOLDIR}/lib/groff:$${PATH} ${TOOLDIR}/bin/${_TOOL_PREFIX}groff
    367 TOOL_HEXDUMP=		${TOOLDIR}/bin/${_TOOL_PREFIX}hexdump
    368 TOOL_HP300MKBOOT=	${TOOLDIR}/bin/${_TOOL_PREFIX}hp300-mkboot
    369 TOOL_HPPAMKBOOT=	${TOOLDIR}/bin/${_TOOL_PREFIX}hppa-mkboot
    370 TOOL_INDXBIB=		${TOOLDIR}/bin/${_TOOL_PREFIX}indxbib
    371 TOOL_INSTALLBOOT=	${TOOLDIR}/bin/${_TOOL_PREFIX}installboot
    372 TOOL_INSTALL_INFO=	${TOOLDIR}/bin/${_TOOL_PREFIX}install-info
    373 TOOL_JOIN=		${TOOLDIR}/bin/${_TOOL_PREFIX}join
    374 TOOL_LLVM_TBLGEN=		${TOOLDIR}/bin/${_TOOL_PREFIX}llvm-tblgen
    375 TOOL_M4=		${TOOLDIR}/bin/${_TOOL_PREFIX}m4
    376 TOOL_MACPPCFIXCOFF=	${TOOLDIR}/bin/${_TOOL_PREFIX}macppc-fixcoff
    377 TOOL_MAKEFS=		${TOOLDIR}/bin/${_TOOL_PREFIX}makefs
    378 TOOL_MAKEINFO=		${TOOLDIR}/bin/${_TOOL_PREFIX}makeinfo
    379 TOOL_MAKEKEYS=		${TOOLDIR}/bin/${_TOOL_PREFIX}makekeys
    380 TOOL_MAKESTRS=		${TOOLDIR}/bin/${_TOOL_PREFIX}makestrs
    381 TOOL_MAKEWHATIS=	${TOOLDIR}/bin/${_TOOL_PREFIX}makewhatis
    382 TOOL_MANDOC_ASCII=	${TOOLDIR}/bin/${_TOOL_PREFIX}mandoc -Tascii
    383 TOOL_MANDOC_HTML=	${TOOLDIR}/bin/${_TOOL_PREFIX}mandoc -Thtml
    384 TOOL_MANDOC_LINT=	${TOOLDIR}/bin/${_TOOL_PREFIX}mandoc -Tlint
    385 TOOL_MDSETIMAGE=	${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-mdsetimage
    386 TOOL_MENUC=		MENUDEF=${TOOLDIR}/share/misc ${TOOLDIR}/bin/${_TOOL_PREFIX}menuc
    387 TOOL_M68KELF2AOUT=	${TOOLDIR}/bin/${_TOOL_PREFIX}m68k-elf2aout
    388 TOOL_MIPSELF2ECOFF=	${TOOLDIR}/bin/${_TOOL_PREFIX}mips-elf2ecoff
    389 TOOL_MKCSMAPPER=	${TOOLDIR}/bin/${_TOOL_PREFIX}mkcsmapper
    390 TOOL_MKESDB=		${TOOLDIR}/bin/${_TOOL_PREFIX}mkesdb
    391 TOOL_MKLOCALE=		${TOOLDIR}/bin/${_TOOL_PREFIX}mklocale
    392 TOOL_MKMAGIC=		${TOOLDIR}/bin/${_TOOL_PREFIX}file
    393 TOOL_MKNOD=		${TOOLDIR}/bin/${_TOOL_PREFIX}mknod
    394 TOOL_MKTEMP=		${TOOLDIR}/bin/${_TOOL_PREFIX}mktemp
    395 TOOL_MKUBOOTIMAGE=	${TOOLDIR}/bin/${_TOOL_PREFIX}mkubootimage
    396 TOOL_ELFTOSB=		${TOOLDIR}/bin/${_TOOL_PREFIX}elftosb
    397 TOOL_MSGC=		MSGDEF=${TOOLDIR}/share/misc ${TOOLDIR}/bin/${_TOOL_PREFIX}msgc
    398 TOOL_MTREE=		${TOOLDIR}/bin/${_TOOL_PREFIX}mtree
    399 TOOL_NBPERF=		${TOOLDIR}/bin/${_TOOL_PREFIX}perf
    400 TOOL_NCDCS=		${TOOLDIR}/bin/${_TOOL_PREFIX}ibmnws-ncdcs
    401 TOOL_PAX=		${TOOLDIR}/bin/${_TOOL_PREFIX}pax
    402 TOOL_PIC=		${TOOLDIR}/bin/${_TOOL_PREFIX}pic
    403 TOOL_PIGZ=		${TOOLDIR}/bin/${_TOOL_PREFIX}pigz
    404 TOOL_PKG_CREATE=	${TOOLDIR}/bin/${_TOOL_PREFIX}pkg_create
    405 TOOL_POWERPCMKBOOTIMAGE=${TOOLDIR}/bin/${_TOOL_PREFIX}powerpc-mkbootimage
    406 TOOL_PWD_MKDB=		${TOOLDIR}/bin/${_TOOL_PREFIX}pwd_mkdb
    407 TOOL_REFER=		${TOOLDIR}/bin/${_TOOL_PREFIX}refer
    408 TOOL_ROFF_ASCII=	PATH=${TOOLDIR}/lib/groff:$${PATH} ${TOOLDIR}/bin/${_TOOL_PREFIX}nroff
    409 TOOL_ROFF_DOCASCII=	${TOOL_GROFF} -Tascii
    410 TOOL_ROFF_DOCHTML=	${TOOL_GROFF} -Thtml
    411 TOOL_ROFF_DVI=		${TOOL_GROFF} -Tdvi
    412 TOOL_ROFF_HTML=		${TOOL_GROFF} -Tlatin1 -mdoc2html
    413 TOOL_ROFF_PS=		${TOOL_GROFF} -Tps
    414 TOOL_ROFF_RAW=		${TOOL_GROFF} -Z
    415 TOOL_RPCGEN=		RPCGEN_CPP=${CPP:Q} ${TOOLDIR}/bin/${_TOOL_PREFIX}rpcgen
    416 TOOL_SED=		${TOOLDIR}/bin/${_TOOL_PREFIX}sed
    417 TOOL_SLC=		${TOOLDIR}/bin/${_TOOL_PREFIX}slc
    418 TOOL_SOELIM=		${TOOLDIR}/bin/${_TOOL_PREFIX}soelim
    419 TOOL_SORTINFO=		${TOOLDIR}/bin/${_TOOL_PREFIX}sortinfo
    420 TOOL_SPARKCRC=		${TOOLDIR}/bin/${_TOOL_PREFIX}sparkcrc
    421 TOOL_STAT=		${TOOLDIR}/bin/${_TOOL_PREFIX}stat
    422 TOOL_STRFILE=		${TOOLDIR}/bin/${_TOOL_PREFIX}strfile
    423 TOOL_SUNLABEL=		${TOOLDIR}/bin/${_TOOL_PREFIX}sunlabel
    424 TOOL_TBL=		${TOOLDIR}/bin/${_TOOL_PREFIX}tbl
    425 TOOL_TIC=		${TOOLDIR}/bin/${_TOOL_PREFIX}tic
    426 TOOL_UUDECODE=		${TOOLDIR}/bin/${_TOOL_PREFIX}uudecode
    427 TOOL_VGRIND=		${TOOLDIR}/bin/${_TOOL_PREFIX}vgrind -f
    428 TOOL_VFONTEDPR=		${TOOLDIR}/libexec/${_TOOL_PREFIX}vfontedpr
    429 TOOL_ZIC=		${TOOLDIR}/bin/${_TOOL_PREFIX}zic
    430 
    431 .else	# USETOOLS != yes						# } {
    432 
    433 # Clang supports C, C++ and Objective C
    434 TOOL_CC.clang=		clang
    435 TOOL_CPP.clang=		clang-cpp
    436 TOOL_CXX.clang=		clang++
    437 TOOL_OBJC.clang=	clang
    438 
    439 # GCC supports C, C++, Fortran and Objective C
    440 TOOL_CC.gcc=	gcc
    441 TOOL_CPP.gcc=	cpp
    442 TOOL_CXX.gcc=	c++
    443 TOOL_FC.gcc=	g77
    444 TOOL_OBJC.gcc=	gcc
    445 
    446 # PCC supports C and Fortran
    447 TOOL_CC.pcc=		pcc
    448 TOOL_CPP.pcc=		pcpp
    449 TOOL_CXX.pcc=		p++
    450 
    451 TOOL_AMIGAAOUT2BB=	amiga-aout2bb
    452 TOOL_AMIGAELF2BB=	amiga-elf2bb
    453 TOOL_AMIGATXLT=		amiga-txlt
    454 TOOL_ASN1_COMPILE=	asn1_compile
    455 TOOL_AWK=		awk
    456 TOOL_CAP_MKDB=		cap_mkdb
    457 TOOL_CAT=		cat
    458 TOOL_CKSUM=		cksum
    459 TOOL_CLANG_TBLGEN=	clang-tblgen
    460 TOOL_COMPILE_ET=	compile_et
    461 TOOL_CONFIG=		config
    462 TOOL_CRUNCHGEN=		crunchgen
    463 TOOL_CTAGS=		ctags
    464 TOOL_CTFCONVERT=	ctfconvert
    465 TOOL_CTFMERGE=		ctfmerge
    466 TOOL_CVSLATEST=		cvslatest
    467 TOOL_DB=		db
    468 TOOL_DISKLABEL=		disklabel
    469 TOOL_EQN=		eqn
    470 TOOL_FDISK=		fdisk
    471 TOOL_FGEN=		fgen
    472 TOOL_GENASSYM=		genassym
    473 TOOL_GENCAT=		gencat
    474 TOOL_GMAKE=		gmake
    475 TOOL_GPT=		gpt
    476 TOOL_GREP=		grep
    477 TOOL_GROFF=		groff
    478 TOOL_HEXDUMP=		hexdump
    479 TOOL_HP300MKBOOT=	hp300-mkboot
    480 TOOL_HPPAMKBOOT=	hppa-mkboot
    481 TOOL_INDXBIB=		indxbib
    482 TOOL_INSTALLBOOT=	installboot
    483 TOOL_INSTALL_INFO=	install-info
    484 TOOL_JOIN=		join
    485 TOOL_LLVM_TBLGEN=	llvm-tblgen
    486 TOOL_M4=		m4
    487 TOOL_MACPPCFIXCOFF=	macppc-fixcoff
    488 TOOL_MAKEFS=		makefs
    489 TOOL_MAKEINFO=		makeinfo
    490 TOOL_MAKEKEYS=		makekeys
    491 TOOL_MAKESTRS=		makestrs
    492 TOOL_MAKEWHATIS=	/usr/libexec/makewhatis
    493 TOOL_MANDOC_ASCII=	mandoc -Tascii
    494 TOOL_MANDOC_HTML=	mandoc -Thtml
    495 TOOL_MANDOC_LINT=	mandoc -Tlint
    496 TOOL_MDSETIMAGE=	mdsetimage
    497 TOOL_MENUC=		menuc
    498 TOOL_M68KELF2AOUT=	m68k-elf2aout
    499 TOOL_MIPSELF2ECOFF=	mips-elf2ecoff
    500 TOOL_MKCSMAPPER=	mkcsmapper
    501 TOOL_MKESDB=		mkesdb
    502 TOOL_MKLOCALE=		mklocale
    503 TOOL_MKMAGIC=		file
    504 TOOL_MKNOD=		mknod
    505 TOOL_MKTEMP=		mktemp
    506 TOOL_MKUBOOTIMAGE=	mkubootimage
    507 TOOL_ELFTOSB=		elftosb
    508 TOOL_MSGC=		msgc
    509 TOOL_MTREE=		mtree
    510 TOOL_NBPERF=		nbperf
    511 TOOL_NCDCS=		ncdcs
    512 TOOL_PAX=		pax
    513 TOOL_PIC=		pic
    514 TOOL_PIGZ=		pigz
    515 TOOL_PKG_CREATE=	pkg_create
    516 TOOL_POWERPCMKBOOTIMAGE=	powerpc-mkbootimage
    517 TOOL_PWD_MKDB=		pwd_mkdb
    518 TOOL_REFER=		refer
    519 TOOL_ROFF_ASCII=	nroff
    520 TOOL_ROFF_DOCASCII=	${TOOL_GROFF} -Tascii
    521 TOOL_ROFF_DOCHTML=	${TOOL_GROFF} -Thtml
    522 TOOL_ROFF_DVI=		${TOOL_GROFF} -Tdvi
    523 TOOL_ROFF_HTML=		${TOOL_GROFF} -Tlatin1 -mdoc2html
    524 TOOL_ROFF_PS=		${TOOL_GROFF} -Tps
    525 TOOL_ROFF_RAW=		${TOOL_GROFF} -Z
    526 TOOL_RPCGEN=		rpcgen
    527 TOOL_SED=		sed
    528 TOOL_SOELIM=		soelim
    529 TOOL_SORTINFO=		sortinfo
    530 TOOL_SPARKCRC=		sparkcrc
    531 TOOL_STAT=		stat
    532 TOOL_STRFILE=		strfile
    533 TOOL_SUNLABEL=		sunlabel
    534 TOOL_TBL=		tbl
    535 TOOL_TIC=		tic
    536 TOOL_UUDECODE=		uudecode
    537 TOOL_VGRIND=		vgrind -f
    538 TOOL_VFONTEDPR=		/usr/libexec/vfontedpr
    539 TOOL_ZIC=		zic
    540 
    541 .endif	# USETOOLS != yes						# }
    542 
    543 # Standalone code should not be compiled with PIE or CTF
    544 # Should create a better test
    545 .if defined(BINDIR) && ${BINDIR} == "/usr/mdec"
    546 NOPIE=			# defined
    547 NOCTF=			# defined
    548 .elif ${MACHINE} == "sun2"
    549 NOPIE=			# we don't have PIC, so no PIE
    550 .endif
    551 
    552 # Fallback to ensure that all variables are defined to something
    553 TOOL_CC.false=		false
    554 TOOL_CPP.false=		false
    555 TOOL_CXX.false=		false
    556 TOOL_FC.false=		false
    557 TOOL_OBJC.false=	false
    558 
    559 AVAILABLE_COMPILER?=	${HAVE_PCC:Dpcc} ${HAVE_LLVM:Dclang} ${HAVE_GCC:Dgcc} ${EXTERNAL_TOOLCHAIN:Dgcc} false
    560 
    561 .for _t in CC CPP CXX FC OBJC
    562 ACTIVE_${_t}=	${AVAILABLE_COMPILER:@.c.@ ${ !defined(UNSUPPORTED_COMPILER.${.c.}) && defined(TOOL_${_t}.${.c.}) :? ${.c.} : }@:[1]}
    563 SUPPORTED_${_t}=${AVAILABLE_COMPILER:Nfalse:@.c.@ ${ !defined(UNSUPPORTED_COMPILER.${.c.}) && defined(TOOL_${_t}.${.c.}) :? ${.c.} : }@}
    564 .endfor
    565 # make bugs prevent moving this into the .for loop
    566 CC=		${TOOL_CC.${ACTIVE_CC}}
    567 CPP=		${TOOL_CPP.${ACTIVE_CPP}}
    568 CXX=		${TOOL_CXX.${ACTIVE_CXX}}
    569 FC=		${TOOL_FC.${ACTIVE_FC}}
    570 OBJC=		${TOOL_OBJC.${ACTIVE_OBJC}}
    571 
    572 # For each ${MACHINE_CPU}, list the ports that use it.
    573 MACHINES.aarch64=	evbarm64
    574 MACHINES.alpha=		alpha
    575 MACHINES.arm=		acorn26 acorn32 cats epoc32 evbarm hpcarm \
    576 			iyonix netwinder shark zaurus
    577 MACHINES.coldfire=	evbcf
    578 MACHINES.i386=		i386
    579 MACHINES.ia64=		ia64
    580 MACHINES.hppa=		hppa
    581 MACHINES.m68000=	sun2
    582 MACHINES.m68k=		amiga atari cesfic hp300 luna68k mac68k \
    583 			news68k next68k sun3 x68k
    584 MACHINES.mips=		arc cobalt algor cobalt emips evbmips ews4800mips \
    585 			hpcmips mipsco newsmips pmax sbmips sgimips
    586 MACHINES.or1k=		or1k
    587 MACHINES.powerpc=	amigappc bebox evbppc ibmnws macppc mvmeppc \
    588 			ofppc prep rs6000 sandpoint
    589 MACHINES.riscv=		riscv
    590 MACHINES.sh3=		dreamcast evbsh3 hpcsh landisk mmeye
    591 MACHINES.sparc=		sparc sparc64
    592 MACHINES.sparc64=	sparc64
    593 MACHINES.vax=		vax
    594 MACHINES.x86_64=	amd64
    595 
    596 # for crunchide & ldd, define the OBJECT_FMTS used by a MACHINE_ARCH
    597 #
    598 OBJECT_FMTS=
    599 .if	${MACHINE_ARCH} != "alpha" && ${MACHINE_ARCH} != "ia64"
    600 OBJECT_FMTS+=	elf32
    601 .endif
    602 .if	${MACHINE_ARCH} == "alpha" || ${MACHINE_ARCH:M*64*} != ""
    603 OBJECT_FMTS+=	elf64
    604 .endif
    605 
    606 # OBJCOPY flags to create a.out binaries for old firmware
    607 # shared among src/distrib and ${MACHINE}/conf/Makefile.${MACHINE}.inc
    608 .if ${MACHINE_CPU} == "arm"
    609 OBJCOPY_ELF2AOUT_FLAGS?=	\
    610 	-O a.out-arm-netbsd	\
    611 	-R .ident		\
    612 	-R .ARM.attributes	\
    613 	-R .ARM.exidx		\
    614 	-R .ARM.extab		\
    615 	-R .SUNW_ctf		\
    616 	-R .arm.atpcs		\
    617 	-R .comment		\
    618 	-R .debug_abbrev	\
    619 	-R .debug_aranges	\
    620 	-R .debug_info		\
    621 	-R .debug_line		\
    622 	-R .debug_frame		\
    623 	-R .debug_loc		\
    624 	-R .debug_pubnames	\
    625 	-R .debug_pubtypes	\
    626 	-R .debug_ranges	\
    627 	-R .debug_str		\
    628 	-R .debug_macinfo	\
    629 	-R .eh_frame		\
    630 	-R .note.netbsd.ident
    631 .endif
    632 
    633 #
    634 # Targets to check if DESTDIR or RELEASEDIR is provided
    635 #
    636 .if !target(check_DESTDIR)
    637 check_DESTDIR: .PHONY .NOTMAIN
    638 .if !defined(DESTDIR)
    639 	@echo "setenv DESTDIR before doing that!"
    640 	@false
    641 .else
    642 	@true
    643 .endif
    644 .endif
    645 
    646 .if !target(check_RELEASEDIR)
    647 check_RELEASEDIR: .PHONY .NOTMAIN
    648 .if !defined(RELEASEDIR)
    649 	@echo "setenv RELEASEDIR before doing that!"
    650 	@false
    651 .else
    652 	@true
    653 .endif
    654 .endif
    655 
    656 #
    657 # Where the system object and source trees are kept; can be configurable
    658 # by the user in case they want them in ~/foosrc and ~/fooobj (for example).
    659 #
    660 BSDSRCDIR?=	/usr/src
    661 BSDOBJDIR?=	/usr/obj
    662 NETBSDSRCDIR?=	${BSDSRCDIR}
    663 
    664 BINGRP?=	wheel
    665 BINOWN?=	root
    666 BINMODE?=	555
    667 NONBINMODE?=	444
    668 
    669 # These are here mainly because we don't want suid root in case
    670 # a Makefile defines BINMODE.
    671 RUMPBINGRP?=	wheel
    672 RUMPBINOWN?=	root
    673 RUMPBINMODE?=	555
    674 RUMPNONBINMODE?=444
    675 
    676 MANDIR?=	/usr/share/man
    677 MANGRP?=	wheel
    678 MANOWN?=	root
    679 MANMODE?=	${NONBINMODE}
    680 MANINSTALL?=	${_MANINSTALL}
    681 
    682 INFODIR?=	/usr/share/info
    683 INFOGRP?=	wheel
    684 INFOOWN?=	root
    685 INFOMODE?=	${NONBINMODE}
    686 
    687 LIBDIR?=	/usr/lib
    688 
    689 LINTLIBDIR?=	/usr/libdata/lint
    690 LIBGRP?=	${BINGRP}
    691 LIBOWN?=	${BINOWN}
    692 LIBMODE?=	${NONBINMODE}
    693 
    694 DOCDIR?=	/usr/share/doc
    695 DOCGRP?=	wheel
    696 DOCOWN?=	root
    697 DOCMODE?=	${NONBINMODE}
    698 
    699 NLSDIR?=	/usr/share/nls
    700 NLSGRP?=	wheel
    701 NLSOWN?=	root
    702 NLSMODE?=	${NONBINMODE}
    703 
    704 KMODULEGRP?=	wheel
    705 KMODULEOWN?=	root
    706 KMODULEMODE?=	${NONBINMODE}
    707 
    708 LOCALEDIR?=	/usr/share/locale
    709 LOCALEGRP?=	wheel
    710 LOCALEOWN?=	root
    711 LOCALEMODE?=	${NONBINMODE}
    712 
    713 FIRMWAREDIR?=	/libdata/firmware
    714 FIRMWAREGRP?=	wheel
    715 FIRMWAREOWN?=	root
    716 FIRMWAREMODE?=	${NONBINMODE}
    717 
    718 DEBUGDIR?=	/usr/libdata/debug
    719 DEBUGGRP?=	wheel
    720 DEBUGOWN?=	root
    721 DEBUGMODE?=	${NONBINMODE}
    722 
    723 MKDIRMODE?=	0755
    724 MKDIRPERM?=	-m ${MKDIRMODE}
    725 
    726 #
    727 # Data-driven table using make variables to control how
    728 # toolchain-dependent targets and shared libraries are built
    729 # for different platforms and object formats.
    730 #
    731 # OBJECT_FMT:		currently either "ELF" or "a.out".
    732 #
    733 # All platforms are ELF.
    734 #
    735 OBJECT_FMT=	ELF
    736 
    737 #
    738 # If this platform's toolchain is missing, we obviously cannot build it.
    739 #
    740 .if ${TOOLCHAIN_MISSING} != "no"
    741 MKBINUTILS:= no
    742 MKGDB:= no
    743 MKGCC:= no
    744 .endif
    745 
    746 #
    747 # If we are using an external toolchain, we can still build the target's
    748 # binutils, but we cannot build GCC's support libraries, since those are
    749 # tightly-coupled to the version of GCC being used.
    750 #
    751 .if defined(EXTERNAL_TOOLCHAIN)
    752 MKGCC:= no
    753 .endif
    754 
    755 # No GDB support for aarch64
    756 MKGDB.aarch64=	no
    757 MKGDB.aarch64eb=no
    758 MKGDB.or1k=	no
    759 MKGDB.riscv32=	no
    760 MKGDB.riscv64=	no
    761 
    762 # No kernel modules for or1k (yet)
    763 MKKMOD.or1k=	no
    764 MKKMOD.riscv32=	no
    765 MKKMOD.riscv64=	no
    766 
    767 # No profiling for or1k (yet)
    768 MKPROFILE.or1k=	no
    769 MKPROFILE.riscv32=no
    770 MKPROFILE.riscv64=no
    771 
    772 #
    773 # The m68000 port is incomplete.
    774 #
    775 .if ${MACHINE_ARCH} == "m68000"
    776 NOPIC=		# defined
    777 MKISCSI=	no
    778 # XXX GCC 4 outputs mcount() calling sequences that try to load values
    779 # from over 64KB away and this fails to assemble.
    780 .if defined(HAVE_GCC)
    781 NOPROFILE=	# defined
    782 .endif
    783 .endif
    784 
    785 #
    786 # The ia64 port is incomplete.
    787 #
    788 MKLINT.ia64=	no
    789 MKGDB.ia64=	no
    790 
    791 #
    792 # On VAX using ELF, all objects are PIC, not just shared libraries,
    793 # so don't build the _pic version. VAX has no native TLS support either,
    794 # so differences between TLS models are not relevant.
    795 #
    796 MKPICLIB.vax=	no
    797 
    798 #
    799 # Location of the file that contains the major and minor numbers of the
    800 # version of a shared library.  If this file exists a shared library
    801 # will be built by <bsd.lib.mk>.
    802 #
    803 SHLIB_VERSION_FILE?= ${.CURDIR}/shlib_version
    804 
    805 #
    806 # GNU sources and packages sometimes see architecture names differently.
    807 #
    808 GNU_ARCH.aarch64eb=aarch64_be
    809 GNU_ARCH.coldfire=m5407
    810 GNU_ARCH.earm=arm
    811 GNU_ARCH.earmhf=arm
    812 GNU_ARCH.earmeb=armeb
    813 GNU_ARCH.earmhfeb=armeb
    814 GNU_ARCH.earmv4=armv4
    815 GNU_ARCH.earmv4eb=armv4eb
    816 GNU_ARCH.earmv5=arm
    817 GNU_ARCH.earmv5eb=armeb
    818 GNU_ARCH.earmv6=armv6
    819 GNU_ARCH.earmv6hf=armv6
    820 GNU_ARCH.earmv6eb=armv6eb
    821 GNU_ARCH.earmv6hfeb=armv6eb
    822 GNU_ARCH.earmv7=armv7
    823 GNU_ARCH.earmv7hf=armv7
    824 GNU_ARCH.earmv7eb=armv7eb
    825 GNU_ARCH.earmv7hfeb=armv7eb
    826 GNU_ARCH.i386=i486
    827 GCC_CONFIG_ARCH.i386=i486
    828 GCC_CONFIG_TUNE.i386=nocona
    829 GCC_CONFIG_TUNE.x86_64=nocona
    830 GNU_ARCH.m68000=m68010
    831 GNU_ARCH.sh3eb=sh
    832 GNU_ARCH.sh3el=shle
    833 GNU_ARCH.mips64eb=mips64
    834 MACHINE_GNU_ARCH=${GNU_ARCH.${MACHINE_ARCH}:U${MACHINE_ARCH}}
    835 
    836 #
    837 # In order to identify NetBSD to GNU packages, we sometimes need
    838 # an "elf" tag for historically a.out platforms.
    839 #
    840 .if (!empty(MACHINE_ARCH:Mearm*))
    841 MACHINE_GNU_PLATFORM?=${MACHINE_GNU_ARCH}--netbsdelf-${MACHINE_ARCH:C/eb//:C/v[4-7]//:S/earm/eabi/}
    842 .elif (${MACHINE_GNU_ARCH} == "arm" || \
    843      ${MACHINE_GNU_ARCH} == "armeb" || \
    844      ${MACHINE_ARCH} == "i386" || \
    845      ${MACHINE_CPU} == "m68k" || \
    846      ${MACHINE_GNU_ARCH} == "sh" || \
    847      ${MACHINE_GNU_ARCH} == "shle" || \
    848      ${MACHINE_ARCH} == "sparc" || \
    849      ${MACHINE_ARCH} == "vax")
    850 MACHINE_GNU_PLATFORM?=${MACHINE_GNU_ARCH}--netbsdelf
    851 .else
    852 MACHINE_GNU_PLATFORM?=${MACHINE_GNU_ARCH}--netbsd
    853 .endif
    854 
    855 .if !empty(MACHINE_ARCH:M*arm*)
    856 # Flags to pass to CC for using the old APCS ABI on ARM for compat or stand.
    857 ARM_APCS_FLAGS=	-mabi=apcs-gnu -mfloat-abi=soft
    858 ARM_APCS_FLAGS+=${${ACTIVE_CC} == "gcc":? -marm :}
    859 ARM_APCS_FLAGS+=${${ACTIVE_CC} == "clang":? -target ${MACHINE_GNU_ARCH}--netbsdelf -B ${TOOLDIR}/${MACHINE_GNU_PLATFORM}/bin :}
    860 .endif
    861 
    862 GENASSYM_CPPFLAGS+=	${${ACTIVE_CC} == "clang":? -no-integrated-as :}
    863 
    864 TARGETS+=	all clean cleandir depend dependall includes \
    865 		install lint obj regress tags html analyze describe \
    866 		rumpdescribe
    867 PHONY_NOTMAIN =	all clean cleandir depend dependall distclean includes \
    868 		install lint obj regress beforedepend afterdepend \
    869 		beforeinstall afterinstall realinstall realdepend realall \
    870 		html subdir-all subdir-install subdir-depend analyze describe \
    871 		rumpdescribe
    872 .PHONY:		${PHONY_NOTMAIN}
    873 .NOTMAIN:	${PHONY_NOTMAIN}
    874 
    875 .if ${NEED_OWN_INSTALL_TARGET} != "no"
    876 .if !target(install)
    877 install:	beforeinstall .WAIT subdir-install realinstall .WAIT afterinstall
    878 beforeinstall:
    879 subdir-install:
    880 realinstall:
    881 afterinstall:
    882 .endif
    883 all:		realall subdir-all
    884 subdir-all:
    885 realall:
    886 depend:		realdepend subdir-depend
    887 subdir-depend:
    888 realdepend:
    889 distclean:	cleandir
    890 cleandir:	clean
    891 
    892 dependall:	.NOTMAIN realdepend .MAKE
    893 	@cd "${.CURDIR}"; ${MAKE} realall
    894 .endif
    895 
    896 #
    897 # Define MKxxx variables (which are either yes or no) for users
    898 # to set in /etc/mk.conf and override in the make environment.
    899 # These should be tested with `== "no"' or `!= "no"'.
    900 # The NOxxx variables should only be set by Makefiles.
    901 #
    902 # Please keep etc/Makefile and share/man/man5/mk.conf.5 in sync
    903 # with changes to the MK* variables here.
    904 #
    905 
    906 #
    907 # Supported NO* options (if defined, MK* will be forced to "no",
    908 # regardless of user's mk.conf setting).
    909 #
    910 # Source makefiles should set NO*, and not MK*, and must do so before
    911 # including bsd.own.mk.
    912 #
    913 .for var in \
    914 	NOCRYPTO NODOC NOHTML NOINFO NOLINKLIB NOLINT NOMAN NONLS NOOBJ NOPIC \
    915 	NOPICINSTALL NOPROFILE NOSHARE NOSTATICLIB NODEBUGLIB
    916 .if defined(${var})
    917 MK${var:S/^NO//}:=	no
    918 .endif
    919 .endfor
    920 
    921 #
    922 # Older-style variables that enabled behaviour when set.
    923 #
    924 .for var in MANZ UNPRIVED UPDATE
    925 .if defined(${var})
    926 MK${var}:=	yes
    927 .endif
    928 .endfor
    929 
    930 #
    931 # MK* options which have variable defaults.
    932 #
    933 # aarch64eb is not yet supported.
    934 #
    935 .if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "sparc64" \
    936     || ${MACHINE_ARCH} == "mips64eb" || ${MACHINE_ARCH} == "mips64el" \
    937     || ${MACHINE_ARCH} == "powerpc64" || ${MACHINE_ARCH} == "aarch64" \
    938     || ${MACHINE_ARCH} == "riscv64" || !empty(MACHINE_ARCH:Mearm*)
    939 MKCOMPAT?=	yes
    940 .else
    941 # Don't let this build where it really isn't supported.
    942 MKCOMPAT:=	no
    943 .endif
    944 
    945 .if ${MKCOMPAT} == "no"
    946 MKCOMPATTESTS:=	no
    947 MKCOMPATX11:=	no
    948 .endif
    949 
    950 .if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "i386" \
    951     || ${MACHINE_ARCH} == "mips64eb" || ${MACHINE_ARCH} == "mips64el" \
    952     || (${MACHINE} == "evbppc" && ${MACHINE_ARCH} == "powerpc")
    953 MKCOMPATMODULES?=	yes
    954 .else
    955 MKCOMPATMODULES:=	no
    956 .endif
    957 
    958 #
    959 # These platforms use softfloat by default.
    960 #
    961 .if ${MACHINE_ARCH} == "mips64eb" || ${MACHINE_ARCH} == "mips64el"
    962 MKSOFTFLOAT?=	yes
    963 .endif
    964 
    965 #
    966 # These platforms always use softfloat.
    967 #
    968 .if (${MACHINE_CPU} == "arm" && ${MACHINE_ARCH:M*hf*} == "") || \
    969     ${MACHINE_ARCH} == "coldfire" || ${MACHINE_CPU} == "or1k" || \
    970     ${MACHINE} == "emips" || ${MACHINE_CPU} == "sh3"
    971 MKSOFTFLOAT=	yes
    972 .endif
    973 
    974 .if ${MACHINE} == "emips"
    975 SOFTFLOAT_BITS=	32
    976 .endif
    977 
    978 #
    979 # We want to build zfs only for amd64 by default for now.
    980 #
    981 .if ${MACHINE} == "amd64"
    982 MKZFS?=		yes
    983 .endif
    984 
    985 #
    986 # DTrace works on amd64, i386 and earm*
    987 #
    988 .if ${MACHINE_ARCH} == "i386" || \
    989     ${MACHINE_ARCH} == "x86_64" || \
    990     !empty(MACHINE_ARCH:Mearm*)
    991 MKDTRACE?=	yes
    992 MKCTF?=		yes
    993 .endif
    994 
    995 #
    996 # PIE is enabled on many platforms by default.
    997 #
    998 .if ${MACHINE_ARCH} == "i386" || \
    999     ${MACHINE_ARCH} == "x86_64" || \
   1000     ${MACHINE_CPU} == "arm" || \
   1001     ${MACHINE_CPU} == "m68k" || \
   1002     ${MACHINE_CPU} == "mips" || \
   1003     ${MACHINE_CPU} == "sh3" || \
   1004     ${MACHINE} == "sparc64"
   1005 MKPIE?=		yes
   1006 .else
   1007 MKPIE?=		no
   1008 .endif
   1009 
   1010 #
   1011 # RELRO is enabled on i386 and amd64 by default
   1012 #
   1013 .if ${MACHINE_ARCH} == "i386" || \
   1014     ${MACHINE_ARCH} == "x86_64"
   1015 MKRELRO?=	partial
   1016 .else
   1017 MKRELRO?=	no
   1018 .endif
   1019 
   1020 .if ${MACHINE_ARCH} == "x86_64"
   1021 MKSTATICPIE?=	no
   1022 .else
   1023 MKSTATICPIE?=	no
   1024 .endif
   1025 
   1026 #
   1027 # MK* options which default to "yes".
   1028 #
   1029 _MKVARS.yes= \
   1030 	MKATF \
   1031 	MKBINUTILS \
   1032 	MKCOMPLEX MKCVS MKCXX \
   1033 	MKDOC MKDTC \
   1034 	MKDYNAMICROOT \
   1035 	MKGCC MKGDB MKGROFF \
   1036 	MKHESIOD MKHTML \
   1037 	MKIEEEFP MKINET6 MKINFO MKIPFILTER MKISCSI \
   1038 	MKKERBEROS \
   1039 	MKKMOD \
   1040 	MKLDAP MKLIBSTDCXX MKLINKLIB MKLVM \
   1041 	MKMAN MKMANDOC \
   1042 	MKMDNS \
   1043 	MKMAKEMANDB \
   1044 	MKNLS \
   1045 	MKNPF \
   1046 	MKOBJ \
   1047 	MKPAM MKPERFUSE \
   1048 	MKPF MKPIC MKPICINSTALL MKPICLIB MKPOSTFIX MKPROFILE \
   1049 	MKRUMP \
   1050 	MKSHARE MKSKEY MKSTATICLIB \
   1051 	MKUNBOUND \
   1052 	MKX11FONTS \
   1053 	MKYP
   1054 .for var in ${_MKVARS.yes}
   1055 ${var}?=	${${var}.${MACHINE_ARCH}:Uyes}
   1056 .endfor
   1057 
   1058 #
   1059 # MKGCCCMDS is only valid if we are building GCC so make it dependent on that.
   1060 #
   1061 _MKVARS.yes += MKGCCCMDS
   1062 MKGCCCMDS?=	${MKGCC}
   1063 
   1064 #
   1065 # Exceptions to the above:
   1066 #
   1067 .if ${MACHINE} == "acorn26"	# page size is prohibitive
   1068 MKKMOD=		no
   1069 .endif
   1070 
   1071 # Rump doesn't work yet on ia64
   1072 .if ${MACHINE} == "ia64"
   1073 MKRUMP=		no
   1074 .endif
   1075 
   1076 #
   1077 # Build a dynamically linked /bin and /sbin, with the necessary shared
   1078 # libraries moved from /usr/lib to /lib and the shared linker moved
   1079 # from /usr/libexec to /lib
   1080 #
   1081 # Note that if the BINDIR is not /bin or /sbin, then we always use the
   1082 # non-DYNAMICROOT behavior (i.e. it is only enabled for programs in /bin
   1083 # and /sbin).  See <bsd.shlib.mk>.
   1084 #
   1085 # For ia64, ld.elf_so not yet implemented
   1086 .if ${MACHINE_ARCH} == "ia64"
   1087 MKDYNAMICROOT=	no
   1088 .endif
   1089 
   1090 .if defined(MKREPRO)
   1091 MKARZERO ?= ${MKREPRO}
   1092 .endif
   1093 
   1094 #
   1095 # MK* options which default to "no".  Note that MKZFS has a different
   1096 # default for some platforms, see above.  Please keep alphabetically
   1097 # sorted with at most one letter per line.
   1098 #
   1099 _MKVARS.no= \
   1100 	MKARZERO \
   1101 	MKBSDGREP MKBSDTAR \
   1102 	MKCATPAGES MKCOMPATTESTS MKCOMPATX11 MKCTF \
   1103 	MKDEBUG MKDEBUGLIB MKDTRACE \
   1104 	MKEXTSRC \
   1105 	MKGROFFHTMLDOC \
   1106 	MKKYUA \
   1107 	MKLIBCXX MKLLD MKLLDB MKLLVM MKLINT \
   1108 	MKMANZ MKMCLINKER \
   1109 	MKNSD \
   1110 	MKOBJDIRS \
   1111 	MKPCC MKPIGZGZIP \
   1112 	MKRADEONFIRMWARE MKREPRO \
   1113 	MKSLJIT MKSOFTFLOAT MKSTRIPIDENT \
   1114 	MKTPM \
   1115 	MKUNPRIVED MKUPDATE \
   1116 	MKX11 MKX11MOTIF MKXORG_SERVER \
   1117 	MKZFS
   1118 .for var in ${_MKVARS.no}
   1119 ${var}?=	${${var}.${MACHINE_ARCH}:Uno}
   1120 .endfor
   1121 
   1122 .if ${MACHINE_ARCH} == "i386" || \
   1123     ${MACHINE_ARCH} == "x86_64" || \
   1124     ${MACHINE_ARCH} == "sparc" 
   1125 MKSLJIT=	yes
   1126 .endif
   1127 
   1128 #
   1129 # Which platforms build the xorg-server drivers (as opposed
   1130 # to just Xnest and Xvfb.)
   1131 #
   1132 .if ${MACHINE} == "alpha"	|| \
   1133     ${MACHINE} == "amd64"	|| \
   1134     ${MACHINE} == "amiga"	|| \
   1135     ${MACHINE} == "bebox"	|| \
   1136     ${MACHINE} == "cats"	|| \
   1137     ${MACHINE} == "dreamcast"	|| \
   1138     ${MACHINE} == "ews4800mips"	|| \
   1139     ${MACHINE} == "evbarm"	|| \
   1140     ${MACHINE} == "evbmips"	|| \
   1141     ${MACHINE} == "hp300"	|| \
   1142     ${MACHINE} == "hpcarm"	|| \
   1143     ${MACHINE} == "hpcmips"	|| \
   1144     ${MACHINE} == "hpcsh"	|| \
   1145     ${MACHINE} == "i386"	|| \
   1146     ${MACHINE} == "ibmnws"	|| \
   1147     ${MACHINE} == "luna68k"	|| \
   1148     ${MACHINE} == "mac68k"	|| \
   1149     ${MACHINE} == "macppc"	|| \
   1150     ${MACHINE} == "netwinder"	|| \
   1151     ${MACHINE} == "newsmips"	|| \
   1152     ${MACHINE} == "prep"	|| \
   1153     ${MACHINE} == "ofppc"	|| \
   1154     ${MACHINE} == "sgimips"	|| \
   1155     ${MACHINE} == "shark"	|| \
   1156     ${MACHINE} == "sparc"	|| \
   1157     ${MACHINE} == "sparc64"	|| \
   1158     ${MACHINE} == "vax"		|| \
   1159     ${MACHINE} == "zaurus"
   1160 MKXORG_SERVER=yes
   1161 .else
   1162 .endif
   1163 
   1164 # Only install the radeon firmware on DRM-happy systems.
   1165 .if ${MACHINE_ARCH} == "x86_64" || ${MACHINE_ARCH} == "i386"
   1166 MKRADEONFIRMWARE=		yes
   1167 .endif
   1168 
   1169 #
   1170 # Force some options off if their dependencies are off.
   1171 #
   1172 
   1173 .if ${MKCXX} == "no"
   1174 MKATF:=		no
   1175 MKGROFF:=	no
   1176 MKKYUA:=	no
   1177 .endif
   1178 
   1179 .if ${MKMAN} == "no"
   1180 MKCATPAGES:=	no
   1181 MKHTML:=	no
   1182 .endif
   1183 
   1184 _MANINSTALL=	maninstall
   1185 .if ${MKCATPAGES} != "no"
   1186 _MANINSTALL+=	catinstall
   1187 .endif
   1188 .if ${MKHTML} != "no"
   1189 _MANINSTALL+=	htmlinstall
   1190 .endif
   1191 
   1192 .if ${MKLINKLIB} == "no"
   1193 MKLINT:=	no
   1194 MKPICINSTALL:=	no
   1195 MKPROFILE:=	no
   1196 .endif
   1197 
   1198 .if ${MKPIC} == "no"
   1199 MKPICLIB:=	no
   1200 .endif
   1201 
   1202 .if ${MKOBJ} == "no"
   1203 MKOBJDIRS:=	no
   1204 .endif
   1205 
   1206 .if ${MKSHARE} == "no"
   1207 MKCATPAGES:=	no
   1208 MKDOC:=		no
   1209 MKINFO:=	no
   1210 MKHTML:=	no
   1211 MKMAN:=		no
   1212 MKNLS:=		no
   1213 .endif
   1214 
   1215 .if !empty(MACHINE_ARCH:Mearm*)
   1216 _NEEDS_LIBCXX.${MACHINE_ARCH}=	yes
   1217 .endif
   1218 _NEEDS_LIBCXX.aarch64=		yes
   1219 _NEEDS_LIBCXX.aarch64eb=	yes
   1220 _NEEDS_LIBCXX.i386=		yes
   1221 _NEEDS_LIBCXX.powerpc=		yes
   1222 _NEEDS_LIBCXX.powerpc64=	yes
   1223 _NEEDS_LIBCXX.sparc=		yes
   1224 _NEEDS_LIBCXX.sparc64=		yes
   1225 _NEEDS_LIBCXX.x86_64=		yes
   1226 
   1227 .if ${MKLLVM} == "yes" && ${_NEEDS_LIBCXX.${MACHINE_ARCH}:Uno} == "yes"
   1228 MKLIBCXX:=	yes
   1229 .endif
   1230 
   1231 #
   1232 # install(1) parameters.
   1233 #
   1234 COPY?=		-c
   1235 .if ${MKUPDATE} == "no"
   1236 PRESERVE?=	
   1237 .else
   1238 PRESERVE?=	-p
   1239 .endif
   1240 RENAME?=	-r
   1241 HRDLINK?=	-l h
   1242 SYMLINK?=	-l s
   1243 
   1244 METALOG?=	${DESTDIR}/METALOG
   1245 METALOG.add?=	${TOOL_CAT} -l >> ${METALOG}
   1246 .if (${_SRC_TOP_} != "")	# only set INSTPRIV if inside ${NETBSDSRCDIR}
   1247 .if ${MKUNPRIVED} != "no"
   1248 INSTPRIV.unpriv=-U -M ${METALOG} -D ${DESTDIR} -h sha256
   1249 .else
   1250 INSTPRIV.unpriv=
   1251 .endif
   1252 INSTPRIV?=	${INSTPRIV.unpriv} -N ${NETBSDSRCDIR}/etc
   1253 .endif
   1254 STRIPFLAG?=	
   1255 
   1256 .if ${NEED_OWN_INSTALL_TARGET} != "no"
   1257 INSTALL_DIR?=		${INSTALL} ${INSTPRIV} -d
   1258 INSTALL_FILE?=		${INSTALL} ${INSTPRIV} ${COPY} ${PRESERVE} ${RENAME}
   1259 INSTALL_LINK?=		${INSTALL} ${INSTPRIV} ${HRDLINK} ${RENAME}
   1260 INSTALL_SYMLINK?=	${INSTALL} ${INSTPRIV} ${SYMLINK} ${RENAME}
   1261 .endif
   1262 
   1263 #
   1264 # Set defaults for the USE_xxx variables.
   1265 #
   1266 
   1267 #
   1268 # USE_* options which default to "no" and will be forced to "no" if their
   1269 # corresponding MK* variable is set to "no".
   1270 #
   1271 .for var in USE_SKEY
   1272 .if (${${var:S/USE_/MK/}} == "no")
   1273 ${var}:= no
   1274 .else
   1275 ${var}?= no
   1276 .endif
   1277 .endfor
   1278 
   1279 #
   1280 # USE_* options which default to "yes" unless their corresponding MK*
   1281 # variable is set to "no".
   1282 #
   1283 .for var in USE_HESIOD USE_INET6 USE_KERBEROS USE_LDAP USE_PAM USE_YP
   1284 .if (${${var:S/USE_/MK/}} == "no")
   1285 ${var}:= no
   1286 .else
   1287 ${var}?= yes
   1288 .endif
   1289 .endfor
   1290 
   1291 #
   1292 # USE_* options which default to "yes".
   1293 #
   1294 .for var in USE_JEMALLOC
   1295 ${var}?= yes
   1296 .endfor
   1297 
   1298 #
   1299 # USE_* options which default to "no".
   1300 #
   1301 # For now, disable pigz as compressor by default
   1302 .for var in USE_PIGZGZIP USE_LIBTRE
   1303 ${var}?= no
   1304 .endfor
   1305 
   1306 #
   1307 # TOOL_GZIP and friends.  These might refer to TOOL_PIGZ or to the host gzip.
   1308 #
   1309 .if ${USE_PIGZGZIP} != "no"
   1310 TOOL_GZIP=		${TOOL_PIGZ}
   1311 GZIP_N_FLAG?=		-nT
   1312 .else
   1313 TOOL_GZIP=		gzip
   1314 GZIP_N_FLAG?=		-n
   1315 .endif
   1316 TOOL_GZIP_N=		${TOOL_GZIP} ${GZIP_N_FLAG}
   1317 
   1318 #
   1319 # Where X11 sources are and where it is installed to.
   1320 #
   1321 .if !defined(X11SRCDIR)
   1322 .if exists(${NETBSDSRCDIR}/../xsrc)
   1323 X11SRCDIR!=		cd "${NETBSDSRCDIR}/../xsrc" && pwd
   1324 .else
   1325 X11SRCDIR=		/usr/xsrc
   1326 .endif
   1327 .endif # !defined(X11SRCDIR)
   1328 
   1329 X11SRCDIR.local?=	${X11SRCDIR}/local
   1330 X11ROOTDIR?=		/usr/X11R7
   1331 X11BINDIR?=		${X11ROOTDIR}/bin
   1332 X11ETCDIR?=		/etc/X11
   1333 X11FONTDIR?=		${X11ROOTDIR}/lib/X11/fonts
   1334 X11INCDIR?=		${X11ROOTDIR}/include
   1335 X11LIBDIR?=		${X11ROOTDIR}/lib/X11
   1336 X11MANDIR?=		${X11ROOTDIR}/man
   1337 X11SHAREDIR?=		${X11ROOTDIR}/share
   1338 X11USRLIBDIR?=		${X11ROOTDIR}/lib${MLIBDIR:D/${MLIBDIR}}
   1339 
   1340 #
   1341 # New modular-xorg based builds
   1342 #
   1343 X11SRCDIRMIT?=		${X11SRCDIR}/external/mit
   1344 .for _lib in \
   1345 	FS ICE SM X11 XScrnSaver XTrap Xau Xcomposite Xcursor Xdamage \
   1346 	Xdmcp Xevie Xext Xfixes Xfont Xfont2 Xft Xi Xinerama Xmu Xpresent Xpm \
   1347 	Xrandr Xrender Xres Xt Xtst Xv XvMC Xxf86dga Xxf86misc Xxf86vm drm \
   1348 	epoxy fontenc xkbfile xkbui Xaw Xfontcache pciaccess xcb xshmfence \
   1349 	pthread-stubs
   1350 X11SRCDIR.${_lib}?=		${X11SRCDIRMIT}/lib${_lib}/dist
   1351 .endfor
   1352 
   1353 .for _proto in \
   1354 	xcmisc xext xf86bigfont bigreqs input kb x fonts fixes scrnsaver \
   1355 	xinerama dri2 dri3 render resource record video xf86dga xf86misc \
   1356 	xf86vidmode composite damage trap gl randr fontcache xf86dri \
   1357 	present xcb-
   1358 X11SRCDIR.${_proto}proto?=		${X11SRCDIRMIT}/${_proto}proto/dist
   1359 .endfor
   1360 
   1361 # During transition from xorg-server 1.10 to 1.18
   1362 .if \
   1363     ${MACHINE} == "alpha"	|| \
   1364     ${MACHINE} == "amiga"	|| \
   1365     ${MACHINE} == "ews4800mips"	|| \
   1366     ${MACHINE} == "hpcarm"	|| \
   1367     ${MACHINE} == "hpcmips"	|| \
   1368     ${MACHINE} == "hpcsh"	|| \
   1369     ${MACHINE} == "mac68k"	|| \
   1370     ${MACHINE} == "netwinder"	|| \
   1371     ${MACHINE} == "newsmips"	|| \
   1372     ${MACHINE} == "sgimips"	|| \
   1373     ${MACHINE} == "vax"		|| \
   1374     ${MACHINE} == "zaurus"
   1375 HAVE_XORG_SERVER_VER?=110
   1376 .else
   1377 HAVE_XORG_SERVER_VER?=118
   1378 .endif
   1379 
   1380 .if ${HAVE_XORG_SERVER_VER} == "118"
   1381 XORG_SERVER_SUBDIR?=xorg-server
   1382 . if ${MACHINE} == "amd64" || ${MACHINE} == "i386"
   1383 HAVE_XORG_GLAMOR?=	yes
   1384 . endif
   1385 .else
   1386 XORG_SERVER_SUBDIR?=xorg-server.old
   1387 .endif
   1388 
   1389 X11SRCDIR.xorg-server?=		${X11SRCDIRMIT}/${XORG_SERVER_SUBDIR}/dist
   1390 HAVE_XORG_GLAMOR?=	no
   1391 
   1392 # Build glamor extension?
   1393 
   1394 .for _dir in \
   1395 	xtrans fontconfig freetype evieext mkfontscale bdftopcf \
   1396 	xorg-cf-files imake xbiff xkeyboard-config \
   1397 	xbitmaps appres xeyes xev xedit sessreg pixman \
   1398 	beforelight bitmap editres makedepend fonttosfnt fslsfonts fstobdf \
   1399 	glu glw mesa-demos MesaGLUT MesaLib MesaLib7 \
   1400 	ico iceauth listres lndir \
   1401 	luit xproxymanagementprotocol mkfontdir oclock proxymngr rgb \
   1402 	rstart setxkbmap showfont smproxy twm viewres \
   1403 	x11perf xauth xcalc xclipboard \
   1404 	xclock xcmsdb xconsole xditview xdpyinfo xdriinfo xdm \
   1405 	xfd xf86dga xfindproxy xfontsel xfwp xgamma xgc xhost xinit \
   1406 	xkill xload xlogo xlsatoms xlsclients xlsfonts xmag xmessage \
   1407 	xmh xmodmap xmore xman xprop xrandr xrdb xrefresh xset \
   1408 	xsetmode xsetpointer xsetroot xsm xstdcmap xvidtune xvinfo \
   1409 	xwininfo xwud xkbprint xkbevd \
   1410 	xterm xwd xfs xfsinfo xtrap xkbutils xkbcomp \
   1411 	xinput xcb-util xorg-docs \
   1412 	font-adobe-100dpi font-adobe-75dpi font-adobe-utopia-100dpi \
   1413 	font-adobe-utopia-75dpi font-adobe-utopia-type1 \
   1414 	font-alias \
   1415 	font-bh-100dpi font-bh-75dpi font-bh-lucidatypewriter-100dpi \
   1416 	font-bh-lucidatypewriter-75dpi font-bh-ttf font-bh-type1 \
   1417 	font-bitstream-100dpi font-bitstream-75dpi font-bitstream-type1 \
   1418 	font-cursor-misc font-daewoo-misc font-dec-misc font-ibm-type1 \
   1419 	font-isas-misc font-jis-misc font-misc-misc font-mutt-misc \
   1420 	font-sony-misc font-util ttf-bitstream-vera encodings
   1421 X11SRCDIR.${_dir}?=		${X11SRCDIRMIT}/${_dir}/dist
   1422 .endfor
   1423 
   1424 .for _i in \
   1425 	elographics keyboard mouse synaptics vmmouse void ws
   1426 X11SRCDIR.xf86-input-${_i}?=	${X11SRCDIRMIT}/xf86-input-${_i}/dist
   1427 .endfor
   1428 
   1429 # xf86-video-modesetting move into the server build.
   1430 EXTRA_DRIVERS=
   1431 .if ${HAVE_XORG_SERVER_VER} == "118"
   1432 X11SRCDIR.xf86-video-modesetting=${X11SRCDIR.xorg-server}/hw/xfree86/drivers/modesetting
   1433 .else
   1434 EXTRA_DRIVERS=	modesetting 
   1435 .endif
   1436 
   1437 .for _v in \
   1438 	ag10e amdgpu apm ark ast ati ati-kms chips cirrus crime \
   1439 	geode glint i128 i740 igs imstt intel intel-old \
   1440 	${EXTRA_DRIVERS} mach64 mga \
   1441 	neomagic newport nouveau nsc nv openchrome pnozz \
   1442 	r128 rendition \
   1443 	s3 s3virge savage siliconmotion sis suncg14 \
   1444 	suncg6 sunffb sunleo suntcx \
   1445 	tdfx tga trident tseng vesa vga vmware wsfb xgi
   1446 X11SRCDIR.xf86-video-${_v}?=	${X11SRCDIRMIT}/xf86-video-${_v}/dist
   1447 .endfor
   1448 
   1449 
   1450 X11DRI?=			yes
   1451 X11LOADABLE?=			yes
   1452 
   1453 
   1454 #
   1455 # Where extsrc sources are and where it is installed to.
   1456 #
   1457 .if !defined(EXTSRCSRCDIR)
   1458 .if exists(${NETBSDSRCDIR}/../extsrc)
   1459 EXTSRCSRCDIR!=		cd "${NETBSDSRCDIR}/../extsrc" && pwd
   1460 .else
   1461 EXTSRCSRCDIR=		/usr/extsrc
   1462 .endif
   1463 .endif # !defined(EXTSRCSRCDIR)
   1464 
   1465 EXTSRCROOTDIR?=		/usr/ext
   1466 EXTSRCBINDIR?=		${EXTSRCROOTDIR}/bin
   1467 EXTSRCETCDIR?=		/etc/ext
   1468 EXTSRCINCDIR?=		${EXTSRCROOTDIR}/include
   1469 EXTSRCLIBDIR?=		${EXTSRCROOTDIR}/lib/ext
   1470 EXTSRCMANDIR?=		${EXTSRCROOTDIR}/man
   1471 EXTSRCUSRLIBDIR?=	${EXTSRCROOTDIR}/lib
   1472 
   1473 #
   1474 # MAKEDIRTARGET dir target [extra make(1) params]
   1475 #	run "cd $${dir} && ${MAKEDIRTARGETENV} ${MAKE} [params] $${target}", with a pretty message
   1476 #
   1477 MAKEDIRTARGETENV?=
   1478 MAKEDIRTARGET=\
   1479 	@_makedirtarget() { \
   1480 		dir="$$1"; shift; \
   1481 		target="$$1"; shift; \
   1482 		case "$${dir}" in \
   1483 		/*)	this="$${dir}/"; \
   1484 			real="$${dir}" ;; \
   1485 		.)	this="${_THISDIR_}"; \
   1486 			real="${.CURDIR}" ;; \
   1487 		*)	this="${_THISDIR_}$${dir}/"; \
   1488 			real="${.CURDIR}/$${dir}" ;; \
   1489 		esac; \
   1490 		show=$${this:-.}; \
   1491 		echo "$${target} ===> $${show%/}$${1:+	(with: $$@)}"; \
   1492 		cd "$${real}" \
   1493 		&& ${MAKEDIRTARGETENV} ${MAKE} _THISDIR_="$${this}" "$$@" $${target}; \
   1494 	}; \
   1495 	_makedirtarget
   1496 
   1497 #
   1498 # MAKEVERBOSE support.  Levels are:
   1499 #	0	Minimal output ("quiet")
   1500 #	1	Describe what is occurring
   1501 #	2	Describe what is occurring and echo the actual command
   1502 #	3	Ignore the effect of the "@" prefix in make commands
   1503 #	4	Trace shell commands using the shell's -x flag
   1504 #		
   1505 MAKEVERBOSE?=		2
   1506 
   1507 .if ${MAKEVERBOSE} == 0
   1508 _MKMSG?=	@\#
   1509 _MKSHMSG?=	: echo
   1510 _MKSHECHO?=	: echo
   1511 .SILENT:
   1512 .elif ${MAKEVERBOSE} == 1
   1513 _MKMSG?=	@echo '   '
   1514 _MKSHMSG?=	echo '   '
   1515 _MKSHECHO?=	: echo
   1516 .SILENT:
   1517 .else	# MAKEVERBOSE >= 2
   1518 _MKMSG?=	@echo '\#  '
   1519 _MKSHMSG?=	echo '\#  '
   1520 _MKSHECHO?=	echo
   1521 .SILENT: __makeverbose_dummy_target__
   1522 .endif	# MAKEVERBOSE >= 2
   1523 .if ${MAKEVERBOSE} >= 3
   1524 .MAKEFLAGS:	-dl
   1525 .endif	# ${MAKEVERBOSE} >= 3
   1526 .if ${MAKEVERBOSE} >= 4
   1527 .MAKEFLAGS:	-dx
   1528 .endif	# ${MAKEVERBOSE} >= 4
   1529 
   1530 _MKMSG_BUILD?=		${_MKMSG} "  build "
   1531 _MKMSG_CREATE?=		${_MKMSG} " create "
   1532 _MKMSG_COMPILE?=	${_MKMSG} "compile "
   1533 _MKMSG_FORMAT?=		${_MKMSG} " format "
   1534 _MKMSG_INSTALL?=	${_MKMSG} "install "
   1535 _MKMSG_LINK?=		${_MKMSG} "   link "
   1536 _MKMSG_LEX?=		${_MKMSG} "    lex "
   1537 _MKMSG_REMOVE?=		${_MKMSG} " remove "
   1538 _MKMSG_YACC?=		${_MKMSG} "   yacc "
   1539 
   1540 _MKSHMSG_CREATE?=	${_MKSHMSG} " create "
   1541 _MKSHMSG_INSTALL?=	${_MKSHMSG} "install "
   1542 
   1543 _MKTARGET_BUILD?=	${_MKMSG_BUILD} ${.CURDIR:T}/${.TARGET}
   1544 _MKTARGET_CREATE?=	${_MKMSG_CREATE} ${.CURDIR:T}/${.TARGET}
   1545 _MKTARGET_COMPILE?=	${_MKMSG_COMPILE} ${.CURDIR:T}/${.TARGET}
   1546 _MKTARGET_FORMAT?=	${_MKMSG_FORMAT} ${.CURDIR:T}/${.TARGET}
   1547 _MKTARGET_INSTALL?=	${_MKMSG_INSTALL} ${.TARGET}
   1548 _MKTARGET_LINK?=	${_MKMSG_LINK} ${.CURDIR:T}/${.TARGET}
   1549 _MKTARGET_LEX?=		${_MKMSG_LEX} ${.CURDIR:T}/${.TARGET}
   1550 _MKTARGET_REMOVE?=	${_MKMSG_REMOVE} ${.TARGET}
   1551 _MKTARGET_YACC?=	${_MKMSG_YACC} ${.CURDIR:T}/${.TARGET}
   1552 
   1553 .if ${MKMANDOC} == "yes"
   1554 TARGETS+=	lintmanpages
   1555 .endif
   1556 
   1557 TESTSBASE=	/usr/tests${MLIBDIR:D/${MLIBDIR}}
   1558 
   1559 # Override with tools versions if needed
   1560 .if ${MKCTF:Uno} != "no" && !defined(NOCTF)
   1561 CTFCONVERT=	${TOOL_CTFCONVERT}
   1562 CTFMERGE=	${TOOL_CTFMERGE}
   1563 .endif
   1564 
   1565 .endif	# !defined(_BSD_OWN_MK_)
   1566