1 # Code 'borrowed' from xnu/tools/tests Makefile structure.
3 # This provides a somewhat flexible framework (albeit, not perfect)
4 # for building tests for multiple platforms using the correct toolset
6 # Please contact: nwertman@apple.com with any questions
12 SRCDIR?=$(shell /bin/pwd)
18 OBJDIR?=$(SRCDIR)/build/obj
22 BUILDDIR?=$(DSTROOT)/AppleInternal/CoreOS/tests/$(PROJECT)
24 BUILDDIR?=$(SRCDIR)/build/dst
28 # Common definitions for test directories
31 XCRUN := /usr/bin/xcrun
32 SDKROOT ?= macosx.internal
34 # SDKROOT may be passed as a shorthand like "iphoneos.internal". We
35 # must resolve these to a full path and override SDKROOT.
37 SDKROOT_RESOLVED := $(shell $(XCRUN) -sdk $(SDKROOT) -show-sdk-path)
38 ifeq ($(strip $(SDKROOT)_$(SDKROOT_RESOLVED)),/_)
41 override SDKROOT = $(SDKROOT_RESOLVED)
43 SDKVERSION := $(shell $(XCRUN) -sdk $(SDKROOT) -show-sdk-version)
45 PLATFORMPATH := $(shell $(XCRUN) -sdk $(SDKROOT) -show-sdk-platform-path)
46 PLATFORM := $(shell echo $(PLATFORMPATH) | sed 's,^.*/\([^/]*\)\.platform$$,\1,')
48 ifeq ($(PLATFORM),watchOS)
52 SUPPORTED_EMBEDDED_PLATFORMS := iPhoneOS iPhoneOSNano tvOS AppleTVOS WatchOS
53 Embedded = $(if $(filter $(SUPPORTED_EMBEDDED_PLATFORMS),$(PLATFORM)),YES,NO)
56 # Deployment target flag
58 ifeq ($(PLATFORM),MacOSX)
59 DEPLOYMENT_TARGET_FLAGS = -mmacosx-version-min=$(SDKVERSION)
60 else ifeq ($(PLATFORM),WatchOS)
61 DEPLOYMENT_TARGET_FLAGS = -mwatchos-version-min=$(SDKVERSION)
62 else ifeq ($(PLATFORM),tvOS)
63 DEPLOYMENT_TARGET_FLAGS = -mtvos-version-min=$(SDKVERSION)
64 else ifeq ($(PLATFORM),AppleTVOS)
65 DEPLOYMENT_TARGET_FLAGS = -mtvos-version-min=$(SDKVERSION)
66 else ifneq ($(filter $(SUPPORTED_EMBEDDED_PLATFORMS),$(PLATFORM)),)
67 DEPLOYMENT_TARGET_FLAGS = -miphoneos-version-min=$(SDKVERSION)
68 else ifneq ($(filter $(SUPPORTED_SIMULATOR_PLATFORMS),$(PLATFORM)),)
69 DEPLOYMENT_TARGET_FLAGS =
71 DEPLOYMENT_TARGET_FLAGS =
74 DEPLOYMENT_TARGET_DEFINES = -DPLATFORM_$(PLATFORM)
78 # setup the TARGETSDK and SDKROOT variables
80 SDKROOTPATH:=$(SDKROOT)
82 # make sure we have a build directory
83 $(shell [ -d "$(BUILDDIR)" ] || mkdir -p $(BUILDDIR))
85 #arch configs if not provided
87 ARCH_CONFIGS:=$(RC_ARCHS)
90 ifeq ($(ARCH_CONFIGS),)
92 ifeq ($(Embedded),YES)
93 ARCH_CONFIGS:=$(shell $(XCRUN) -sdk $(TARGETSDK) otool -f -v $(SDKROOT)/usr/lib/system/libsystem_kernel.dylib | grep architecture | cut -d' ' -f 2 | tr '\n' ' ')
95 ARCH_CONFIGS:=x86_64 i386
99 ARCH_CONFIGS_32:=$(filter-out %64,$(ARCH_CONFIGS))
100 ARCH_CONFIGS_64:=$(filter %64,$(ARCH_CONFIGS))
102 ARCH_FLAGS:=$(foreach argarch,$(ARCH_CONFIGS),-arch $(argarch) )
105 #setup the compiler flags.
106 CC:=$(shell $(XCRUN) -sdk "$(TARGETSDK)" -find clang)
107 MIG:=$(shell $(XCRUN) -sdk "$(TARGETSDK)" -find mig)
108 CODESIGN:=$(shell $(XCRUN) -sdk "$(TARGETSDK)" -find codesign)
109 CODESIGN_ALLOCATE:=$(shell $(XCRUN) -sdk "$(TARGETSDK)" -find codesign_allocate)
110 PLUTIL:=$(shell $(XCRUN) -sdk "$(TARGETSDK)" -find plutil)
112 CFLAGS=-I$(BUILDDIR) -I. -isysroot $(SDKROOTPATH) $(ARCH_FLAGS)
114 ifeq ($(Embedded),YES)
116 CONFIG_EMBED_DEFINE:= -DCONFIG_EMBEDDED=1
119 CONFIG_EMBED_DEFINE:=
122 MORECFLAGS=$(CONFIG_EMBED_DEFINE)