157 строки
7.3 KiB
Makefile
157 строки
7.3 KiB
Makefile
TOP=..
|
|
include $(TOP)/Make.config
|
|
|
|
# Keep all intermediate files always.
|
|
.SECONDARY:
|
|
|
|
ifeq ($(shell arch),arm64)
|
|
DOTNET_ARCH=arm64
|
|
else ifeq ($(shell sysctl -n sysctl.proc_translated 2>/dev/null),1)
|
|
DOTNET_ARCH=arm64
|
|
else
|
|
DOTNET_ARCH=x64
|
|
endif
|
|
|
|
include $(TOP)/mk/colors.mk
|
|
|
|
DOTNET_FILENAME=$(DOTNET_VERSION).tar.gz
|
|
DOTNET_CACHE_FILENAME=$(HOME)/Library/Caches/xamarin-macios/$(DOTNET_FILENAME)
|
|
|
|
downloads/$(DOTNET_INSTALL_NAME): dotnet-install.sh
|
|
$(Q) echo "Downloading and installing .NET $(DOTNET_VERSION) ($(DOTNET_ARCH)) into $@..."
|
|
$(Q) if test -f $(DOTNET_CACHE_FILENAME); then \
|
|
echo "Found a cached version of .NET $(DOTNET_VERSION) in $(DOTNET_CACHE_FILENAME)."; \
|
|
mkdir -p "$@.tmp"; \
|
|
tar -xzf $(DOTNET_CACHE_FILENAME) -C "$@.tmp"; \
|
|
else \
|
|
./dotnet-install.sh --install-dir "$@.tmp" --version "$(DOTNET_VERSION)" --architecture $(DOTNET_ARCH) --no-path --keep-zip --zip-path "downloads/$(DOTNET_FILENAME)" $$DOTNET_INSTALL_EXTRA_ARGS; \
|
|
cp -c downloads/$(DOTNET_FILENAME) $(DOTNET_CACHE_FILENAME); \
|
|
echo "Cached the download of $(DOTNET_FILENAME) in ~/Library/Caches/xamarin-macios"; \
|
|
fi
|
|
$(Q) rm -Rf "$@"
|
|
$(Q) mv "$@.tmp" "$@"
|
|
$(Q) echo "Downloaded and installed .NET $(DOTNET_VERSION) into $@."
|
|
|
|
# Create a symlink with a persistent (non-version-dependent) name
|
|
# The dependency on the stamp file is to ensure the symlink is re-created
|
|
# when the .NET version changes.
|
|
all-local:: downloads/dotnet
|
|
dotnet:: downloads/dotnet
|
|
downloads/dotnet: .stamp-dotnet-symlink-$(DOTNET_VERSION)
|
|
$(Q) mkdir -p downloads
|
|
$(Q) rm -f $@
|
|
$(Q) ln -s $(abspath downloads/$(DOTNET_INSTALL_NAME)) $@
|
|
|
|
.stamp-dotnet-symlink-$(DOTNET_VERSION): Makefile
|
|
$(Q) touch $@
|
|
|
|
# This is just a helpful target to print the url to the .pkg to download and install the current .NET version into the system.
|
|
print-dotnet-pkg-urls: dotnet-install.sh
|
|
$(Q) rm -f $@-found-it.stamp
|
|
$(Q) for url in $$(./dotnet-install.sh --version "$(DOTNET_VERSION)" --architecture $(DOTNET_ARCH) --no-path $$DOTNET_INSTALL_EXTRA_ARGS --dry-run | grep URL.*primary: | sed 's/.*primary: //'); do \
|
|
pkg=$${url/tar.gz/pkg}; \
|
|
if $(CURL) -I "$$pkg" >/dev/null 2>&1; then echo "$$pkg"; touch $@-found-it.stamp; break; fi; \
|
|
done
|
|
$(Q) if ! test -f $@-found-it.stamp; then echo "No working urls were found."; exit 1; fi
|
|
$(Q) rm -f $@-found-it.stamp
|
|
|
|
DOTNET_DOWNLOAD_URL?=https://dot.net/v1/dotnet-install.sh
|
|
|
|
dotnet-install.sh: Makefile
|
|
$(Q) $(CURL_RETRY) $(DOTNET_DOWNLOAD_URL) --output $@.tmp
|
|
$(Q) chmod +x $@.tmp
|
|
$(Q) mv $@.tmp $@
|
|
|
|
ifdef CUSTOM_DOTNET
|
|
DOWNLOAD_DOTNET_VERSION=$(CUSTOM_DOTNET_VERSION)
|
|
else
|
|
ifneq ($(BUNDLED_NETCORE_PLATFORMS_PACKAGE_VERSION),)
|
|
DOWNLOAD_DOTNET_VERSION=$(BUNDLED_NETCORE_PLATFORMS_PACKAGE_VERSION)
|
|
endif
|
|
endif
|
|
|
|
.stamp-install-custom-dotnet-runtime-workloads:
|
|
ifneq ($(TRACKING_DOTNET_RUNTIME_SEPARATELY),)
|
|
@# mono toolchain
|
|
$(Q) mkdir -p ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND)
|
|
$(Q) $(CP) $(TOP)/packages/microsoft.net.workload.mono.toolchain.net7.manifest-$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND)/$(DOWNLOAD_DOTNET_VERSION)/data/WorkloadManifest.* ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND)/microsoft.net.workload.mono.toolchain.net7/
|
|
@# emscripten, which mono depends on
|
|
$(Q) mkdir -p ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(EMSCRIPTEN_MANIFEST_VERSION_BAND)
|
|
$(Q) $(CP) $(TOP)/packages/microsoft.net.workload.emscripten.net7.manifest-$(EMSCRIPTEN_MANIFEST_VERSION_BAND)/$(EMSCRIPTEN_MANIFEST_PACKAGE_VERSION)/data/WorkloadManifest.* ./downloads/$(DOTNET_INSTALL_NAME)/sdk-manifests/$(EMSCRIPTEN_MANIFEST_VERSION_BAND)/microsoft.net.workload.emscripten.net7/
|
|
$(Q) touch $@
|
|
endif
|
|
|
|
package-download/all-package-references.csproj: $(GIT_DIRECTORY)/HEAD $(GIT_DIRECTORY)/index ./create-csproj-for-all-packagereferences.sh
|
|
$(Q_GEN) ./create-csproj-for-all-packagereferences.sh --output "$(abspath $@.tmp)" $(if $(V),-v,)
|
|
$(Q) mv "$@.tmp" "$@"
|
|
|
|
.stamp-download-dotnet-packages: $(TOP)/Make.config downloads/$(DOTNET_INSTALL_NAME) package-download/all-package-references.csproj
|
|
$(Q_GEN) cd package-download && $(DOTNET) \
|
|
build \
|
|
download-packages.csproj \
|
|
/t:WriteBundledNETCorePlatformsPackageVersion \
|
|
/p:WriteFilePath=$(CURDIR)/BundledNETCorePlatformsPackageVersion.txt \
|
|
/p:PackageRuntimeIdentifiers="$(DOTNET_RUNTIME_IDENTIFIERS)" \
|
|
/p:PackageRuntimeIdentifiersCoreCLR="$(DOTNET_CORECLR_RUNTIME_IDENTIFIERS)" \
|
|
/p:CustomDotNetVersion="$(DOWNLOAD_DOTNET_VERSION)" \
|
|
/p:MonoToolChainManifestVersionBand="$(MONO_TOOLCHAIN_MANIFEST_VERSION_BAND)" \
|
|
/p:EmscriptenManifestVersionBand="$(EMSCRIPTEN_MANIFEST_VERSION_BAND)" \
|
|
/p:TrackingDotNetRuntimeSeparately="$(TRACKING_DOTNET_RUNTIME_SEPARATELY)" \
|
|
/bl \
|
|
$(DOTNET_BUILD_VERBOSITY)
|
|
$(MAKE) .stamp-install-custom-dotnet-runtime-workloads
|
|
$(Q) touch $@
|
|
|
|
.stamp-install-t4: $(TOP)/.config/dotnet-tools.json .stamp-download-dotnet-packages
|
|
@# https://github.com/dotnet/sdk/issues/16165
|
|
$(Q) rm -f ~/.dotnet/toolResolverCache/*/dotnet-t4
|
|
$(Q) rm -f ~/.dotnet/toolResolverCache/*/dotnet-ilrepack
|
|
$(DOTNET) tool restore
|
|
$(Q) touch $@
|
|
|
|
BundledNETCorePlatformsPackageVersion.txt: .stamp-download-dotnet-packages
|
|
|
|
DOTNET_DOWNLOADS = \
|
|
downloads/$(DOTNET_INSTALL_NAME) \
|
|
.stamp-download-dotnet-packages \
|
|
.stamp-install-t4 \
|
|
|
|
dotnet:: $(DOTNET_DOWNLOADS)
|
|
all-local:: $(DOTNET_DOWNLOADS)
|
|
|
|
clean-local::
|
|
$(Q) rm -Rf downloads
|
|
|
|
DOTNET_COMMON_DIRECTORIES += \
|
|
$(foreach platform,$(DOTNET_PLATFORMS_UPPERCASE),$(DOTNET_DESTDIR)/$($(platform)_NUGET_SDK_NAME)) \
|
|
$(foreach platform,$(DOTNET_PLATFORMS_UPPERCASE),$(DOTNET_DESTDIR)/$($(platform)_NUGET_SDK_NAME)/tools) \
|
|
|
|
DOTNET_COMMON_TARGETS = \
|
|
$(foreach platform,$(DOTNET_PLATFORMS_UPPERCASE),$(DOTNET_DESTDIR)/$($(platform)_NUGET_SDK_NAME)/Versions.plist) \
|
|
$(foreach platform,$(DOTNET_PLATFORMS_UPPERCASE),$(DOTNET_DESTDIR)/$($(platform)_NUGET_SDK_NAME)/tools/buildinfo) \
|
|
|
|
define VersionInfo
|
|
$(DOTNET_DESTDIR)/$($(1)_NUGET_SDK_NAME)/Versions.plist: $(TOP)/builds/Versions-$(1).plist.in Makefile $(TOP)/Make.config $(TOP)/versions-check.csharp | $(DOTNET_DESTDIR)/$($(1)_NUGET_SDK_NAME)
|
|
$$(Q) $(TOP)/versions-check.csharp $$< "$(DOTNET_MIN_IOS_SDK_VERSION)" "$(MAX_IOS_DEPLOYMENT_TARGET)" "$(DOTNET_MIN_TVOS_SDK_VERSION)" "$(MAX_TVOS_DEPLOYMENT_TARGET)" "$(MIN_WATCH_OS_VERSION)" "$(MAX_WATCH_DEPLOYMENT_TARGET)" "$(DOTNET_MIN_MACOS_SDK_VERSION)" "$(MACOS_SDK_VERSION)" "$(DOTNET_MIN_MACCATALYST_SDK_VERSION)" "$(MACCATALYST_SDK_VERSION)"
|
|
$$(Q_GEN) sed -e 's/@XCODE_VERSION@/$(XCODE_VERSION)/g' -e "s/@MONO_VERSION@/$(DOTNET_VERSION)/g" $$< > $$@.tmp
|
|
$$(Q) mv $$@.tmp $$@
|
|
endef
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call VersionInfo,$(platform))))
|
|
|
|
define BuildInfo
|
|
$(DOTNET_DESTDIR)/$($(1)_NUGET_SDK_NAME)/tools/buildinfo: $(TOP)/Make.config.inc $(GIT_DIRECTORY)/index | $(DOTNET_DESTDIR)/$($(1)_NUGET_SDK_NAME)/tools
|
|
$$(Q_GEN) echo "Version: $$($(2)_NUGET_VERSION)" > $$@.tmp
|
|
$$(Q) echo "Hash: $$(shell git log --oneline -1 --pretty=%h)" >> $$@.tmp
|
|
$$(Q) echo "Branch: $$(CURRENT_BRANCH)" >> $$@.tmp
|
|
$$(Q) echo "Build date: $$(shell date '+%Y-%m-%d %H:%M:%S%z')" >> $$@.tmp
|
|
$$(Q) mv $$@.tmp $$@
|
|
endef
|
|
$(foreach platform,$(DOTNET_PLATFORMS),$(eval $(call BuildInfo,$(platform),$(shell echo $(platform) | tr a-z A-Z))))
|
|
|
|
$(DOTNET_COMMON_DIRECTORIES):
|
|
$(Q) mkdir -p $@
|
|
|
|
install-dotnet: $(DOTNET_COMMON_TARGETS)
|
|
install-local:: install-dotnet
|
|
all-local:: install-dotnet
|