include $(TOP)/mk/subdirs.mk # calculate commit distance and store it in a file so that we don't have to re-calculate it every time make is executed. -include $(TOP)/Make.config.inc $(TOP)/Make.config.inc: $(TOP)/Make.config @rm -f $@ @printf "IOS_COMMIT_DISTANCE:=$(shell LANG=C; export LANG && git log `git blame $(TOP)/Make.config HEAD | grep IOS_PACKAGE_VERSION= | sed 's/ .*//' `..HEAD --oneline | wc -l | sed 's/ //g')\n" >> $@ @printf "MAC_COMMIT_DISTANCE:=$(shell LANG=C; export LANG && git log `git blame $(TOP)/Make.config HEAD | grep MAC_PACKAGE_VERSION= | sed 's/ .*//' `..HEAD --oneline | wc -l | sed 's/ //g')\n" >> $@ @if which ccache > /dev/null 2>&1; then printf "ENABLE_CCACHE=1\nexport CCACHE_BASEDIR=$(abspath $(TOP)/..)\n" >> $@; echo "Found ccache on the system, enabling it"; fi PACKAGE_HEAD_REV=$(shell git rev-parse HEAD) # # A release branch requires updating: # # PACKAGE_HEAD_BRANCH (set to the release branch name, this shows up in the IDE's version information, as well as mtouch/mmp --version) # IOS_PACKAGE_VERSION (major/minor #) # MAC_PACKAGE_VERSION (major/minor #) # (and updating the same on master as well, to next version) # # # PACKAGE_HEAD_BRANCH determines the branch name (for wrench builds) that shows up in the # IDE's version information, as well as mtouch/mmp --version and the AssemblyInformationalVersion # for product assemblies. # # For developer builds, we check with git which branch is the current one (we can't do that # on wrench, because wrench technically builds hashes, not branches) # # PACKAGE_HEAD_BRANCH=master ifeq ($(BUILD_REVISION),) CURRENT_BRANCH:=$(shell git rev-parse --abbrev-ref HEAD) else CURRENT_BRANCH:=$(PACKAGE_HEAD_BRANCH) endif IOS_PRODUCT=Xamarin.iOS IOS_PACKAGE_NAME=Xamarin.iOS IOS_PACKAGE_NAME_LOWER=$(shell echo $(IOS_PACKAGE_NAME) | tr "[:upper:]" "[:lower:]") # NEVER customize IOS_PACKAGE_VERSION itself, other parts (mtouch, web updater) are using the IOS_PACKAGE_VERSION_* variables IOS_PACKAGE_VERSION=10.5.0.$(IOS_COMMIT_DISTANCE) IOS_PACKAGE_VERSION_MAJOR=$(word 1, $(subst ., ,$(IOS_PACKAGE_VERSION))) IOS_PACKAGE_VERSION_MINOR=$(word 2, $(subst ., ,$(IOS_PACKAGE_VERSION))) IOS_PACKAGE_VERSION_REV=$(word 3, $(subst ., ,$(IOS_PACKAGE_VERSION))) IOS_PACKAGE_VERSION_BUILD=$(IOS_COMMIT_DISTANCE) IOS_PACKAGE_UPDATE_ID=$(shell printf "2%02d%02d%02d%03d" $(IOS_PACKAGE_VERSION_MAJOR) $(IOS_PACKAGE_VERSION_MINOR) $(IOS_PACKAGE_VERSION_REV) $(IOS_PACKAGE_VERSION_BUILD)) # Xcode 8.2 XCODE_VERSION=8.2 XCODE_URL=http://xamarin-storage/bot-provisioning/Xcode_8.2.xip XCODE_DEVELOPER_ROOT=/Applications/Xcode82.app/Contents/Developer # Minimum Mono version MIN_MONO_VERSION=4.8.0.269 MAX_MONO_VERSION=4.8.99 MIN_MONO_URL=http://bosstoragemirror.blob.core.windows.net/wrench/mono-4.8.0/e5/e51aa0a7043a8185e264d6332ac7bc1f8f87cd39/MonoFramework-MDK-4.8.0.269.macos10.xamarin.universal.pkg # Minimum Xamarin Studio version MIN_XAMARIN_STUDIO_URL=https://files.xamarin.com/~rolf/XamarinStudio-6.1.0.4373.dmg MIN_XAMARIN_STUDIO_VERSION=6.1.0.4373 MAX_XAMARIN_STUDIO_VERSION=6.3.0.9999 # Minimum CMake version MIN_CMAKE_URL=https://cmake.org/files/v3.6/cmake-3.6.2-Darwin-x86_64.dmg MIN_CMAKE_VERSION=2.8.8 # Minimum OSX versions MIN_OSX_BUILD_VERSION=10.11 MIN_OSX_VERSION_FOR_IOS=10.11 MIN_OSX_VERSION_FOR_MAC=10.11 IOS_SDK_VERSION=10.2 OSX_SDK_VERSION=10.12 WATCH_SDK_VERSION=3.1 TVOS_SDK_VERSION=10.1 MIN_IOS_SDK_VERSION=6.0 MIN_OSX_SDK_VERSION=10.7 MIN_WATCHOS_SDK_VERSION=2.0 MIN_WATCH_OS_VERSION=1.0 MIN_TVOS_SDK_VERSION=9.0 INCLUDE_IOS=1 INCLUDE_MAC=1 INCLUDE_WATCH=1 INCLUDE_TVOS=1 INCLUDE_DEVICE=1 -include $(TOP)/Make.config.local -include $(TOP)/configure.inc ifdef ENABLE_CCACHE # Note the space at the end the line CCACHE=ccache endif #DISABLE_APPLETLS=1 ifdef DISABLE_APPLETLS APPLETLS_DEFINES = -d:XAMARIN_NO_TLS else APPLETLS_DEFINES = -d:XAMARIN_APPLETLS endif XCODE_MAC_SDKROOT=$(XCODE_DEVELOPER_ROOT)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_SDK_VERSION).sdk MAC_CC=$(CCACHE)$(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -isysroot $(XCODE_MAC_SDKROOT) -mmacosx-version-min=$(MIN_OSX_VERSION_FOR_MAC) MAC_CXX=$(CCACHE)$(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -isysroot $(XCODE_MAC_SDKROOT) -mmacosx-version-min=$(MIN_OSX_VERSION_FOR_MAC) # This is the temporary directory where the various builds are installed BUILD_DESTDIR=$(abspath $(TOP)/builds/install) MAC_INSTALL_VERSION ?= git IOS_INSTALL_VERSION ?= git IOS_DESTDIR ?= $(TOP)/_ios-build IOS_TARGETDIR ?= $(IOS_DESTDIR) USE_SOURCE_LINKS ?= 1 IOS_FRAMEWORK_DIR=/Library/Frameworks/Xamarin.iOS.framework # Prefix used to install monotouch ifndef MONOTOUCH_PREFIX MONOTOUCH_PREFIX=$(IOS_FRAMEWORK_DIR)/Versions/$(IOS_INSTALL_VERSION) endif XCODE_CC=$(CCACHE)$(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang XCODE_CXX=$(CCACHE)$(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ # make sure we have full paths. The patsubst function is to remove any trailing slash (this may leave the variable empty) override IOS_DESTDIR := $(patsubst %/,%,$(abspath $(IOS_DESTDIR))) override IOS_TARGETDIR := $(patsubst %/,%,$(abspath $(IOS_TARGETDIR))) MONOTOUCH_PREFIX := $(abspath $(MONOTOUCH_PREFIX)) MONOTOUCH_MONO_PATH?=$(abspath $(MONO_PATH)/mcs/class/lib/monotouch/) IOS_PACKAGE_FILENAME=$(IOS_PACKAGE_NAME_LOWER)-$(IOS_PACKAGE_VERSION).pkg IOS_PACKAGE_UTI=com.xamarin.$(IOS_PACKAGE_NAME_LOWER).pkg IOS_COMMON_DEFINES=-DMONOTOUCH IOS_CC=$(XCODE_CC) IOS_CXX=$(XCODE_CXX) SIMULATOR_BIN_PATH=$(XCODE_DEVELOPER_ROOT)/Platforms/iPhoneSimulator.platform/Developer/usr/bin SIMULATOR_CC=$(IOS_CC) CFLAGS= -Wall -fms-extensions -Wno-format-security ifdef ENABLE_BITCODE_ON_IOS BITCODE_CFLAGS=-fembed-bitcode-marker # Overwrite the default MIN_IOS_SDK_VERSION=9.0 endif SIMULATOR_SDK=$(XCODE_DEVELOPER_ROOT)/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator$(IOS_SDK_VERSION).sdk OBJC_CFLAGS=-ObjC++ -std=c++0x -fno-exceptions COMMON_SIMULATOR_CFLAGS=-mios-simulator-version-min=$(MIN_IOS_SDK_VERSION) -isysroot $(SIMULATOR_SDK) $(CFLAGS) -g $(IOS_COMMON_DEFINES) SIMULATOR86_CFLAGS=$(COMMON_SIMULATOR_CFLAGS) -arch i386 SIMULATOR64_CFLAGS=$(COMMON_SIMULATOR_CFLAGS) -arch x86_64 COMMON_SIMULATOR_OBJC_CFLAGS=-fobjc-abi-version=2 -fobjc-legacy-dispatch $(CFLAGS) $(OBJC_CFLAGS) SIMULATOR86_OBJC_CFLAGS=$(COMMON_SIMULATOR_OBJC_CFLAGS) $(SIMULATOR86_CFLAGS) SIMULATOR64_OBJC_CFLAGS=$(COMMON_SIMULATOR_OBJC_CFLAGS) $(SIMULATOR64_CFLAGS) MONOTOUCH_SIMULATOR_SDK=$(MONOTOUCH_PREFIX)/SDKs/MonoTouch.iphonesimulator.sdk DEVICE_BIN_PATH=$(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin DEVICE_CC=$(IOS_CC) DEVICE_CXX=$(IOS_CXX) IOS_CSC=$(SYSTEM_MCS) -nostdlib -r:mscorlib.dll -lib:$(MONOTOUCH_MONO_PATH) DEVICE_OBJC_CFLAGS=$(OBJC_CFLAGS) $(BITCODE_CFLAGS) DEVICE_SDK=$(XCODE_DEVELOPER_ROOT)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS$(IOS_SDK_VERSION).sdk DEVICE7_CFLAGS= -arch armv7 -mno-thumb -miphoneos-version-min=$(MIN_IOS_SDK_VERSION) -isysroot $(DEVICE_SDK) $(CFLAGS) $(IOS_COMMON_DEFINES) DEVICE7S_CFLAGS=-arch armv7s -mno-thumb -miphoneos-version-min=$(MIN_IOS_SDK_VERSION) -isysroot $(DEVICE_SDK) $(CFLAGS) $(IOS_COMMON_DEFINES) DEVICE64_CFLAGS=-arch arm64 -miphoneos-version-min=7.0 -isysroot $(DEVICE_SDK) $(CFLAGS) $(IOS_COMMON_DEFINES) DEVICE7_OBJC_CFLAGS =$(DEVICE7_CFLAGS) $(DEVICE_OBJC_CFLAGS) DEVICE7S_OBJC_CFLAGS=$(DEVICE7S_CFLAGS) $(DEVICE_OBJC_CFLAGS) DEVICE64_OBJC_CFLAGS=$(DEVICE64_CFLAGS) $(DEVICE_OBJC_CFLAGS) MONOTOUCH_DEVICE_SDK=$(MONOTOUCH_PREFIX)/SDKs/MonoTouch.iphoneos.sdk # iOS XAMARIN_IOSSIMULATOR_SDK = $(MONOTOUCH_SIMULATOR_SDK) XAMARIN_IPHONEOS_SDK = $(MONOTOUCH_DEVICE_SDK) # WatchOS XAMARIN_WATCHSIMULATOR_SDK = $(MONOTOUCH_PREFIX)/SDKs/Xamarin.WatchSimulator.sdk XAMARIN_WATCHOS_SDK = $(MONOTOUCH_PREFIX)/SDKs/Xamarin.WatchOS.sdk SIMULATORWATCH_SDK = $(XCODE_DEVELOPER_ROOT)/Platforms/WatchSimulator.platform/Developer/SDKs/WatchSimulator$(WATCH_SDK_VERSION).sdk SIMULATORWATCH_CFLAGS = -arch i386 -mwatchos-simulator-version-min=$(MIN_WATCHOS_SDK_VERSION) -isysroot $(SIMULATORWATCH_SDK) $(CFLAGS) -g $(IOS_COMMON_DEFINES) SIMULATORWATCH_OBJC_CFLAGS = $(SIMULATORWATCH_CFLAGS) $(COMMON_SIMULATOR_OBJC_CFLAGS) DEVICEWATCH_SDK = $(XCODE_DEVELOPER_ROOT)/Platforms/WatchOS.platform/Developer/SDKs/WatchOS$(WATCH_SDK_VERSION).sdk DEVICEWATCH_CFLAGS = -arch armv7k -mwatchos-version-min=$(MIN_WATCHOS_SDK_VERSION) -isysroot $(DEVICEWATCH_SDK) $(CFLAGS) -fembed-bitcode $(IOS_COMMON_DEFINES) DEVICEWATCH_OBJC_CFLAGS = $(DEVICEWATCH_CFLAGS) $(DEVICE_OBJC_CFLAGS) # TVOS XAMARIN_TVSIMULATOR_SDK = $(MONOTOUCH_PREFIX)/SDKs/Xamarin.AppleTVSimulator.sdk XAMARIN_TVOS_SDK = $(MONOTOUCH_PREFIX)/SDKs/Xamarin.AppleTVOS.sdk SIMULATORTV_SDK = $(XCODE_DEVELOPER_ROOT)/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator$(TVOS_SDK_VERSION).sdk SIMULATORTV_CFLAGS = -arch x86_64 -mtvos-simulator-version-min=$(MIN_TVOS_SDK_VERSION) -isysroot $(SIMULATORTV_SDK) $(CFLAGS) -g $(IOS_COMMON_DEFINES) SIMULATORTV_OBJC_CFLAGS = $(SIMULATORTV_CFLAGS) $(COMMON_SIMULATOR_OBJC_CFLAGS) DEVICETV_SDK = $(XCODE_DEVELOPER_ROOT)/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS$(TVOS_SDK_VERSION).sdk DEVICETV_CFLAGS = -arch arm64 -mtvos-version-min=$(MIN_TVOS_SDK_VERSION) -isysroot $(DEVICETV_SDK) $(CFLAGS) -fembed-bitcode $(IOS_COMMON_DEFINES) DEVICETV_OBJC_CFLAGS = $(DEVICETV_CFLAGS) $(DEVICE_OBJC_CFLAGS) # paths to the modules we depend on, as variables, so people can put # things in other places if they absolutely must. MONO_PATH=$(TOP)/external/mono WATCH_MONO_PATH=$(TOP)/external/mono LLVM_PATH=$(TOP)/external/llvm FSHARP_PATH=$(TOP)/external/fsharp MONOTOUCH_DIALOG_PATH=$(TOP)/external/MonoTouch.Dialog TOUCH_UNIT_PATH=$(TOP)/external/Touch.Unit NUNITLITE_PATH=$(TOP)/external/mono/external/nunit-lite OPENTK_PATH=$(TOP)/external/opentk XAMARIN_MACDEV_PATH=$(TOP)/external/Xamarin.MacDev GUI_UNIT_PATH=$(TOP)/external/guiunit MACCORE_PATH=$(TOP)/../maccore MONO_PREFIX ?= /Library/Frameworks/Mono.framework/Versions/Current SYSTEM_MCS=$(MONO_PREFIX)/bin/mcs SYSTEM_SN=$(MONO_PREFIX)/bin/sn SYSTEM_MONO=$(MONO_PREFIX)/bin/mono SYSTEM_MKBUNDLE=$(MONO_PREFIX)/bin/mkbundle SYSTEM_XBUILD=$(MONO_PREFIX)/bin/xbuild SYSTEM_RESGEN=$(MONO_PREFIX)/bin/resgen PKG_CONFIG=$(MONO_PREFIX)/bin/pkg-config MAC_PRODUCT=Xamarin.Mac MAC_PACKAGE_NAME=xamarin.mac MAC_PACKAGE_NAME_LOWER=$(shell echo $(MAC_PACKAGE_NAME) | tr "[:upper:]" "[:lower:]") MAC_PACKAGE_VERSION=3.1.0.$(MAC_COMMIT_DISTANCE) MAC_PACKAGE_VERSION_MAJOR=$(word 1, $(subst ., ,$(MAC_PACKAGE_VERSION))) MAC_PACKAGE_VERSION_MINOR=$(word 2, $(subst ., ,$(MAC_PACKAGE_VERSION))) MAC_PACKAGE_VERSION_REV=$(word 3, $(subst ., ,$(MAC_PACKAGE_VERSION))) MAC_PACKAGE_VERSION_BUILD=$(word 4, $(subst ., ,$(MAC_PACKAGE_VERSION))) MAC_PACKAGE_VERSION_MAJOR_MINOR=$(MAC_PACKAGE_VERSION_MAJOR).$(MAC_PACKAGE_VERSION_MINOR) MAC_PACKAGE_UPDATE_ID=$(shell echo $(subst ., ,$(MAC_PACKAGE_VERSION).$(MAC_PACKAGE_VERSION_BUILD)) | awk '{printf "2%02d%02d%02d%03d",$$1,$$2,$$3,$$4}') MAC_PACKAGE_TITLE=Xamarin $(MAC_PACKAGE_NAME) $(MAC_PACKAGE_VERSION) MAC_DESTDIR ?= $(TOP)/_mac-build MAC_TARGETDIR ?= $(MAC_DESTDIR) # make sure we have full paths. The patsubst function is to remove any trailing slash (this may leave the variable empty) override MAC_DESTDIR := $(patsubst %/,%,$(abspath $(MAC_DESTDIR))) override MAC_TARGETDIR := $(patsubst %/,%,$(abspath $(MAC_TARGETDIR))) MAC_FRAMEWORK_DIR = /Library/Frameworks/Xamarin.Mac.framework MAC_FRAMEWORK_VERSIONED_DIR = $(MAC_FRAMEWORK_DIR)/Versions/$(MAC_PACKAGE_VERSION) MAC_FRAMEWORK_CURRENT_DIR = $(MAC_FRAMEWORK_DIR)/Versions/$(MAC_INSTALL_VERSION) MAC_PACKAGE_FILENAME=$(MAC_PACKAGE_NAME_LOWER)-$(MAC_PACKAGE_VERSION).pkg MAC_PACKAGE_DMG_FILENAME=$(MAC_PACKAGE_NAME_LOWER)-$(MAC_PACKAGE_VERSION).dmg MAC_PACKAGE_DMG_DIRNAME="$(MAC_PACKAGE_TITLE)" MAC_PACKAGE_UTI=com.$(MAC_PACKAGE_NAME_LOWER).pkg MAC_PACKAGE_INSTALL_LOCATION=$(MAC_FRAMEWORK_VERSIONED_DIR) MDB_REBASE_EXE = $(abspath $(MONO_PATH))/mcs/class/lib/net_4_x/mdbrebase.exe MDB_REBASE = MONO_PATH=$(dir $(MDB_REBASE_EXE)) $(TOP)/builds/install/tools64/bin/mono --debug $(MDB_REBASE_EXE) TT = $(SYSTEM_MONO) "/Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/AddIns/MonoDevelop.TextTemplating/TextTransform.exe" PRODUCT_KEY_PATH?=$(TOP)/product.snk include $(TOP)/mk/quiet.mk MDTOOL?=DYLD_FALLBACK_LIBRARY_PATH=$(HOME)/lib:/usr/local/lib:/lib:/usr/lib:/Library/Frameworks/Mono.framework/Versions/Current/lib $(SYSTEM_MONO) "/Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/bin/mdtool.exe" $(MDTOOL_VERBOSITY) ifdef ENABLE_XAMARIN -include $(MACCORE_PATH)/Make.config endif JENKINS_RESULTS_DIRECTORY ?= $(abspath $(TOP)/jenkins-results) .SUFFIXES: MAKEFLAGS += --no-builtin-rules