2015-06-16 15:14:53 +00:00
# We don't want xcodebuild to run in parallel
.NOTPARALLEL :
# Functions
targets = $( foreach target, $( EXPORT_SUBTARGETS) , $( target) -$( strip $( 1) ) )
toupper = $( shell echo $1 | tr '[:lower:]' '[:upper:]' )
tolower = $( shell echo $1 | tr '[:upper:]' '[:lower:]' )
basesdk = $( shell echo $1 | sed 's/[0-9.]*$$//' )
# Explicit comma variable
, : = ,
# Default targets
first : build
all : build_all
.DEFAULT_GOAL = first
# Top level targets
build : build_first
clean : clean_first
install : install_first
check : check_first
distclean : clean_all
$(EXPORT_SUBTARGETS) : % : %-build
# Generic targets
%_first : $( firstword $ ( call targets , %) ) ;
%_all : $( call targets , %) ;
# Actions
%-build : ACTION = build
%-build : xcodebuild -% ;
%-clean : ACTION = clean
%-clean : xcodebuild -% ;
%-install : ACTION = install
%-install : xcodebuild -% ;
2015-11-26 13:19:55 +00:00
# iOS Simulator doesn't support archiving
%-iphonesimulator-install : ACTION = build
iphonesimulator-install : ACTION = build
2015-06-16 15:14:53 +00:00
# Limit check to a single configuration
%-iphoneos-check : check -iphoneos ;
%-iphonesimulator-check : check -iphonesimulator ;
# SDK
%-iphoneos : SDK = iphoneos
%-iphonesimulator : SDK = iphonesimulator
# Configuration
release-% : CONFIGURATION = Release
debug-% : CONFIGURATION = Debug
2016-07-25 12:02:43 +00:00
SPECDIR := $( dir $( lastword $( MAKEFILE_LIST) ) )
2015-06-16 15:14:53 +00:00
# Test and build (device) destinations
i f n e q ( $( filter check %,$ ( MAKECMDGOALS ) ) , )
ifeq ( $( DEVICES) ,)
$( info Enumerating test destinations ( you may override this by setting DEVICES explicitly) , please wait...)
DESTINATIONS_INCLUDE = /tmp/ios_destinations.mk
$( shell $( SPECDIR) /ios_destinations.sh $( TARGET) > $( DESTINATIONS_INCLUDE) )
include $( DESTINATIONS_INCLUDE)
endif
e n d i f
%-iphonesimulator : DEVICES = $( firstword $ ( IPHONESIMULATOR_DEVICES ) )
%-iphoneos : DEVICES = $( IPHONEOS_DEVICES )
IPHONEOS_GENERIC_DESTINATION := "generic/platform=iOS"
2016-07-25 12:02:43 +00:00
IPHONESIMULATOR_GENERIC_DESTINATION := " id= $( shell $( SPECDIR) /ios_devices.pl "iPhone|iPad" "NOT unavailable" | tail -n 1) "
2015-06-16 15:14:53 +00:00
DESTINATION = $( if $( DESTINATION_ID) ," id= $( DESTINATION_ID) " ,$( value $( call toupper,$( call basesdk,$( SDK) ) ) _GENERIC_DESTINATION) )
2016-09-13 17:37:49 +00:00
XCODE_VERSION_MAJOR := $( shell xcodebuild -version | grep Xcode | sed -e 's/Xcode //' | sed -e 's/\..*//' )
i f e q ( $( shell test $ ( XCODE_VERSION_MAJOR ) -gt 7; echo $ $ ?) , 0 )
XCODEBUILD_FLAGS += $( shell echo " $( MAKEFLAGS) " | sed -e 's/\([^ ]*\).*/\1/' | grep -qv 's' || echo -quiet)
e n d i f
2015-06-16 15:14:53 +00:00
# Xcodebuild
DESTINATION_MESSAGE = " Running $( call tolower,$( CONFIGURATION) ) $( ACTION) \
on '$(DESTINATION_NAME)' ( $( DESTINATION_ID) ) $( if $( DESTINATION_OS) ,$( ,) $( DESTINATION_PLATFORM) $( DESTINATION_OS) ,) "
xcodebuild-% :
@$( if $( DESTINATION_NAME) , echo $( DESTINATION_MESSAGE) ,)
2016-09-13 17:37:49 +00:00
xcodebuild $( ACTION) $( XCODEBUILD_FLAGS) -scheme $( TARGET) $( if $( SDK) , -sdk $( SDK) ,) $( if $( CONFIGURATION) , -configuration $( CONFIGURATION) ,) $( if $( DESTINATION) , -destination $( DESTINATION) -destination-timeout 1,)
2015-06-16 15:14:53 +00:00
xcodebuild-check-device_% : DESTINATION_ID =$( lastword $ ( subst _ , ,$ @) )
# Special check target (requires SECONDEXPANSION due to devices)
.SECONDEXPANSION :
check-% : ACTION = test
check-% : $$( foreach device , $ $ ( DEVICES ) , xcodebuild -check -device_ $ $ ( device ) ) ;
@echo $( if $^, Ran $( call tolower,$( CONFIGURATION) ) tests on $( words $^) $( SDK) destination\( s\) : $( DEVICES) , No compatible test devices found for \' $( SDK) \' SDK && false )
# Determined by device
check-% : SDK =
# Default to debug for testing
check-% : CONFIGURATION = Debug