#
# Commands for the build environment
#
-MIG = $(NEXT_ROOT)/usr/bin/mig
+##
+# Verbosity
+##
+ifeq ($(RC_XBS),YES)
+VERBOSE = YES
+else
+VERBOSE = NO
+endif
+ifeq ($(VERBOSE),YES)
+_v =
+_vstdout =
+else
+_v = @
+_vstdout = > /dev/null
+endif
-MD= /usr/bin/md
+ifeq ($(VERBOSE),YES)
+ XCRUN = /usr/bin/xcrun -verbose -log
+else
+ XCRUN = /usr/bin/xcrun
+endif
+SDKROOT ?= /
+HOST_SDKROOT ?= /
+HOST_SPARSE_SDKROOT ?= /
+
+# SDKROOT may be passed as a shorthand like "iphoneos.internal". We
+# must resolve these to a full path and override SDKROOT.
+
+ifeq ($(SDKROOT_RESOLVED),)
+ifeq ($(SDKROOT),/)
+export SDKROOT_RESOLVED := /
+else
+export SDKROOT_RESOLVED := $(shell xcodebuild -sdk $(SDKROOT) -version Path | head -1)
+endif
+endif
+override SDKROOT = $(SDKROOT_RESOLVED)
+
+ifeq ($(PLATFORM),)
+ export PLATFORM := $(shell xcodebuild -sdk $(SDKROOT) -version PlatformPath | head -1 | sed 's,^.*/\([^/]*\)\.platform$$,\1,')
+ ifeq ($(PLATFORM),)
+ export PLATFORM := MacOSX
+ endif
+endif
+
+ifeq ($(PLATFORM),iPhoneOS)
+ DEVELOPER_DIR ?= $(shell xcode-select -print-path)
+ export HOST_SPARSE_SDKROOT := $(DEVELOPER_DIR)/SDKs/iPhoneHostSideTools.sparse.sdk
+endif
+
+# CC/CXX get defined by make(1) by default, so we can't check them
+# against the empty string to see if they haven't been set
+ifeq ($(origin CC),default)
+ifneq ($(findstring iPhone,$(PLATFORM)),)
+ export CC := $(shell $(XCRUN) -sdk $(SDKROOT) -find clang)
+else
+ export CC := $(shell $(XCRUN) -sdk $(SDKROOT) -find clang)
+endif
+endif
+ifeq ($(origin CXX),default)
+ifneq ($(findstring iPhone,$(PLATFORM)),)
+ export CXX := $(shell $(XCRUN) -sdk $(SDKROOT) -find clang++)
+else
+ export CXX := $(shell $(XCRUN) -sdk $(SDKROOT) -find clang++)
+endif
+endif
+ifeq ($(MIG),)
+ export MIG := $(shell $(XCRUN) -sdk $(SDKROOT) -find mig)
+endif
+ifeq ($(MIGCC),)
+ export MIGCC := $(CC)
+endif
+ifeq ($(STRIP),)
+ export STRIP := $(shell $(XCRUN) -sdk $(SDKROOT) -find strip)
+endif
+ifeq ($(LIPO),)
+ export LIPO := $(shell $(XCRUN) -sdk $(SDKROOT) -find lipo)
+endif
+ifeq ($(LIBTOOL),)
+ export LIBTOOL := $(shell $(XCRUN) -sdk $(SDKROOT) -find libtool)
+endif
+ifeq ($(NM),)
+ export NM := $(shell $(XCRUN) -sdk $(SDKROOT) -find nm)
+endif
+ifeq ($(UNIFDEF),)
+ export UNIFDEF := $(shell $(XCRUN) -sdk $(SDKROOT) -find unifdef)
+endif
+ifeq ($(DSYMUTIL),)
+ export DSYMUTIL := $(shell $(XCRUN) -sdk $(SDKROOT) -find dsymutil)
+endif
+ifeq ($(CTFCONVERT),)
+ export CTFCONVERT := $(shell $(XCRUN) -sdk $(SDKROOT) -find ctfconvert)
+endif
+ifeq ($(CTFMERGE),)
+ export CTFMERGE := $(shell $(XCRUN) -sdk $(SDKROOT) -find ctfmerge)
+endif
+ifeq ($(CTFSCRUB),)
+ export CTFSCRUB := $(shell $(XCRUN) -sdk $(SDKROOT) -find ctfdump) -r
+endif
+ifeq ($(NMEDIT),)
+ export NMEDIT := $(shell $(XCRUN) -sdk $(SDKROOT) -find nmedit)
+endif
+
+# Platform-specific tools
+ifneq ($(findstring iPhone,$(PRODUCT)),)
+ifeq ($(EMBEDDED_DEVICE_MAP),)
+ export EMBEDDED_DEVICE_MAP := $(shell $(XCRUN) -sdk $(SDKROOT) -find embedded_device_map)
+endif
+ifeq ($(IPHONEOS_OPTIMIZE),)
+ export IPHONEOS_OPTIMIZE := $(shell $(XCRUN) -sdk $(SDKROOT) -find iphoneos-optimize)
+endif
+endif
+
+# Scripts or tools we build ourselves
+SEG_HACK := $(OBJROOT)/SETUP/setsegname/setsegname
+KEXT_CREATE_SYMBOL_SET := $(OBJROOT)/SETUP/kextsymboltool/kextsymboltool
+DECOMMENT := $(OBJROOT)/SETUP/decomment/decomment
+NEWVERS = $(SRCROOT)/config/newvers.pl
+MD := $(OBJROOT)/SETUP/md/md
+
+# Standard BSD tools
RM = /bin/rm -f
CP = /bin/cp
-LN = /bin/ln -s
+MV = /bin/mv
+LN = /bin/ln -fs
CAT = /bin/cat
MKDIR = /bin/mkdir -p
-
+FIND = /usr/bin/find
+XARGS = /usr/bin/xargs
+INSTALL = /usr/bin/install
TAR = /usr/bin/gnutar
-STRIP = /usr/bin/strip
-LIPO = /usr/bin/lipo
-
BASENAME = /usr/bin/basename
-RELPATH = $(NEXT_ROOT)/usr/local/bin/relpath
-SEG_HACK = $(NEXT_ROOT)/usr/local/bin/seg_hack
+TR = /usr/bin/tr
+
+# Platform-specific tools
+ifeq (iPhoneOS,$(PLATFORM))
+ifeq ($(EMBEDDED_DEVICE_MAP),)
+ export EMBEDDED_DEVICE_MAP := $(shell $(XCRUN) -sdk $(SDKROOT) -find embedded_device_map || echo /usr/bin/true)
+endif
+ifeq ($(IPHONEOS_OPTIMIZE),)
+ export IPHONEOS_OPTIMIZE := $(shell $(XCRUN) -sdk $(SDKROOT) -find iphoneos-optimize || echo /usr/bin/true)
+endif
+endif
-UNIFDEF = /usr/bin/unifdef
-DECOMMENT = /usr/local/bin/decomment
+CTFINSERT = $(XCRUN) -sdk $(SDKROOT) ctf_insert
+
+#
+# Command to generate host binaries. Intentionally not
+# $(CC), which controls the target compiler
+#
+ifeq ($(HOST_CC),)
+ export HOST_CC := $(shell $(XCRUN) -sdk $(HOST_SDKROOT) -find cc)
+endif
+ifeq ($(HOST_FLEX),)
+ export HOST_FLEX := $(shell $(XCRUN) -sdk $(HOST_SDKROOT) -find flex)
+endif
+ifeq ($(HOST_BISON),)
+ export HOST_BISON := $(shell $(XCRUN) -sdk $(HOST_SDKROOT) -find bison)
+endif
+ifeq ($(HOST_CODESIGN),)
+ export HOST_CODESIGN := $(shell $(XCRUN) -sdk $(HOST_SDKROOT) -find codesign)
+endif
+# vim: set ft=make: