611 строки
34 KiB
Plaintext
611 строки
34 KiB
Plaintext
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 $(TOP)/mk/mono.mk
|
|
@rm -f $@
|
|
@printf "IOS_COMMIT_DISTANCE:=$(shell LANG=C; export LANG && git --git-dir $(TOP)/.git log `git --git-dir $(TOP)/.git blame -- ./Make.versions 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 --git-dir $(TOP)/.git log `git --git-dir $(TOP)/.git blame -- ./Make.versions HEAD | grep MAC_PACKAGE_VERSION= | sed 's/ .*//' `..HEAD --oneline | wc -l | sed 's/ //g')\n" >> $@
|
|
@printf "IOS_NUGET_COMMIT_DISTANCE:=$(shell LANG=C; export LANG; git --git-dir $(TOP)/.git log `git --git-dir $(TOP)/.git blame -- ./Make.versions HEAD | grep IOS_NUGET_VERSION= | sed 's/ .*//' `..HEAD --oneline | wc -l | sed 's/ //g')\n" >> $@
|
|
@printf "TVOS_NUGET_COMMIT_DISTANCE:=$(shell LANG=C; export LANG; git --git-dir $(TOP)/.git log `git --git-dir $(TOP)/.git blame -- ./Make.versions HEAD | grep TVOS_NUGET_VERSION= | sed 's/ .*//' `..HEAD --oneline | wc -l | sed 's/ //g')\n" >> $@
|
|
@printf "WATCHOS_NUGET_COMMIT_DISTANCE:=$(shell LANG=C; export LANG; git --git-dir $(TOP)/.git log `git --git-dir $(TOP)/.git blame -- ./Make.versions HEAD | grep WATCHOS_NUGET_VERSION= | sed 's/ .*//' `..HEAD --oneline | wc -l | sed 's/ //g')\n" >> $@
|
|
@printf "MACOS_NUGET_COMMIT_DISTANCE:=$(shell LANG=C; export LANG; git --git-dir $(TOP)/.git log `git --git-dir $(TOP)/.git blame -- ./Make.versions HEAD | grep MACOS_NUGET_VERSION= | sed 's/ .*//' `..HEAD --oneline | wc -l | sed 's/ //g')\n" >> $@
|
|
@printf "MACCATALYST_NUGET_COMMIT_DISTANCE:=$(shell LANG=C; export LANG; git --git-dir $(TOP)/.git log `git --git-dir $(TOP)/.git blame -- ./Make.versions HEAD | grep MACCATALYST_NUGET_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
|
|
@if test -d $(TOP)/../maccore; then printf "ENABLE_XAMARIN=1\n" >> $@; echo "Detected the maccore repository, automatically enabled the Xamarin build"; fi
|
|
@# Build from source if we're on CI and packages aren't available.
|
|
@if ! curl -s -f --head "$(MONO_IOS_URL)" &> /dev/null; then \
|
|
echo "$(COLOR_GRAY)*** The mono archive for iOS ($(MONO_IOS_URL)) can't be downloaded:$(COLOR_CLEAR)"; \
|
|
echo "$$ curl -s --head '$(MONO_IOS_URL)'" | sed 's/^/ /'; \
|
|
curl -s --head "$(MONO_IOS_URL)" | sed 's/^/ /'; \
|
|
MONO_DOWNLOAD_FAIL=1; \
|
|
fi; \
|
|
if ! curl -s -f --head "$(MONO_MAC_URL)" &> /dev/null; then \
|
|
echo "$(COLOR_GRAY)*** The mono archive for macOS ($(MONO_MAC_URL)) can't be downloaded:$(COLOR_CLEAR)"; \
|
|
echo "$$ curl -s --head '$(MONO_MAC_URL)'" | sed 's/^/ /'; \
|
|
curl -s --head "$(MONO_MAC_URL)" | sed 's/^/ /'; \
|
|
MONO_DOWNLOAD_FAIL=1; \
|
|
fi; \
|
|
if test -n "$$MONO_DOWNLOAD_FAIL"; then \
|
|
echo "$(COLOR_GRAY)Building mono from source because one or both of the mono archives aren't downloadable.$(COLOR_CLEAR)"; \
|
|
printf "MONO_BUILD_FROM_SOURCE=1\n" >> $@; \
|
|
else \
|
|
echo "Downloading mono archives"; \
|
|
fi
|
|
|
|
include $(TOP)/Make.versions
|
|
|
|
APIDIFF_REFERENCES=https://bosstoragemirror.blob.core.windows.net/wrench/xcode12.5/ab40b131d3e87a96c3414447dcded5fec45bce36/4679032/package/bundle.zip
|
|
|
|
PACKAGE_HEAD_REV=$(shell git rev-parse HEAD)
|
|
|
|
#
|
|
# /!\ README /!\
|
|
#
|
|
# A release branch requires updating some variables.
|
|
# This is done in Make.versions, not here.
|
|
#
|
|
|
|
ifeq ($(BRANCH_NAME),)
|
|
# BRANCH_NAME is set in Jenkins, so this is for local builds.
|
|
CURRENT_BRANCH:=$(shell git rev-parse --abbrev-ref HEAD)
|
|
else
|
|
CURRENT_BRANCH:=$(BRANCH_NAME)
|
|
endif
|
|
CURRENT_BRANCH_SED_ESCAPED:=$(subst |,\|,$(subst &,\&,$(subst $$,\$$,$(subst /,\/,$(CURRENT_BRANCH)))))
|
|
# The branch name in the nuget version has to be alphanumeric, and we follow the semantic versioning spec,
|
|
# which defines "alphanumeric" as the letters, numbers and the dash character (and nothing else).
|
|
# So here we replace all non-alphanumeric characters in the branch name with a dash.
|
|
CURRENT_BRANCH_ALPHANUMERIC:=$(shell export LANG=C; printf "%s" "$(CURRENT_BRANCH)" | tr -c '[a-zA-Z0-9-]' '-')
|
|
|
|
# Get the current hash
|
|
CURRENT_HASH:=$(shell git log -1 --pretty=%h)
|
|
|
|
# Get the pull request number, if this is a pull request
|
|
# Jenkins may set either CHANGE_ID or ghprbPullId
|
|
# Azure Devops sets SYSTEM_PULLREQUEST_PULLREQUESTNUMBER
|
|
ifneq ($(CHANGE_ID),)
|
|
PULL_REQUEST_ID=$(CHANGE_ID)
|
|
else ifneq ($(ghprbPullId),)
|
|
PULL_REQUEST_ID=$(ghprbPullId)
|
|
else ifneq ($(SYSTEM_PULLREQUEST_PULLREQUESTNUMBER),)
|
|
PULL_REQUEST_ID=$(SYSTEM_PULLREQUEST_PULLREQUESTNUMBER)
|
|
endif
|
|
|
|
# For release branches, modify the following variables to hardcode a version name
|
|
# Set the NUGET_HARDCODED_PRERELEASE_IDENTIFIER variable to the prerelease identifer you want (say "preview.5")
|
|
NUGET_HARDCODED_PRERELEASE_IDENTIFIER=
|
|
# Set the NUGET_HARDCODED_PRERELEASE_BRANCH variable to the exact name for the branch the above variable should apply to (so that any other branches won't pick it up by accident).
|
|
# For the previous example, this would be "release/6.0.1xx-preview5"
|
|
NUGET_HARDCODED_PRERELEASE_BRANCH=
|
|
|
|
# compute the alphanumeric version of the hardcoded prerelease branch
|
|
NUGET_HARDCODED_PRERELEASE_BRANCH_ALPHANUMERIC:=$(shell export LANG=C; printf "%s" "$(NUGET_HARDCODED_PRERELEASE_BRANCH)" | tr -c '[a-zA-Z0-9-]' '-')
|
|
|
|
# The prerelease identifier is missing the per-product commit distance, which is added below
|
|
# DO NOT MODIFY THE BELOW CONDITIONS TO HARDCODE A VERSION NUMBER FOR RELEASE BRANCHES.
|
|
ifneq ($(PULL_REQUEST_ID),)
|
|
NUGET_PRERELEASE_IDENTIFIER=ci.pr.gh$(PULL_REQUEST_ID).
|
|
else ifeq ($(NUGET_HARDCODED_PRERELEASE_BRANCH_ALPHANUMERIC),$(CURRENT_BRANCH_ALPHANUMERIC))
|
|
NUGET_PRERELEASE_IDENTIFIER=$(NUGET_HARDCODED_PRERELEASE_IDENTIFIER)
|
|
else
|
|
NUGET_PRERELEASE_IDENTIFIER=ci.$(CURRENT_BRANCH_ALPHANUMERIC).
|
|
endif
|
|
NUGET_BUILD_METADATA=sha.$(CURRENT_HASH)
|
|
|
|
IOS_PRODUCT=Xamarin.iOS
|
|
IOS_PACKAGE_NAME=Xamarin.iOS
|
|
IOS_PACKAGE_NAME_LOWER=$(shell echo $(IOS_PACKAGE_NAME) | tr "[:upper:]" "[:lower:]")
|
|
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))
|
|
|
|
IOS_NUGET=Microsoft.iOS
|
|
IOS_NUGET_VERSION_MAJOR=$(word 1, $(subst ., ,$(IOS_NUGET_VERSION)))
|
|
IOS_NUGET_VERSION_MINOR=$(word 2, $(subst ., ,$(IOS_NUGET_VERSION)))
|
|
IOS_NUGET_VERSION_PATCH=$(word 3, $(subst ., ,$(IOS_NUGET_VERSION)))
|
|
IOS_NUGET_VERSION_NO_METADATA=$(IOS_NUGET_VERSION)-$(NUGET_PRERELEASE_IDENTIFIER)$(IOS_NUGET_COMMIT_DISTANCE)
|
|
IOS_NUGET_VERSION_FULL=$(IOS_NUGET_VERSION_NO_METADATA)+$(NUGET_BUILD_METADATA)
|
|
|
|
IOS_WINDOWS_NUGET=Microsoft.iOS.Windows
|
|
IOS_WINDOWS_NUGET_VERSION_MAJOR=$(IOS_NUGET_VERSION_MAJOR)
|
|
IOS_WINDOWS_NUGET_VERSION_MINOR=$(IOS_NUGET_VERSION_MINOR)
|
|
IOS_WINDOWS_NUGET_VERSION_PATCH=$(IOS_NUGET_VERSION_PATCH)
|
|
IOS_WINDOWS_NUGET_VERSION_NO_METADATA=$(IOS_NUGET_VERSION_NO_METADATA)
|
|
IOS_WINDOWS_NUGET_VERSION_FULL=$(IOS_NUGET_VERSION_FULL)
|
|
|
|
TVOS_NUGET=Microsoft.tvOS
|
|
TVOS_NUGET_VERSION_MAJOR=$(word 1, $(subst ., ,$(TVOS_NUGET_VERSION)))
|
|
TVOS_NUGET_VERSION_MINOR=$(word 2, $(subst ., ,$(TVOS_NUGET_VERSION)))
|
|
TVOS_NUGET_VERSION_PATCH=$(word 3, $(subst ., ,$(TVOS_NUGET_VERSION)))
|
|
TVOS_NUGET_VERSION_NO_METADATA=$(TVOS_NUGET_VERSION)-$(NUGET_PRERELEASE_IDENTIFIER)$(TVOS_NUGET_COMMIT_DISTANCE)
|
|
TVOS_NUGET_VERSION_FULL=$(TVOS_NUGET_VERSION_NO_METADATA)+$(NUGET_BUILD_METADATA)
|
|
|
|
WATCHOS_NUGET=Microsoft.watchOS
|
|
WATCHOS_NUGET_VERSION_MAJOR=$(word 1, $(subst ., ,$(WATCHOS_NUGET_VERSION)))
|
|
WATCHOS_NUGET_VERSION_MINOR=$(word 2, $(subst ., ,$(WATCHOS_NUGET_VERSION)))
|
|
WATCHOS_NUGET_VERSION_PATCH=$(word 3, $(subst ., ,$(WATCHOS_NUGET_VERSION)))
|
|
WATCHOS_NUGET_VERSION_NO_METADATA=$(WATCHOS_NUGET_VERSION)-$(NUGET_PRERELEASE_IDENTIFIER)$(WATCHOS_NUGET_COMMIT_DISTANCE)
|
|
WATCHOS_NUGET_VERSION_FULL=$(WATCHOS_NUGET_VERSION_NO_METADATA)+$(NUGET_BUILD_METADATA)
|
|
|
|
MACCATALYST_NUGET=Microsoft.MacCatalyst
|
|
MACCATALYST_NUGET_VERSION_MAJOR=$(word 1, $(subst ., ,$(MACCATALYST_NUGET_VERSION)))
|
|
MACCATALYST_NUGET_VERSION_MINOR=$(word 2, $(subst ., ,$(MACCATALYST_NUGET_VERSION)))
|
|
MACCATALYST_NUGET_VERSION_PATCH=$(word 3, $(subst ., ,$(MACCATALYST_NUGET_VERSION)))
|
|
MACCATALYST_NUGET_VERSION_NO_METADATA=$(MACCATALYST_NUGET_VERSION)-$(NUGET_PRERELEASE_IDENTIFIER)$(MACCATALYST_NUGET_COMMIT_DISTANCE)
|
|
MACCATALYST_NUGET_VERSION_FULL=$(MACCATALYST_NUGET_VERSION_NO_METADATA)+$(NUGET_BUILD_METADATA)
|
|
|
|
# Xcode version should have both a major and a minor version (even if the minor version is 0)
|
|
XCODE_VERSION=13.0
|
|
XCODE_URL=https://dl.internalx.com/internal-files/xcodes/Xcode_13_beta_2.xip
|
|
XCODE_DEVELOPER_ROOT=/Applications/Xcode_13.0.0-beta2.app/Contents/Developer
|
|
XCODE_PRODUCT_BUILD_VERSION:=$(shell /usr/libexec/PlistBuddy -c 'Print :ProductBuildVersion' $(XCODE_DEVELOPER_ROOT)/../version.plist)
|
|
|
|
# Mono version embedded in XI/XM (NEEDED_MONO_VERSION/BRANCH) are specified in mk/mono.mk
|
|
include $(TOP)/mk/mono.mk
|
|
MONO_HASH := $(NEEDED_MONO_VERSION)
|
|
|
|
# Minimum Mono version for building XI/XM
|
|
MIN_MONO_VERSION=6.12.0.145
|
|
MAX_MONO_VERSION=6.12.99
|
|
MIN_MONO_URL=https://xamjenkinsartifact.azureedge.net/build-package-osx-mono/2020-02/151/c633fe923832f0c3db3c4e6aa98e5592bf5a06e7/MonoFramework-MDK-6.12.0.145.macos10.xamarin.universal.pkg
|
|
|
|
# Minimum Mono version for Xamarin.Mac apps using the system mono
|
|
MIN_XM_MONO_VERSION=6.4.0.94
|
|
MIN_XM_MONO_URL=https://xamjenkinsartifact.azureedge.net/build-package-osx-mono/2019-06/77/c608cf3eafaea310e11af13cc9380d770112bb83/MonoFramework-MDK-6.4.0.94.macos10.xamarin.universal.pkg
|
|
|
|
# Minimum Visual Studio version
|
|
MIN_VISUAL_STUDIO_URL=https://bosstoragemirror.blob.core.windows.net/vsmac/3425624/release-8.4/88f89d49594ac101891944e2a6b9a0b607a6fb52/VisualStudioForMac-8.4.4.8.dmg
|
|
MIN_VISUAL_STUDIO_VERSION=8.4.4.8
|
|
MAX_VISUAL_STUDIO_VERSION=8.10.99
|
|
|
|
# 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
|
|
|
|
# ObjectiveSharpie min/max versions
|
|
MIN_SHARPIE_VERSION=3.5.45
|
|
MAX_SHARPIE_VERSION=3.5.99
|
|
MIN_SHARPIE_URL=https://download.visualstudio.microsoft.com/download/pr/77766fbc-995f-410b-9546-4a1731051956/d3f34a07d9c3a2fcdda16bb3fe5b41e8/objectivesharpie-3.5.45.pkg
|
|
|
|
# Minimum OSX versions for building XI/XM
|
|
MIN_OSX_BUILD_VERSION=11.0
|
|
# Minimum OSX version for executing XI/XM tooling.
|
|
MIN_OSX_VERSION_FOR_IOS=10.11
|
|
MIN_OSX_VERSION_FOR_MAC=10.11
|
|
|
|
# Bump the *_NUGET_VERSION variables in Make.versions instead, because that makes sure the computed commit distance for the version is correct.
|
|
IOS_SDK_VERSION=$(word 1, $(subst ., ,$(IOS_NUGET_VERSION))).$(word 2, $(subst ., ,$(IOS_NUGET_VERSION)))
|
|
OSX_SDK_VERSION=$(word 1, $(subst ., ,$(MACOS_NUGET_VERSION))).$(word 2, $(subst ., ,$(MACOS_NUGET_VERSION)))
|
|
WATCH_SDK_VERSION=$(word 1, $(subst ., ,$(WATCHOS_NUGET_VERSION))).$(word 2, $(subst ., ,$(WATCHOS_NUGET_VERSION)))
|
|
TVOS_SDK_VERSION=$(word 1, $(subst ., ,$(TVOS_NUGET_VERSION))).$(word 2, $(subst ., ,$(TVOS_NUGET_VERSION)))
|
|
MACCATALYST_SDK_VERSION=$(word 1, $(subst ., ,$(MACCATALYST_NUGET_VERSION))).$(word 2, $(subst ., ,$(MACCATALYST_NUGET_VERSION)))
|
|
MACCATALYST_MAC_SDK_VERSION=$(OSX_SDK_VERSION)
|
|
|
|
MAX_IOS_DEPLOYMENT_TARGET=$(IOS_SDK_VERSION)
|
|
MAX_WATCH_DEPLOYMENT_TARGET=$(WATCH_SDK_VERSION)
|
|
MAX_TVOS_DEPLOYMENT_TARGET=$(TVOS_SDK_VERSION)
|
|
|
|
MAX_IOS_SIMULATOR_VERSION=$(IOS_SDK_VERSION)
|
|
MAX_TVOS_SIMULATOR_VERSION=$(TVOS_SDK_VERSION)
|
|
MAX_WATCH_SIMULATOR_VERSION=$(WATCH_SDK_VERSION)
|
|
|
|
# Minimum OS versions for running XI/XM apps.
|
|
MIN_IOS_SDK_VERSION=7.0
|
|
MIN_OSX_SDK_VERSION=10.9
|
|
MIN_WATCHOS_SDK_VERSION=2.0
|
|
MIN_WATCHOS64_32_SDK_VERSION=5.1
|
|
MIN_WATCH_OS_VERSION=2.0
|
|
MIN_TVOS_SDK_VERSION=9.0
|
|
MIN_MACCATALYST_SDK_VERSION=13.1
|
|
|
|
# Minimum OS versions for dotnet6 support
|
|
DOTNET_MIN_IOS_SDK_VERSION=10.0
|
|
DOTNET_MIN_TVOS_SDK_VERSION=10.0
|
|
DOTNET_MIN_MACCATALYST_SDK_VERSION=13.1
|
|
DOTNET_MIN_OSX_SDK_VERSION=10.14
|
|
|
|
# The min simulator version available in the Xcode we're using
|
|
MIN_IOS_SIMULATOR_VERSION=11.4
|
|
MIN_WATCHOS_SIMULATOR_VERSION=6.0
|
|
# This is the iOS version that matches the watchOS version (i.e same Xcode)
|
|
MIN_WATCHOS_COMPANION_SIMULATOR_VERSION=12.0
|
|
MIN_TVOS_SIMULATOR_VERSION=11.4
|
|
# These are the simulator package ids for the versions above
|
|
EXTRA_SIMULATORS=com.apple.pkg.iPhoneSimulatorSDK11_4 com.apple.pkg.iPhoneSimulatorSDK12_0 com.apple.pkg.AppleTVSimulatorSDK11_4 com.apple.pkg.WatchSimulatorSDK6_0
|
|
|
|
INCLUDE_IOS=1
|
|
INCLUDE_MAC=1
|
|
INCLUDE_WATCH=1
|
|
INCLUDE_TVOS=1
|
|
INCLUDE_MACCATALYST=1
|
|
INCLUDE_DEVICE=1
|
|
INCLUDE_DOTNET_WATCHOS=
|
|
INCLUDE_XAMARIN_LEGACY=1
|
|
|
|
# disable source code install by default (it's enabled for CI builds)
|
|
ENABLE_INSTALL_SOURCE=
|
|
|
|
-include $(TOP)/Make.config.local
|
|
-include $(TOP)/configure.inc
|
|
|
|
ifdef ENABLE_CCACHE
|
|
# Note the space at the end the line
|
|
CCACHE=ccache
|
|
endif
|
|
|
|
XCODE_MAC_SDKROOT=$(XCODE_DEVELOPER_ROOT)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
|
|
|
|
# The MAC_* variables do not contain the -mmacosx-version-min flag on purpose: each usage must specify it separately.
|
|
MAC_CC=$(CCACHE)$(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -isysroot $(XCODE_MAC_SDKROOT) -stdlib=libc++
|
|
MAC_CXX=$(CCACHE)$(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -isysroot $(XCODE_MAC_SDKROOT) -stdlib=libc++
|
|
|
|
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?=$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/mono/Xamarin.iOS
|
|
MONOTOUCH_TV_MONO_PATH?=$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/mono/Xamarin.TVOS
|
|
MONOTOUCH_WATCH_MONO_PATH?=$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/mono/Xamarin.WatchOS
|
|
MONOTOUCH_MACCATALYST_MONO_PATH?=$(IOS_DESTDIR)$(MONOTOUCH_PREFIX)/lib/mono/Xamarin.MacCatalyst
|
|
|
|
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 -Werror -Wconversion -Wdeprecated -Wuninitialized -fstack-protector-strong
|
|
|
|
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++14 -fno-exceptions -stdlib=libc++
|
|
|
|
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)
|
|
|
|
MACCATALYST_COMMON_CFLAGS=-target x86_64-apple-ios$(MIN_MACCATALYST_SDK_VERSION)-macabi -arch x86_64 -g $(IOS_COMMON_DEFINES) \
|
|
-isysroot $(XCODE_DEVELOPER_ROOT)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_SDK_VERSION).sdk \
|
|
-isystem $(XCODE_DEVELOPER_ROOT)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_SDK_VERSION).sdk/System/iOSSupport/usr/include \
|
|
-iframework $(XCODE_DEVELOPER_ROOT)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_SDK_VERSION).sdk/System/iOSSupport/System/Library/Frameworks
|
|
MACCATALYST_OBJC_CFLAGS=$(MACCATALYST_COMMON_CFLAGS) -fobjc-abi-version=2 -fobjc-legacy-dispatch $(OBJC_CFLAGS)
|
|
MACCATALYST_CFLAGS=$(MACCATALYST_COMMON_CFLAGS)
|
|
|
|
MACCATALYST_COMMON_CFLAGS=$(CFLAGS) -g $(IOS_COMMON_DEFINES) \
|
|
-isysroot $(XCODE_DEVELOPER_ROOT)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_SDK_VERSION).sdk \
|
|
-isystem $(XCODE_DEVELOPER_ROOT)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_SDK_VERSION).sdk/System/iOSSupport/usr/include \
|
|
-iframework $(XCODE_DEVELOPER_ROOT)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_SDK_VERSION).sdk/System/iOSSupport/System/Library/Frameworks
|
|
MACCATALYST_COMMON_OBJC_CFLAGS=$(MACCATALYST_COMMON_CFLAGS) -fobjc-abi-version=2 -fobjc-legacy-dispatch $(OBJC_CFLAGS)
|
|
MACCATALYST_X86_64_OBJC_CFLAGS=$(MACCATALYST_COMMON_OBJC_CFLAGS) -target x86_64-apple-ios$(MIN_MACCATALYST_SDK_VERSION)-macabi -arch x86_64
|
|
MACCATALYST_X86_64_CFLAGS=$(MACCATALYST_COMMON_CFLAGS) -target x86_64-apple-ios$(MIN_MACCATALYST_SDK_VERSION)-macabi -arch x86_64
|
|
MACCATALYST_ARM64_OBJC_CFLAGS=$(MACCATALYST_COMMON_OBJC_CFLAGS) -target arm64-apple-ios$(MIN_MACCATALYST_SDK_VERSION)-macabi -arch arm64
|
|
MACCATALYST_ARM64_CFLAGS=$(MACCATALYST_COMMON_CFLAGS) -target arm64-apple-ios$(MIN_MACCATALYST_SDK_VERSION)-macabi -arch arm64
|
|
|
|
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_CSC) -features:strict -nostdlib -noconfig -r:$(MONOTOUCH_MONO_PATH)/System.dll -r:$(MONOTOUCH_MONO_PATH)/System.Core.dll -r:$(MONOTOUCH_MONO_PATH)/System.Xml.dll -r:$(MONOTOUCH_MONO_PATH)/mscorlib.dll -r:$(MONOTOUCH_MONO_PATH)/System.Net.Http.dll -r:$(MONOTOUCH_MONO_PATH)/Facades/System.Drawing.Common.dll -deterministic
|
|
TV_CSC=$(SYSTEM_CSC) -features:strict -nostdlib -noconfig -r:$(MONOTOUCH_TV_MONO_PATH)/System.dll -r:$(MONOTOUCH_TV_MONO_PATH)/System.Core.dll -r:$(MONOTOUCH_TV_MONO_PATH)/System.Xml.dll -r:$(MONOTOUCH_TV_MONO_PATH)/mscorlib.dll -r:$(MONOTOUCH_TV_MONO_PATH)/System.Net.Http.dll -r:$(MONOTOUCH_TV_MONO_PATH)/Facades/System.Drawing.Common.dll -deterministic
|
|
WATCH_CSC=$(SYSTEM_CSC) -features:strict -nostdlib -noconfig -r:$(MONOTOUCH_WATCH_MONO_PATH)/System.dll -r:$(MONOTOUCH_WATCH_MONO_PATH)/System.Core.dll -r:$(MONOTOUCH_WATCH_MONO_PATH)/System.Xml.dll -r:$(MONOTOUCH_WATCH_MONO_PATH)/mscorlib.dll -r:$(MONOTOUCH_WATCH_MONO_PATH)/System.Net.Http.dll -r:$(MONOTOUCH_WATCH_MONO_PATH)/Facades/System.Drawing.Common.dll -deterministic
|
|
MACCATALYST_CSC=$(SYSTEM_CSC) -features:strict -nostdlib -noconfig -r:$(MONOTOUCH_MACCATALYST_MONO_PATH)/System.dll -r:$(MONOTOUCH_MACCATALYST_MONO_PATH)/System.Core.dll -r:$(MONOTOUCH_MACCATALYST_MONO_PATH)/System.Xml.dll -r:$(MONOTOUCH_MACCATALYST_MONO_PATH)/mscorlib.dll -r:$(MONOTOUCH_MACCATALYST_MONO_PATH)/System.Net.Http.dll -r:$(MONOTOUCH_MACCATALYST_MONO_PATH)/Facades/System.Drawing.Common.dll -deterministic
|
|
|
|
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)
|
|
|
|
# MacCatalyst
|
|
|
|
XAMARIN_MACCATALYST_SDK = $(MONOTOUCH_PREFIX)/SDKs/Xamarin.MacCatalyst.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)
|
|
SIMULATORWATCH64_CFLAGS = -arch x86_64 -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)
|
|
SIMULATORWATCH64_OBJC_CFLAGS = $(SIMULATORWATCH64_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)
|
|
DEVICEWATCH64_32_CFLAGS = -arch arm64_32 -mwatchos-version-min=$(MIN_WATCHOS64_32_SDK_VERSION) -isysroot $(DEVICEWATCH_SDK) $(CFLAGS) -fembed-bitcode $(IOS_COMMON_DEFINES)
|
|
DEVICEWATCH_OBJC_CFLAGS = $(DEVICEWATCH_CFLAGS) $(DEVICE_OBJC_CFLAGS)
|
|
DEVICEWATCH64_32_OBJC_CFLAGS = $(DEVICEWATCH64_32_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)
|
|
|
|
# macOS
|
|
|
|
XAMARIN_MACOS_SDK = $(MAC_FRAMEWORK_CURRENT_DIR)/SDKs/Xamarin.macOS.sdk
|
|
|
|
MAC_OBJC_CFLAGS= -DMONOMAC -DMIN_XM_MONO_VERSION=\"$(MIN_XM_MONO_VERSION)\" $(CFLAGS) $(OBJC_CFLAGS)
|
|
MAC_CFLAGS = -mmacosx-version-min=$(MIN_OSX_SDK_VERSION) -DMONOMAC -g -DMIN_XM_MONO_VERSION=\"$(MIN_XM_MONO_VERSION)\" $(CFLAGS)
|
|
MAC_LDFLAGS = -mmacosx-version-min=$(MIN_OSX_SDK_VERSION) -framework AppKit
|
|
|
|
# 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
|
|
TOUCH_UNIT_PATH=$(TOP)/external/Touch.Unit
|
|
OPENTK_PATH=$(TOP)/external/opentk
|
|
XAMARIN_MACDEV_PATH=$(TOP)/external/Xamarin.MacDev
|
|
MACCORE_PATH=$(TOP)/../maccore
|
|
MACIOS_BINARIES_PATH=$(TOP)/external/macios-binaries
|
|
IKVM_PATH=$(TOP)/external/ikvm-fork
|
|
|
|
MONO_PREFIX ?= /Library/Frameworks/Mono.framework/Versions/Current
|
|
SYSTEM_MCS=$(MONO_PREFIX)/bin/mcs
|
|
SYSTEM_CSC=$(MONO_PREFIX)/bin/csc
|
|
SYSTEM_SN=$(MONO_PREFIX)/bin/sn
|
|
SYSTEM_MONO=$(MONO_PREFIX)/bin/mono
|
|
SYSTEM_MONO32=$(MONO_PREFIX)/bin/mono32
|
|
SYSTEM_XBUILD=$(MONO_PREFIX)/bin/msbuild /p:Features=strict /m
|
|
SYSTEM_MSBUILD=unset MSBuildExtensionsPath && $(MONO_PREFIX)/bin/msbuild /p:Features=strict /m
|
|
SYSTEM_RESGEN=$(MONO_PREFIX)/bin/resgen
|
|
|
|
XIBUILD_EXE_PATH=$(abspath $(TOP)/tools/xibuild/bin/Debug/xibuild.exe)
|
|
SYSTEM_XIBUILD=$(SYSTEM_MONO) $(XIBUILD_EXE_PATH) $(XIBUILD_VERBOSITY)
|
|
|
|
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_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)
|
|
|
|
MACOS_NUGET=Microsoft.macOS
|
|
MACOS_NUGET_VERSION_MAJOR=$(word 1, $(subst ., ,$(MACOS_NUGET_VERSION)))
|
|
MACOS_NUGET_VERSION_MINOR=$(word 2, $(subst ., ,$(MACOS_NUGET_VERSION)))
|
|
MACOS_NUGET_VERSION_PATCH=$(word 3, $(subst ., ,$(MACOS_NUGET_VERSION)))
|
|
MACOS_NUGET_VERSION_NO_METADATA=$(MACOS_NUGET_VERSION)-$(NUGET_PRERELEASE_IDENTIFIER)$(MACOS_NUGET_COMMIT_DISTANCE)
|
|
MACOS_NUGET_VERSION_FULL=$(MACOS_NUGET_VERSION_NO_METADATA)+$(NUGET_BUILD_METADATA)
|
|
|
|
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)
|
|
|
|
MOBILE_BCL_DIR = $(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib/mono/Xamarin.Mac
|
|
MAC_mobile_CSC = $(SYSTEM_CSC) -features:strict -nostdlib -noconfig -r:$(MOBILE_BCL_DIR)/System.dll -r:$(MOBILE_BCL_DIR)/System.Core.dll -r:$(MOBILE_BCL_DIR)/System.Xml.dll -r:$(MOBILE_BCL_DIR)/mscorlib.dll -r:$(MOBILE_BCL_DIR)/System.Net.Http.dll -r:$(MOBILE_BCL_DIR)/Facades/System.Drawing.Common.dll -deterministic
|
|
|
|
FULL_BCL_DIR = $(MAC_DESTDIR)$(MAC_FRAMEWORK_CURRENT_DIR)/lib/mono/4.5
|
|
MAC_full_CSC = $(SYSTEM_CSC) -features:strict -nostdlib -noconfig -r:$(FULL_BCL_DIR)/System.dll -r:$(FULL_BCL_DIR)/System.Core.dll -r:$(FULL_BCL_DIR)/System.Xml.dll -r:$(FULL_BCL_DIR)/mscorlib.dll -r:$(FULL_BCL_DIR)/System.Net.Http.dll -r:$(FULL_BCL_DIR)/Facades/System.Drawing.Common.dll -deterministic
|
|
|
|
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)
|
|
|
|
TT = $(SYSTEM_MONO) "/Applications/Visual Studio.app/Contents/Resources/lib/monodevelop/AddIns/MonoDevelop.TextTemplating/TextTransform.exe"
|
|
|
|
PRODUCT_KEY_PATH?=$(TOP)/product.snk
|
|
|
|
include $(TOP)/mk/quiet.mk
|
|
|
|
MDTOOL?="/Applications/Visual Studio.app/Contents/MacOS/vstool" $(MDTOOL_VERBOSITY)
|
|
|
|
IOS_SOURCE=$(TOP)/src
|
|
IOS_BUILD_SOURCE=$(IOS_SOURCE)/build/ios/native
|
|
IOS_COMMON_BUILD_SOURCE=$(IOS_SOURCE)/build/common
|
|
MAC_SOURCE=$(TOP)/src
|
|
MAC_FULL_BUILD_SOURCE=$(MAC_SOURCE)/build/mac/full
|
|
MAC_MODERN_BUILD_SOURCE=$(MAC_SOURCE)/build/mac/mobile
|
|
MAC_COMMON_BUILD_SOURCE=$(MAC_SOURCE)/build/common
|
|
|
|
ifneq ($(BUILD_REVISION),)
|
|
IOS_CSC_FLAGS_XI=-pathmap:"$(abspath $(IOS_COMMON_BUILD_SOURCE))/=$(IOS_FRAMEWORK_DIR)/Versions/$(IOS_PACKAGE_VERSION)/src/Xamarin.iOS/" -pathmap:"$(abspath $(IOS_BUILD_SOURCE))/=$(IOS_FRAMEWORK_DIR)/Versions/$(IOS_PACKAGE_VERSION)/src/Xamarin.iOS/" -pathmap:"$(abspath $(IOS_SOURCE))/=$(IOS_FRAMEWORK_DIR)/Versions/$(IOS_PACKAGE_VERSION)/src/Xamarin.iOS/"
|
|
MAC_CSC_FLAGS_XM=-pathmap:"$(abspath $(MAC_COMMON_BUILD_SOURCE))/=$(MAC_FRAMEWORK_DIR)/Versions/$(MAC_PACKAGE_VERSION)/src/Xamarin.Mac/" -pathmap:"$(abspath $(MAC_FULL_BUILD_SOURCE))/=$(MAC_FRAMEWORK_DIR)/Versions/$(MAC_PACKAGE_VERSION)/src/Xamarin.Mac/" -pathmap:"$(abspath $(MAC_MODERN_BUILD_SOURCE))/=$(MAC_FRAMEWORK_DIR)/Versions/$(MAC_PACKAGE_VERSION)/src/Xamarin.Mac/" -pathmap:"$(abspath $(MAC_SOURCE))/=$(MAC_FRAMEWORK_DIR)/Versions/$(MAC_PACKAGE_VERSION)/src/Xamarin.Mac/"
|
|
endif
|
|
|
|
ifdef ENABLE_XAMARIN
|
|
-include $(MACCORE_PATH)/Make.config
|
|
endif
|
|
|
|
JENKINS_RESULTS_DIRECTORY ?= $(abspath $(TOP)/jenkins-results)
|
|
|
|
# Clone files instead of copying them on APFS file systems. Much faster.
|
|
CP:=$(shell df -t apfs / >/dev/null 2>&1 && echo "cp -c" || echo "cp")
|
|
|
|
# WORKAROUND, Ideally it should be xcode-$(XCODE_PRODUCT_BUILD_VERSION) but mono does not build binaries for each xcode release
|
|
# Xcode 12.4 Build 12D4e
|
|
XCODE_IOS_ARCHIVE_VERSION=xcode-12D4e
|
|
# Xcode 12.4 Build 12D4e
|
|
XCODE_MACOS_ARCHIVE_VERSION=xcode-12D4e
|
|
MONO_IOS_FILENAME:=ios-release-Darwin-$(MONO_HASH).7z
|
|
MONO_IOS_URL:=https://xamjenkinsartifact.azureedge.net/mono-sdks/$(XCODE_IOS_ARCHIVE_VERSION)/$(MONO_IOS_FILENAME)
|
|
MONO_MAC_FILENAME:=mac-release-Darwin-$(MONO_HASH).7z
|
|
MONO_MAC_URL:=https://xamjenkinsartifact.azureedge.net/mono-sdks/$(XCODE_MACOS_ARCHIVE_VERSION)/$(MONO_MAC_FILENAME)
|
|
MONO_MACCATALYST_FILENAME:=maccat-release-Darwin-$(MONO_HASH).7z
|
|
MONO_MACCATALYST_URL:=https://xamjenkinsartifact.azureedge.net/mono-sdks/$(XCODE_MACOS_ARCHIVE_VERSION)/$(MONO_MACCATALYST_FILENAME)
|
|
|
|
# Setup various variables depending on whether mono is downloaded or built from source
|
|
ifeq ($(MONO_BUILD_FROM_SOURCE),)
|
|
MONO_IOS_SDK_DESTDIR:=$(abspath $(TOP)/builds/downloads/$(basename $(MONO_IOS_FILENAME)))
|
|
MONO_MAC_SDK_DESTDIR:=$(abspath $(TOP)/builds/downloads/$(basename $(MONO_MAC_FILENAME)))
|
|
MONO_MACCATALYST_SDK_DESTDIR:=$(abspath $(TOP)/builds/downloads/$(basename $(MONO_MACCATALYST_FILENAME)))
|
|
MONO_BUILD_MODE=download-mono
|
|
else
|
|
MONO_IOS_SDK_DESTDIR:=$(abspath $(MONO_PATH)/sdks/out)
|
|
MONO_MAC_SDK_DESTDIR:=$(abspath $(MONO_PATH)/sdks/out)
|
|
MONO_MACCATALYST_SDK_DESTDIR:=$(abspath $(MONO_PATH)/sdks/out)
|
|
MONO_BUILD_MODE=compile-mono
|
|
endif
|
|
|
|
-include $(TOP)/dotnet.config
|
|
$(TOP)/dotnet.config: $(TOP)/eng/Versions.props
|
|
$(Q) grep -A1 \"sdk\": $(TOP)/global.json | sed -e '1d' -e 's/[ \t]*"version": /DOTNET_VERSION=/' -e 's/"//g' > $@.tmp
|
|
$(Q) grep MicrosoftDotnetSdkInternalPackageVersion $(TOP)/eng/Versions.props | sed -e 's/<*\/*MicrosoftDotnetSdkInternalPackageVersion>//g' -e 's/[ \t]*/DOTNET6_VERSION=/' >> $@.tmp
|
|
$(Q) mv $@.tmp $@
|
|
|
|
DOTNET=/usr/local/share/dotnet/dotnet
|
|
|
|
DOTNET_DESTDIR ?= $(TOP)/_build
|
|
DOTNET_NUPKG_DIR ?= $(DOTNET_DESTDIR)/nupkgs
|
|
DOTNET_PKG_DIR ?= $(DOTNET_DESTDIR)/pkgs
|
|
DOTNET_FEED_DIR ?= $(DOTNET_DESTDIR)/nuget-feed
|
|
|
|
# Configuration for .NET 6.
|
|
# We're using preview versions, and there will probably be many of them, so install locally (into builds/downloads) if there's no system version to
|
|
# avoid consuming a lot of disk space (since they're never automatically deleted). The system-dependencies.sh script will install locally as long
|
|
# as there's a TARBALL url.
|
|
|
|
# If you build dotnet/runtime locally, "*-dev" is the version the built artifacts will use (and which we must reference)
|
|
CUSTOM_DOTNET_VERSION=6.0.0-dev
|
|
|
|
BUNDLED_NETCORE_PLATFORMS_PACKAGE_VERSION:=$(shell if test -f $(TOP)/builds/BundledNETCorePlatformsPackageVersion.txt; then cat $(TOP)/builds/BundledNETCorePlatformsPackageVersion.txt; else echo "run-make-in-builds-directory-first"; fi)
|
|
|
|
ifdef CUSTOM_DOTNET
|
|
DOTNET6_BCL_VERSION=$(CUSTOM_DOTNET_VERSION)
|
|
export CUSTOM_DOTNET_VERSION
|
|
else
|
|
DOTNET6_BCL_VERSION=$(BUNDLED_NETCORE_PLATFORMS_PACKAGE_VERSION)
|
|
endif
|
|
|
|
DOTNET6_VERSION_BAND=$(firstword $(subst -, ,$(DOTNET6_VERSION)))
|
|
DOTNET6_TARBALL=https://dotnetcli.blob.core.windows.net/dotnet/Sdk/$(DOTNET6_VERSION)/dotnet-sdk-$(DOTNET6_VERSION)-osx-x64.tar.gz
|
|
DOTNET6_TARBALL_NAME=$(notdir $(DOTNET6_TARBALL))
|
|
DOTNET6_DIR=$(abspath $(TOP)/builds/downloads/$(basename $(basename $(DOTNET6_TARBALL_NAME))))
|
|
DOTNET6=$(DOTNET6_DIR)/dotnet
|
|
DOTNET6_BCL_DIR:=$(abspath $(TOP)/builds/downloads/microsoft.netcore.app.ref/$(DOTNET6_BCL_VERSION)/ref/net6.0)
|
|
|
|
DOTNET6_CSC=$(DOTNET6) exec $(DOTNET6_DIR)/sdk/$(DOTNET6_VERSION)/Roslyn/bincore/csc.dll
|
|
|
|
DOTNET_PLATFORMS=
|
|
ifdef INCLUDE_IOS
|
|
DOTNET_PLATFORMS+=iOS
|
|
ifdef INCLUDE_DEVICE
|
|
DOTNET_IOS_RUNTIME_IDENTIFIERS=ios-arm ios-arm64 iossimulator-x86 iossimulator-x64
|
|
DOTNET_IOS_RUNTIME_IDENTIFIERS_32=ios-arm iossimulator-x86
|
|
DOTNET_IOS_RUNTIME_IDENTIFIERS_64=ios-arm64 iossimulator-x64
|
|
else
|
|
DOTNET_IOS_RUNTIME_IDENTIFIERS=iossimulator-x86 iossimulator-x64
|
|
DOTNET_IOS_RUNTIME_IDENTIFIERS_32=iossimulator-x86
|
|
DOTNET_IOS_RUNTIME_IDENTIFIERS_64=iossimulator-x64
|
|
endif
|
|
endif
|
|
|
|
ifdef INCLUDE_TVOS
|
|
DOTNET_PLATFORMS+=tvOS
|
|
ifdef INCLUDE_DEVICE
|
|
DOTNET_TVOS_RUNTIME_IDENTIFIERS=tvos-arm64 tvossimulator-x64
|
|
else
|
|
DOTNET_TVOS_RUNTIME_IDENTIFIERS=tvossimulator-x64
|
|
endif
|
|
endif
|
|
|
|
ifdef INCLUDE_DOTNET_WATCHOS
|
|
DOTNET_PLATFORMS+=watchOS
|
|
ifdef INCLUDE_DEVICE
|
|
DOTNET_WATCHOS_RUNTIME_IDENTIFIERS=watchos-arm watchos-x86
|
|
DOTNET_WATCHOS_RUNTIME_IDENTIFIERS_32=watchos-arm watchos-x86
|
|
else
|
|
DOTNET_WATCHOS_RUNTIME_IDENTIFIERS=watchos-x86 watchos-x64
|
|
DOTNET_WATCHOS_RUNTIME_IDENTIFIERS_32=watchos-x86
|
|
DOTNET_WATCHOS_RUNTIME_IDENTIFIERS_64=watchos-x64
|
|
endif
|
|
endif
|
|
|
|
ifdef INCLUDE_MACCATALYST
|
|
DOTNET_PLATFORMS+=MacCatalyst
|
|
DOTNET_MACCATALYST_RUNTIME_IDENTIFIERS=maccatalyst-x64 maccatalyst-arm64
|
|
endif
|
|
|
|
DOTNET_PLATFORMS+=macOS
|
|
DOTNET_CORECLR_PLATFORMS+=macOS
|
|
DOTNET_MACOS_RUNTIME_IDENTIFIERS=osx-x64 osx-arm64
|
|
|
|
ifdef INCLUDE_IOS
|
|
DOTNET_WINDOWS_PLATFORMS = iOS
|
|
endif
|
|
|
|
# Create variables prefixed with the correctly cased platform name from the upper-cased platform name. This simplifies code in a few areas (whenever we foreach over DOTNET_PLATFORMS).
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(eval DOTNET_$(platform)_RUNTIME_IDENTIFIERS:=$(DOTNET_$(shell echo $(platform) | tr a-z A-Z)_RUNTIME_IDENTIFIERS)))
|
|
|
|
# Create a variable with all the runtime identifiers
|
|
DOTNET_RUNTIME_IDENTIFIERS=$(foreach platform,$(DOTNET_PLATFORMS),$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS))
|
|
|
|
# Create a variable with all the CoreCLR runtime identifiers
|
|
DOTNET_CORECLR_RUNTIME_IDENTIFIERS=$(foreach platform,$(DOTNET_CORECLR_PLATFORMS),$(DOTNET_$(platform)_RUNTIME_IDENTIFIERS))
|
|
|
|
# Create a variable with the platform in uppercase
|
|
DOTNET_PLATFORMS_UPPERCASE:=$(shell echo $(DOTNET_PLATFORMS) | tr a-z A-Z)
|
|
|
|
.SUFFIXES:
|
|
MAKEFLAGS += --no-builtin-rules
|