1*1ce939a7SSimon J. Gerraty# $Id: sys.mk,v 1.45 2017/02/05 01:26:13 sjg Exp $ 23cbdda60SSimon J. Gerraty# 33cbdda60SSimon J. Gerraty# @(#) Copyright (c) 2003-2009, Simon J. Gerraty 43cbdda60SSimon J. Gerraty# 53cbdda60SSimon J. Gerraty# This file is provided in the hope that it will 63cbdda60SSimon J. Gerraty# be of use. There is absolutely NO WARRANTY. 73cbdda60SSimon J. Gerraty# Permission to copy, redistribute or otherwise 83cbdda60SSimon J. Gerraty# use this file is hereby granted provided that 93cbdda60SSimon J. Gerraty# the above copyright notice and this notice are 103cbdda60SSimon J. Gerraty# left intact. 113cbdda60SSimon J. Gerraty# 123cbdda60SSimon J. Gerraty# Please send copies of changes and bug-fixes to: 133cbdda60SSimon J. Gerraty# sjg@crufty.net 143cbdda60SSimon J. Gerraty# 153cbdda60SSimon J. Gerraty 163cbdda60SSimon J. Gerraty# Avoid putting anything platform specific in here. 173cbdda60SSimon J. Gerraty 1845447996SSimon J. Gerraty# _DEBUG_MAKE_FLAGS etc. 1945447996SSimon J. Gerraty.include <sys.debug.mk> 203cbdda60SSimon J. Gerraty 213cbdda60SSimon J. Gerraty.if !empty(_DEBUG_MAKE_FLAGS) 223cbdda60SSimon J. Gerraty.if ${_DEBUG_MAKE_SYS_DIRS:Uno:@x@${.CURDIR:M$x}@} != "" 233cbdda60SSimon J. Gerraty.MAKEFLAGS: ${_DEBUG_MAKE_FLAGS} 243cbdda60SSimon J. Gerraty.endif 253cbdda60SSimon J. Gerraty.endif 263cbdda60SSimon J. Gerraty 2745447996SSimon J. Gerraty# useful modifiers 2845447996SSimon J. Gerraty.include <sys.vars.mk> 293cbdda60SSimon J. Gerraty 303cbdda60SSimon J. Gerraty# we expect a recent bmake 313cbdda60SSimon J. Gerraty.if !defined(_TARGETS) 323cbdda60SSimon J. Gerraty# some things we do only once 333cbdda60SSimon J. Gerraty_TARGETS := ${.TARGETS} 343cbdda60SSimon J. Gerraty.-include <sys.env.mk> 353cbdda60SSimon J. Gerraty.endif 363cbdda60SSimon J. Gerraty 373cbdda60SSimon J. Gerraty# we need HOST_TARGET etc below. 383cbdda60SSimon J. Gerraty.include <host-target.mk> 393cbdda60SSimon J. Gerraty 40ac3446e9SSimon J. Gerraty# early customizations 41ac3446e9SSimon J. Gerraty.-include <local.sys.env.mk> 42ac3446e9SSimon J. Gerraty 43e48f47ddSSimon J. Gerraty# Popular suffixes for C++ 44e48f47ddSSimon J. GerratyCXX_SUFFIXES += .cc .cpp .cxx .C 45e48f47ddSSimon J. GerratyCXX_SUFFIXES := ${CXX_SUFFIXES:O:u} 46e48f47ddSSimon J. Gerraty 473cbdda60SSimon J. Gerraty# find the OS specifics 483cbdda60SSimon J. Gerraty.if defined(SYS_OS_MK) 493cbdda60SSimon J. Gerraty.include <${SYS_OS_MK}> 503cbdda60SSimon J. Gerraty.else 513cbdda60SSimon J. Gerraty_sys_mk = 523cbdda60SSimon J. Gerraty.for x in ${HOST_OSTYPE} ${HOST_TARGET} ${HOST_OS} ${MACHINE} Generic 533cbdda60SSimon J. Gerraty.if empty(_sys_mk) 543cbdda60SSimon J. Gerraty.-include <sys/$x.mk> 553cbdda60SSimon J. Gerraty_sys_mk := ${.MAKE.MAKEFILES:M*/$x.mk} 563cbdda60SSimon J. Gerraty.if !empty(_sys_mk) 573cbdda60SSimon J. Gerraty_sys_mk := sys/${_sys_mk:T} 583cbdda60SSimon J. Gerraty.endif 593cbdda60SSimon J. Gerraty.endif 603cbdda60SSimon J. Gerraty.if empty(_sys_mk) 613cbdda60SSimon J. Gerraty# might be an old style 623cbdda60SSimon J. Gerraty.-include <$x.sys.mk> 633cbdda60SSimon J. Gerraty_sys_mk := ${.MAKE.MAKEFILES:M*/$x.sys.mk:T} 643cbdda60SSimon J. Gerraty.endif 653cbdda60SSimon J. Gerraty.endfor 663cbdda60SSimon J. Gerraty 673cbdda60SSimon J. GerratySYS_OS_MK := ${_sys_mk} 683cbdda60SSimon J. Gerraty.export SYS_OS_MK 693cbdda60SSimon J. Gerraty.endif 703cbdda60SSimon J. Gerraty 71ac3446e9SSimon J. Gerraty# some options we need to know early 72ac3446e9SSimon J. GerratyOPTIONS_DEFAULT_NO += \ 73ac3446e9SSimon J. Gerraty DIRDEPS_BUILD \ 74*1ce939a7SSimon J. Gerraty DIRDEPS_CACHE 75ac3446e9SSimon J. Gerraty 76ac3446e9SSimon J. GerratyOPTIONS_DEFAULT_DEPENDENT += \ 77ac3446e9SSimon J. Gerraty AUTO_OBJ/DIRDEPS_BUILD \ 78*1ce939a7SSimon J. Gerraty META_MODE/DIRDEPS_BUILD \ 79ac3446e9SSimon J. Gerraty STAGING/DIRDEPS_BUILD \ 80ac3446e9SSimon J. Gerraty 81e48f47ddSSimon J. Gerraty.-include <options.mk> 82ac3446e9SSimon J. Gerraty 83ac3446e9SSimon J. Gerraty.if ${MK_DIRDEPS_BUILD:Uno} == "yes" 84ac3446e9SSimon J. GerratyMK_META_MODE = yes 85ac3446e9SSimon J. Gerraty.-include <meta.sys.mk> 86ac3446e9SSimon J. Gerraty.elif ${MK_META_MODE:Uno} == "yes" 87ac3446e9SSimon J. Gerraty.MAKE.MODE = meta verbose 88ac3446e9SSimon J. Gerraty.endif 89ac3446e9SSimon J. Gerraty# make sure we have a harmless value 90ac3446e9SSimon J. Gerraty.MAKE.MODE ?= normal 913cbdda60SSimon J. Gerraty 923cbdda60SSimon J. Gerraty# if you want objdirs make them automatic 93ac3446e9SSimon J. Gerraty# and do it early before we compute .PATH 94ac3446e9SSimon J. Gerraty.if ${MK_AUTO_OBJ:Uno} == "yes" || ${MKOBJDIRS:Uno} == "auto" 953cbdda60SSimon J. Gerraty.include <auto.obj.mk> 963cbdda60SSimon J. Gerraty.endif 973cbdda60SSimon J. Gerraty 983cbdda60SSimon J. Gerraty.if !empty(SRCTOP) 993cbdda60SSimon J. Gerraty.if ${.CURDIR} == ${SRCTOP} 1003cbdda60SSimon J. GerratyRELDIR = . 1013cbdda60SSimon J. Gerraty.elif ${.CURDIR:M${SRCTOP}/*} 1023cbdda60SSimon J. GerratyRELDIR := ${.CURDIR:S,${SRCTOP}/,,} 1033cbdda60SSimon J. Gerraty.endif 1043cbdda60SSimon J. Gerraty.endif 1053cbdda60SSimon J. Gerraty 1063cbdda60SSimon J. GerratyMACHINE_ARCH.host ?= ${_HOST_ARCH} 1073cbdda60SSimon J. GerratyMACHINE_ARCH.${MACHINE} ?= ${MACHINE} 1083cbdda60SSimon J. Gerraty.if empty(MACHINE_ARCH) 1093cbdda60SSimon J. GerratyMACHINE_ARCH = ${MACHINE_ARCH.${MACHINE}} 1103cbdda60SSimon J. Gerraty.endif 1113cbdda60SSimon J. Gerraty 1123cbdda60SSimon J. Gerraty.ifndef ROOT_GROUP 1133cbdda60SSimon J. GerratyROOT_GROUP != sed -n /:0:/s/:.*//p /etc/group 1143cbdda60SSimon J. Gerraty.export ROOT_GROUP 1153cbdda60SSimon J. Gerraty.endif 1163cbdda60SSimon J. Gerraty 1173cbdda60SSimon J. Gerratyunix ?= We run ${_HOST_OSNAME}. 1183cbdda60SSimon J. Gerraty 1193cbdda60SSimon J. Gerraty# A race condition in mkdir, means that it can bail if another 1203cbdda60SSimon J. Gerraty# process made a dir that mkdir expected to. 1213cbdda60SSimon J. Gerraty# We repeat the mkdir -p a number of times to try and work around this. 1223cbdda60SSimon J. Gerraty# We stop looping as soon as the dir exists. 1233cbdda60SSimon J. Gerraty# If we get to the end of the loop, a plain mkdir will issue an error. 1243cbdda60SSimon J. GerratyMkdirs= Mkdirs() { \ 1253cbdda60SSimon J. Gerraty for d in $$*; do \ 1263cbdda60SSimon J. Gerraty for i in 1 2 3 4 5 6; do \ 1273cbdda60SSimon J. Gerraty mkdir -p $$d; \ 1283cbdda60SSimon J. Gerraty test -d $$d && return 0; \ 1293cbdda60SSimon J. Gerraty done; \ 1303cbdda60SSimon J. Gerraty mkdir $$d || exit $$?; \ 1313cbdda60SSimon J. Gerraty done; } 1323cbdda60SSimon J. Gerraty 1333cbdda60SSimon J. Gerraty# this often helps with debugging 1343cbdda60SSimon J. Gerraty.SUFFIXES: .cpp-out 1353cbdda60SSimon J. Gerraty 1363cbdda60SSimon J. Gerraty.c.cpp-out: 1373cbdda60SSimon J. Gerraty @${COMPILE.c:N-c} -E ${.IMPSRC} | grep -v '^[ ]*$$' 1383cbdda60SSimon J. Gerraty 139e48f47ddSSimon J. Gerraty${CXX_SUFFIXES:%=%.cpp-out}: 1403cbdda60SSimon J. Gerraty @${COMPILE.cc:N-c} -E ${.IMPSRC} | grep -v '^[ ]*$$' 1413cbdda60SSimon J. Gerraty 142ac3446e9SSimon J. Gerraty# late customizations 143ac3446e9SSimon J. Gerraty.-include <local.sys.mk> 1443cbdda60SSimon J. Gerraty 1453cbdda60SSimon J. Gerraty# if .CURDIR is matched by any entry in DEBUG_MAKE_DIRS we 1463cbdda60SSimon J. Gerraty# will apply DEBUG_MAKE_FLAGS, now. 1473cbdda60SSimon J. Gerraty.if !empty(_DEBUG_MAKE_FLAGS) 1483cbdda60SSimon J. Gerraty.if ${_DEBUG_MAKE_DIRS:Uno:@x@${.CURDIR:M$x}@} != "" 1493cbdda60SSimon J. Gerraty.MAKEFLAGS: ${_DEBUG_MAKE_FLAGS} 1503cbdda60SSimon J. Gerraty.endif 1513cbdda60SSimon J. Gerraty.endif 152