xref: /freebsd/contrib/bmake/mk/host-target.mk (revision a91a246563dffa876a52f53a98de4af9fa364c52)
1# SPDX-License-Identifier: BSD-2-Clause
2#
3# RCSid:
4#	$Id: host-target.mk,v 1.20 2024/02/17 17:26:57 sjg Exp $
5#
6#	@(#) Copyright (c) 2007-2023 Simon J. Gerraty
7#
8#	This file is provided in the hope that it will
9#	be of use.  There is absolutely NO WARRANTY.
10#	Permission to copy, redistribute or otherwise
11#	use this file is hereby granted provided that
12#	the above copyright notice and this notice are
13#	left intact.
14#
15#	Please send copies of changes and bug-fixes to:
16#	sjg@crufty.net
17
18# Host platform information; may be overridden
19.if !target(__${.PARSEFILE}__)
20__${.PARSEFILE}__: .NOTMAIN
21
22.if !defined(_HOST_OSNAME)
23# use .MAKE.OS if available
24_HOST_OSNAME := ${.MAKE.OS:U${uname -s:L:sh}}
25.export _HOST_OSNAME
26.endif
27.if !defined(_HOST_OSREL)
28_HOST_OSREL  !=	uname -r
29.export _HOST_OSREL
30.endif
31.if !defined(_HOST_ARCH)
32_HOST_ARCH != uname -p 2> /dev/null || uname -m
33# uname -p may produce garbage on linux
34.if ${_HOST_ARCH:[\#]} > 1 || ${_HOST_ARCH:Nunknown} == ""
35_HOST_ARCH = ${_HOST_MACHINE}
36.elif ${_HOST_OSNAME:NDarwin} == "" && ${_HOST_ARCH:Narm:Ni386} == ""
37# _HOST_MACHINE is more explicit/useful
38_HOST_ARCH = ${_HOST_MACHINE}
39.endif
40.export _HOST_ARCH
41.endif
42.if !defined(_HOST_MACHINE)
43_HOST_MACHINE != uname -m
44# just in case
45_HOST_ARCH := ${_HOST_ARCH}
46# uname -m may produce garbage on darwin ppc
47.if ${_HOST_MACHINE:[\#]} > 1
48_HOST_MACHINE := ${_HOST_ARCH}
49.endif
50.export _HOST_MACHINE
51.endif
52.if !defined(HOST_MACHINE)
53HOST_MACHINE := ${_HOST_MACHINE}
54.export HOST_MACHINE
55.endif
56
57HOST_OSMAJOR := ${_HOST_OSREL:C/[^0-9].*//}
58HOST_OSTYPE  :=	${_HOST_OSNAME:S,/,,g}-${_HOST_OSREL:C/\([^\)]*\)//}-${_HOST_ARCH}
59HOST_OS      :=	${_HOST_OSNAME}
60host_os      :=	${_HOST_OSNAME:tl}
61HOST_TARGET  := ${host_os:S,/,,g}${HOST_OSMAJOR}-${_HOST_ARCH}
62# sometimes we want HOST_TARGET32
63MACHINE32.amd64 = i386
64MACHINE32.x86_64 = i386
65.if !defined(_HOST_ARCH32)
66_HOST_ARCH32 := ${MACHINE32.${_HOST_ARCH}:U${_HOST_ARCH:S,64$,,}}
67.export _HOST_ARCH32
68.endif
69HOST_TARGET32 := ${host_os:S,/,,g}${HOST_OSMAJOR}-${_HOST_ARCH32}
70
71.export HOST_TARGET HOST_TARGET32
72
73# tr is insanely non-portable, accommodate the lowest common denominator
74TR ?= tr
75toLower = ${TR} 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'
76toUpper = ${TR} 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
77
78.endif
79