From 85b06434363ed73553b3584745ac8b35df9db300 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Thu, 10 Jan 2019 19:08:41 +0100 Subject: [PATCH 1/5] [mtouch] add arm64_32 --- msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs | 4 ++++ tests/mtouch/MTouch.cs | 2 +- tools/mtouch/Application.cs | 10 +++++++++- tools/mtouch/mtouch.cs | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs index 7473c2225464..598c01ff933f 100644 --- a/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs +++ b/msbuild/Xamarin.iOS.Tasks.Core/Tasks/MTouchTaskBase.cs @@ -24,6 +24,7 @@ enum TargetArchitecture ARMv7s = 16, ARMv7k = 32, ARM64 = 64, + ARM64_32 = 128, // Note: needed for backwards compatability ARMv6_ARMv7 = ARMv6 | ARMv7, @@ -487,6 +488,9 @@ protected override string GenerateCommandLineCommands () if (architectures.HasFlag (TargetArchitecture.ARMv7k)) abi += (abi.Length > 0 ? "," : "") + "armv7k" + llvm; + if (architectures.HasFlag (TargetArchitecture.ARM64_32)) + abi += (abi.Length > 0 ? "," : "") + "arm64_32" + llvm; + if (string.IsNullOrEmpty (abi)) abi = "armv7" + llvm + thumb; } diff --git a/tests/mtouch/MTouch.cs b/tests/mtouch/MTouch.cs index 058467f9fc5e..bd91bad6db4a 100644 --- a/tests/mtouch/MTouch.cs +++ b/tests/mtouch/MTouch.cs @@ -676,7 +676,7 @@ public void MT0015 () mtouch.CreateTemporaryApp (); mtouch.Abi = "invalid-arm"; mtouch.AssertExecuteFailure (MTouchAction.BuildSim, "build"); - mtouch.AssertError (15, "Invalid ABI: invalid-arm. Supported ABIs are: i386, x86_64, armv7, armv7+llvm, armv7+llvm+thumb2, armv7s, armv7s+llvm, armv7s+llvm+thumb2, armv7k, armv7k+llvm, arm64 and arm64+llvm."); + mtouch.AssertError (15, "Invalid ABI: invalid-arm. Supported ABIs are: i386, x86_64, armv7, armv7+llvm, armv7+llvm+thumb2, armv7s, armv7s+llvm, armv7s+llvm+thumb2, armv7k, armv7k+llvm, arm64, arm64+llvm, arm64_32 and arm64_32+llvm."); } } diff --git a/tools/mtouch/Application.cs b/tools/mtouch/Application.cs index f936ede38347..bf9f86b7cd6a 100644 --- a/tools/mtouch/Application.cs +++ b/tools/mtouch/Application.cs @@ -702,6 +702,8 @@ public void ValidateAbi () if (IsDeviceBuild) { validAbis.Add (Abi.ARMv7k); validAbis.Add (Abi.ARMv7k | Abi.LLVM); + validAbis.Add (Abi.ARM64_32); + validAbis.Add (Abi.ARM64_32 | Abi.LLVM); } else { validAbis.Add (Abi.i386); } @@ -773,6 +775,12 @@ public void ParseAbi (string abi) case "arm64+llvm": value = Abi.ARM64 | Abi.LLVM; break; + case "arm64_32": + value = Abi.ARM64_32; + break; + case "arm64_32+llvm": + value = Abi.ARM64_32 | Abi.LLVM; + break; case "armv7k": value = Abi.ARMv7k; break; @@ -780,7 +788,7 @@ public void ParseAbi (string abi) value = Abi.ARMv7k | Abi.LLVM; break; default: - throw new MonoTouchException (15, true, "Invalid ABI: {0}. Supported ABIs are: i386, x86_64, armv7, armv7+llvm, armv7+llvm+thumb2, armv7s, armv7s+llvm, armv7s+llvm+thumb2, armv7k, armv7k+llvm, arm64 and arm64+llvm.", str); + throw new MonoTouchException (15, true, "Invalid ABI: {0}. Supported ABIs are: i386, x86_64, armv7, armv7+llvm, armv7+llvm+thumb2, armv7s, armv7s+llvm, armv7s+llvm+thumb2, armv7k, armv7k+llvm, arm64, arm64+llvm, arm64_32 and arm64_32+llvm.", str); } // merge this value with any existing ARMv? already specified. diff --git a/tools/mtouch/mtouch.cs b/tools/mtouch/mtouch.cs index a5adea9eb1a7..ed672fea98c1 100644 --- a/tools/mtouch/mtouch.cs +++ b/tools/mtouch/mtouch.cs @@ -1058,7 +1058,7 @@ static Application ParseArguments (string [] args, out Action a) }, true // do not show the option anymore }, - { "abi=", "Comma-separated list of ABIs to target. Currently supported: armv7, armv7+llvm, armv7+llvm+thumb2, armv7s, armv7s+llvm, armv7s+llvm+thumb2, arm64, arm64+llvm, i386, x86_64", v => app.ParseAbi (v) }, + { "abi=", "Comma-separated list of ABIs to target. Currently supported: armv7, armv7+llvm, armv7+llvm+thumb2, armv7s, armv7s+llvm, armv7s+llvm+thumb2, arm64, arm64+llvm, arm64_32, arm64_32+llvm, i386, x86_64", v => app.ParseAbi (v) }, { "override-abi=", "Override any previous abi. Only used for testing.", v => { app.ClearAbi (); app.ParseAbi (v); }, true }, // Temporary command line arg until XS has better support for 64bit architectures. { "cxx", "Enable C++ support", v => { app.EnableCxx = true; }}, { "enable-repl:", "Enable REPL support (simulator and not linking only)", v => { app.EnableRepl = ParseBool (v, "enable-repl"); }, true /* this is a hidden option until we've actually used it and made sure it works as expected */ }, From 372082717df685d50be4ba7969f5daf1d382bfa6 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Fri, 18 Jan 2019 15:26:51 +0100 Subject: [PATCH 2/5] [mtouch] mono native hack for newer Watch --- tools/mtouch/Application.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/mtouch/Application.cs b/tools/mtouch/Application.cs index bf9f86b7cd6a..eb936f22f979 100644 --- a/tools/mtouch/Application.cs +++ b/tools/mtouch/Application.cs @@ -1447,7 +1447,10 @@ void SelectMonoNative () MonoNativeMode = DeploymentTarget.Major >= 10 ? MonoNativeMode.Unified : MonoNativeMode.Compat; break; case ApplePlatform.WatchOS: - MonoNativeMode = DeploymentTarget.Major >= 3 ? MonoNativeMode.Unified : MonoNativeMode.Compat; + if (DeploymentTarget.Major >= 5 && DeploymentTarget.Minor > 0) + MonoNativeMode = MonoNativeMode.None; + else + MonoNativeMode = DeploymentTarget.Major >= 3 ? MonoNativeMode.Unified : MonoNativeMode.Compat; break; default: MonoNativeMode = MonoNativeMode.None; From 2bf31e7cef61d03b86e2506ac2d6bfec3f1f5a0b Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Fri, 18 Jan 2019 15:27:10 +0100 Subject: [PATCH 3/5] [build] add targetwatch64_32 rules --- Make.config | 2 + builds/Makefile | 146 ++++++++++++++++++++++++++++++++++----------- mk/rules.mk | 13 ++++ runtime/Makefile | 10 +++- runtime/bindings.h | 2 +- 5 files changed, 135 insertions(+), 38 deletions(-) diff --git a/Make.config b/Make.config index 0a9e5c7012b2..7d20657072ed 100644 --- a/Make.config +++ b/Make.config @@ -215,7 +215,9 @@ SIMULATORWATCH_OBJC_CFLAGS = $(SIMULATORWATCH_CFLAGS) $(COMMON_SIMULATOR_OBJC_CF 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_WATCHOS_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 diff --git a/builds/Makefile b/builds/Makefile index 41c8a06b7c75..5d15f4efe977 100644 --- a/builds/Makefile +++ b/builds/Makefile @@ -1310,15 +1310,16 @@ WATCHOS_BIN_PATH = $(XCODE_DEVELOPER_ROOT)/Toolchains/XcodeDefault.xctoolchain/u ifdef INCLUDE_WATCH ifdef INCLUDE_DEVICE -build:: build-targetwatch -clean-local:: clean-targetwatch +build:: build-targetwatch build-targetwatch64_32 +clean-local:: clean-targetwatch clean-targetwatch64_32 install-local:: install-watchos all-local:: install-watchos targetwatch: build-targetwatch install-watchos -watchos:: targetwatch +targetwatch64_32: build-targetwatch64_32 install-watch64_32 +watchos:: targetwatch targetwatch64_32 -.PHONY: targetwatch +.PHONY: targetwatch targetwatch64_32 .stamp-build-targetwatch: $(MONO_PATH)/configure $(SDK_CONFIG) $(MONO_DEPENDENCIES) $(MAKE) -C $(SDK_BUILDDIR) package-ios-targetwatch $(SDK_ARGS) @@ -1326,35 +1327,88 @@ watchos:: targetwatch $(Q) $(CP) -r $(SDK_DESTDIR)/ios-targetwatch-release/* $(BUILD_DESTDIR)/targetwatch $(Q) touch $@ +.stamp-build-targetwatch64_32: $(MONO_PATH)/configure $(SDK_CONFIG) $(MONO_DEPENDENCIES) + $(MAKE) -C $(SDK_BUILDDIR) package-ios-targetwatch64_32 $(SDK_ARGS) + $(Q) mkdir -p $(BUILD_DESTDIR)/targetwatch64_32 + $(Q) $(CP) -r $(SDK_DESTDIR)/ios-targetwatch64_32-release/* $(BUILD_DESTDIR)/targetwatch64_32 + $(Q) touch $@ + build-targetwatch: .stamp-build-targetwatch +build-targetwatch64_32: .stamp-build-targetwatch64_32 clean-targetwatch: $(Q) rm -rf $(BUILD_DESTDIR)/targetwatch .stamp-*-targetwatch $(MAKE) -C $(SDK_BUILDDIR) clean-ios-targetwatch $(SDK_ARGS) -setup-watchos: setup-targetwatch -build-watchos: build-targetwatch -clean-watchos: clean-targetwatch - -WATCHOS_TARGET_LIBMONOSGEN = $(BUILD_DESTDIR)/targetwatch/lib/libmonosgen-2.0.a -WATCHOS_TARGET_SHAREDMONOSGEN = $(BUILD_DESTDIR)/targetwatch/lib/libmonosgen-2.0.dylib -WATCHOS_TARGET_LIBLOGPROFILER = $(BUILD_DESTDIR)/targetwatch/lib/libmono-profiler-log-static.a -WATCHOS_TARGET_LIBMONOEEINTERP = $(BUILD_DESTDIR)/targetwatch/lib/libmono-ee-interp.a -WATCHOS_TARGET_LIBMONOICALLTABLE = $(BUILD_DESTDIR)/targetwatch/lib/libmono-icall-table.a -WATCHOS_TARGET_LIBMONOILGEN = $(BUILD_DESTDIR)/targetwatch/lib/libmono-ilgen.a -WATCHOS_TARGET_SHAREDLIBLOGPROFILER = $(BUILD_DESTDIR)/targetwatch/lib/libmono-profiler-log.0.dylib -WATCHOS_TARGET_LIBMONONATIVECOMPAT = $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.a -WATCHOS_TARGET_LIBMONONATIVEUNIFIED = $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-unified.a -WATCHOS_TARGET_SHAREDLIBMONONATIVECOMPAT = $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.dylib -WATCHOS_TARGET_SHAREDLIBMONONATIVEUNIFIED = $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-unified.dylib - -$(WATCHOS_TARGET_LIBMONOSGEN): .stamp-build-targetwatch -$(WATCHOS_TARGET_SHAREDMONOSGEN): .stamp-build-targetwatch -$(WATCHOS_TARGET_LIBLOGPROFILER): .stamp-build-targetwatch -$(WATCHOS_TARGET_LIBMONOEEINTERP): .stamp-build-targetwatch -$(WATCHOS_TARGET_LIBMONOICALLTABLE): .stamp-build-targetwatch -$(WATCHOS_TARGET_LIBMONOILGEN): .stamp-build-targetwatch -$(WATCHOS_TARGET_SHAREDLIBLOGPROFILER): .stamp-build-targetwatch +clean-targetwatch64_32: + $(Q) rm -rf $(BUILD_DESTDIR)/targetwatch64_32 .stamp-*-targetwatch64_32 + $(MAKE) -C $(SDK_BUILDDIR) clean-ios-targetwatch64_32 $(SDK_ARGS) + + +setup-watchos: setup-targetwatch setup-targetwatch64_32 +build-watchos: build-targetwatch build-targetwatch64_32 +clean-watchos: clean-targetwatch clean-targetwatch64_32 + +WATCHOS_TARGET_LIBMONOSGEN = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmonosgen-2.0.a \ + $(BUILD_DESTDIR)/targetwatch64_32/lib/libmonosgen-2.0.a + +WATCHOS_TARGET_SHAREDMONOSGEN = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmonosgen-2.0.dylib \ + $(BUILD_DESTDIR)/targetwatch64_32/lib/libmonosgen-2.0.dylib + +WATCHOS_TARGET_LIBLOGPROFILER = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-profiler-log-static.a \ + $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-profiler-log-static.a + +WATCHOS_TARGET_LIBMONOEEINTERP = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-ee-interp.a \ + $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-ee-interp.a + +WATCHOS_TARGET_LIBMONOICALLTABLE = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-icall-table.a \ + $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-icall-table.a + +WATCHOS_TARGET_LIBMONOILGEN = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-ilgen.a \ + $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-ilgen.a + +WATCHOS_TARGET_SHAREDLIBLOGPROFILER = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-profiler-log.0.dylib \ + $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-profiler-log.0.dylib + +WATCHOS_TARGET_MONOFRAMEWORK = \ + $(BUILD_DESTDIR)/targetwatch/tmp-lib/Mono \ + $(BUILD_DESTDIR)/targetwatch64_32/tmp-lib/Mono + +WATCHOS_TARGET_LIBMONONATIVE = \ + $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native.a +# $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.a + +WATCHOS_TARGET_LIBMONONATIVECOMPAT = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.a \ +# $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native-compat.a + +WATCHOS_TARGET_LIBMONONATIVEUNIFIED = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-unified.a +# $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native-unified.a + +WATCHOS_TARGET_SHAREDLIBMONONATIVECOMPAT = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.dylib +# $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native-compat.dylib + +WATCHOS_TARGET_SHAREDLIBMONONATIVEUNIFIED = \ + $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-unified.dylib +# $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native-unified.dylib + +$(WATCHOS_TARGET_LIBMONOSGEN): .stamp-build-targetwatch .stamp-build-targetwatch64_32 +$(WATCHOS_TARGET_SHAREDMONOSGEN): .stamp-build-targetwatch .stamp-build-targetwatch64_32 +$(WATCHOS_TARGET_LIBLOGPROFILER): .stamp-build-targetwatch .stamp-build-targetwatch64_32 +$(WATCHOS_TARGET_LIBMONOEEINTERP): .stamp-build-targetwatch .stamp-build-targetwatch64_32 +$(WATCHOS_TARGET_LIBMONOICALLTABLE): .stamp-build-targetwatch .stamp-build-targetwatch64_32 +$(WATCHOS_TARGET_LIBMONOILGEN): .stamp-build-targetwatch .stamp-build-targetwatch64_32 +$(WATCHOS_TARGET_SHAREDLIBLOGPROFILER): .stamp-build-targetwatch .stamp-build-targetwatch64_32 +$(WATCHOS_TARGET_LIBMONONATIVE): .stamp-build-targetwatch64_32 $(WATCHOS_TARGET_LIBMONONATIVECOMPAT): .stamp-build-targetwatch $(WATCHOS_TARGET_LIBMONONATIVEUNIFIED): .stamp-build-targetwatch $(WATCHOS_TARGET_SHAREDLIBMONONATIVECOMPAT): .stamp-build-targetwatch @@ -1369,6 +1423,7 @@ WATCHOS_TARGETS = \ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-ee-interp.a \ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-icall-table.a \ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-ilgen.a \ + $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native.a \ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-compat.a \ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-unified.a \ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-compat.dylib \ @@ -1385,7 +1440,9 @@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmonosgen-2.0.a: $(WATCHOS_TARGET $(Q) $(WATCHOS_BIN_PATH)/lipo $(WATCHOS_TARGET_LIBMONOSGEN) -create -output $@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmonosgen-2.0.dylib: $(WATCHOS_TARGET_SHAREDMONOSGEN) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib - $(Q_STRIP) $(WATCHOS_BIN_PATH)/bitcode_strip $(WATCHOS_TARGET_SHAREDMONOSGEN) -m -o $@ + $(Q_STRIP) $(WATCHOS_BIN_PATH)/bitcode_strip $(BUILD_DESTDIR)/targetwatch/lib/libmonosgen-2.0.dylib -m -o $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmonosgen-2.0.dylib + $(Q_STRIP) $(WATCHOS_BIN_PATH)/bitcode_strip $(BUILD_DESTDIR)/targetwatch64_32/lib/libmonosgen-2.0.dylib -m -o $(BUILD_DESTDIR)/targetwatch64_32/tmp-lib/libmonosgen-2.0.dylib + $(Q_STRIP) $(WATCHOS_BIN_PATH)/lipo $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmonosgen-2.0.dylib $(BUILD_DESTDIR)/targetwatch64_32/tmp-lib/libmonosgen-2.0.dylib -create -output $@ $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmonosgen-2.0.dylib $@ $(Q) dsymutil -t 4 -o $@.dSYM $@ @@ -1402,10 +1459,18 @@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-ilgen.a: $(WATCHOS_TARGET_L $(Q) $(WATCHOS_BIN_PATH)/lipo $(WATCHOS_TARGET_LIBMONOILGEN) -create -output $@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-profiler-log.dylib: $(WATCHOS_TARGET_SHAREDLIBLOGPROFILER) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib - $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(WATCHOS_TARGET_SHAREDLIBLOGPROFILER) -m -o $@ - $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-profiler-log.dylib -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmonosgen-2.0.1.dylib @rpath/libmonosgen-2.0.dylib $@ + $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(BUILD_DESTDIR)/targetwatch/lib/libmono-profiler-log.0.dylib -m -o $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-profiler-log.0.dylib + $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-profiler-log.0.dylib -m -o $(BUILD_DESTDIR)/targetwatch64_32/tmp-lib/libmono-profiler-log.0.dylib + $(Q) $(WATCHOS_BIN_PATH)/lipo $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-profiler-log.0.dylib $(BUILD_DESTDIR)/targetwatch64_32/tmp-lib/libmono-profiler-log.0.dylib -create -output $@ + $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-profiler-log.dylib \ + -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmonosgen-2.0.1.dylib @rpath/libmonosgen-2.0.dylib \ + -change $(SDK_DESTDIR)/ios-targetwatch64_32-release/lib/libmonosgen-2.0.1.dylib @rpath/libmonosgen-2.0.dylib \ + $@ $(Q) dsymutil -t 4 -o $@.dSYM $@ +$(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native.a: $(WATCHOS_TARGET_LIBMONONATIVE) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib + $(Q) $(WATCHOS_BIN_PATH)/lipo $(WATCHOS_TARGET_LIBMONONATIVE) -create -output $@ + $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-compat.a: $(WATCHOS_TARGET_LIBMONONATIVECOMPAT) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib $(Q) $(WATCHOS_BIN_PATH)/lipo $(WATCHOS_TARGET_LIBMONONATIVECOMPAT) -create -output $@ @@ -1413,20 +1478,26 @@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-unified.a: $(WATCHOS $(Q) $(WATCHOS_BIN_PATH)/lipo $(WATCHOS_TARGET_LIBMONONATIVEUNIFIED) -create -output $@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-compat.dylib: $(WATCHOS_TARGET_SHAREDLIBMONONATIVECOMPAT) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib - $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(WATCHOS_TARGET_SHAREDLIBMONONATIVECOMPAT) -m -o $@ - $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-native-compat.dylib -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmono-native-compat.dylib @rpath/libmono-native-compat.dylib $@ + $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.dylib -m -o $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-native-compat.dylib + $(Q_STRIP) $(WATCHOS_BIN_PATH)/lipo $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-native-compat.dylib -create -output $@ + $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-native-compat.dylib \ + -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmono-native-compat.dylib @rpath/libmono-native-compat.dylib \ + $@ $(Q) dsymutil -t 4 -o $@.dSYM $@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-unified.dylib: $(WATCHOS_TARGET_SHAREDLIBMONONATIVEUNIFIED) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib - $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(WATCHOS_TARGET_SHAREDLIBMONONATIVEUNIFIED) -m -o $@ - $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-native-unified.dylib -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmono-native-unified.dylib @rpath/libmono-native-unified.dylib $@ + $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-unified.dylib -m -o $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-native-unified.dylib + $(Q_STRIP) $(WATCHOS_BIN_PATH)/lipo $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-native-unified.dylib -create -output $@ + $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-native-unified.dylib \ + -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmono-native-unified.dylib @rpath/libmono-native-unified.dylib \ + $@ $(Q) dsymutil -t 4 -o $@.dSYM $@ $(WATCHOS_DIRECTORIES): $(Q) mkdir -p $@ -$(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks/Mono.framework/Mono: $(BUILD_DESTDIR)/targetwatch/tmp-lib/Mono | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks/Mono.framework - $(Q) $(CP) $< $@ +$(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks/Mono.framework/Mono: $(WATCHOS_TARGET_MONOFRAMEWORK) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks/Mono.framework + $(Q) lipo $(WATCHOS_TARGET_MONOFRAMEWORK) -create -output $@ $(Q) dsymutil -t 4 -o $(patsubst %/,%,$(dir $@)).dSYM $@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks/Mono.framework/Info.plist: Mono.framework-watchos.Info.plist | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks/Mono.framework @@ -1435,6 +1506,9 @@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks/Mono.framework/Info.plist: Mono. $(BUILD_DESTDIR)/targetwatch/tmp-lib/Mono: $(BUILD_DESTDIR)/targetwatch/lib/libmonosgen-2.0.a $(Q_GEN) CC="$(IOS_CC)" ./create-shared-library.sh $< $@ -arch armv7k -install_name @rpath/Mono.framework/Mono -mwatchos-version-min=$(MIN_WATCHOS_SDK_VERSION) -isysroot $(DEVICEWATCH_SDK) -lc++ -fembed-bitcode +$(BUILD_DESTDIR)/targetwatch64_32/tmp-lib/Mono: $(BUILD_DESTDIR)/targetwatch64_32/lib/libmonosgen-2.0.a + $(Q_GEN) CC="$(IOS_CC)" ./create-shared-library.sh $< $@ -arch arm64_32 -install_name @rpath/Mono.framework/Mono -mwatchos-version-min=$(MIN_WATCHOS_SDK_VERSION) -isysroot $(DEVICEWATCH_SDK) -lc++ -fembed-bitcode + install-watchos: $(WATCHOS_TARGETS) endif # INCLUDE_DEVICE diff --git a/mk/rules.mk b/mk/rules.mk index efb37a6c7f29..0138c516e2ef 100644 --- a/mk/rules.mk +++ b/mk/rules.mk @@ -12,6 +12,7 @@ DEV64_I := $(COMMON_I) SIMW_I := $(COMMON_I) DEVW_I := $(COMMON_I) +DEVW64_32_I := $(COMMON_I) SIM_TV_I:= $(COMMON_I) DEV_TV_I:= $(COMMON_I) @@ -117,6 +118,18 @@ define NativeCompilationTemplate .libs/watchos/%$(1).armv7k.framework: | .libs/watchos $$(call Q_2,LD, [watchos]) $(DEVICE_CC) $(DEVICEWATCH_CFLAGS) $$(EXTRA_FLAGS) -dynamiclib -o $$@ $$^ -F$(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks -fapplication-extension +.libs/watchos/%$(1).arm64_32.o: %.m $(EXTRA_DEPENDENCIES) | .libs/watchos + $$(call Q_2,OBJC, [watchos]) $(DEVICE_CC) $(DEVICEWATCH64_32_OBJC_CFLAGS) $$(EXTRA_DEFINES) $(DEVW64_32_I) -g $(2) -c $$< -o $$@ + +.libs/watchos/%$(1).arm64_32.o: %.c $(EXTRA_DEPENDENCIES) | .libs/watchos + $$(call Q_2,CC, [watchos]) $(DEVICE_CC) $(DEVICEWATCH64_32_CFLAGS) $$(EXTRA_DEFINES) $(DEVW64_32_I) -g $(2) -c $$< -o $$@ + +.libs/watchos/%$(1).arm64_32.dylib: | .libs/watchos + $$(call Q_2,LD, [watchos]) $(DEVICE_CC) $(DEVICEWATCH64_32_CFLAGS) $$(EXTRA_FLAGS) -dynamiclib -o $$@ $$^ -L$(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib -fapplication-extension + +.libs/watchos/%$(1).arm64_32.framework: | .libs/watchos + $$(call Q_2,LD, [watchos]) $(DEVICE_CC) $(DEVICEWATCH64_32_CFLAGS) $$(EXTRA_FLAGS) -dynamiclib -o $$@ $$^ -F$(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/Frameworks -fapplication-extension + ## tv simulator .libs/tvos/%$(1).x86_64.o: %.m $(EXTRA_DEPENDENCIES) | .libs/tvos diff --git a/runtime/Makefile b/runtime/Makefile index 7ec2328b2dc6..3de7ec0d4f31 100644 --- a/runtime/Makefile +++ b/runtime/Makefile @@ -194,7 +194,7 @@ $(eval $(call PlatformTemplate,ios,IOS,armv7 armv7s arm64,x86 x86_64,IOS,IPHONE) endif ifdef INCLUDE_WATCH -$(eval $(call PlatformTemplate,watchos,WATCHOS,armv7k,x86,WATCH,WATCH)) +$(eval $(call PlatformTemplate,watchos,WATCHOS,armv7k arm64_32,x86,WATCH,WATCH)) endif ifdef INCLUDE_TVOS @@ -318,6 +318,7 @@ ZLIB_HELPER_IOS_x86 = $(SDK_BUILDDIR)/ios-sim32-release/support/zlib-help ZLIB_HELPER_IOS_x86_64 = $(SDK_BUILDDIR)/ios-sim64-release/support/zlib-helper.o ZLIB_HELPER_WATCHOS_armv7k = $(SDK_BUILDDIR)/ios-targetwatch-release/support/zlib-helper.o +ZLIB_HELPER_WATCHOS_arm64_32 = $(SDK_BUILDDIR)/ios-targetwatch64_32-release/support/zlib-helper.o ZLIB_HELPER_WATCHOS_x86 = $(SDK_BUILDDIR)/ios-simwatch-release/support/zlib-helper.o ZLIB_HELPER_TVOS_arm64 = $(SDK_BUILDDIR)/ios-targettv-release/support/zlib-helper.o @@ -345,6 +346,7 @@ armv7_$(1)$(3)_OBJECTS = $(ZLIB_HELPER_$(2)_armv7) $$(patsubst %,.libs/$(1)/%$ armv7s_$(1)$(3)_OBJECTS = $(ZLIB_HELPER_$(2)_armv7s) $$(patsubst %,.libs/$(1)/%$(4).armv7s.o,$$($(2)_SOURCE_STEMS)) armv7k_$(1)$(3)_OBJECTS = $(ZLIB_HELPER_$(2)_armv7k) $$(patsubst %,.libs/$(1)/%$(4).armv7k.o,$$($(2)_SOURCE_STEMS)) arm64_$(1)$(3)_OBJECTS = $(ZLIB_HELPER_$(2)_arm64) $$(patsubst %,.libs/$(1)/%$(4).arm64.o,$$($(2)_SOURCE_STEMS)) +arm64_32_$(1)$(3)_OBJECTS = $(ZLIB_HELPER_$(2)_arm64_32) $$(patsubst %,.libs/$(1)/%$(4).arm64_32.o,$$($(2)_SOURCE_STEMS)) $$(foreach arch,$$($(2)_ARCHITECTURES),$$(eval $$(call LibXamarinArchTemplate,$(1),$(2),$(3),$(4),$$(arch)))) @@ -370,6 +372,9 @@ $$(foreach arch,$$($(2)_ARCHITECTURES),$$(eval $$(call LibXamarinArchTemplate,$( .libs/$(1)/libxamarin$(4).armv7k.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS) .libs/$(1)/libxamarin$(4).armv7k.dylib: $$(armv7k_$(1)$(3)_OBJECTS) +.libs/$(1)/libxamarin$(4).arm64_32.dylib: EXTRA_FLAGS=$$($(1)$(3)_COMMON_DYLIB_FLAGS) +.libs/$(1)/libxamarin$(4).arm64_32.dylib: $$(arm64_32_$(1)$(3)_OBJECTS) + .libs/$(1)/Xamarin$(4).x86.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS) .libs/$(1)/Xamarin$(4).x86.framework: $$(x86_$(1)$(3)_OBJECTS) @@ -387,6 +392,9 @@ $$(foreach arch,$$($(2)_ARCHITECTURES),$$(eval $$(call LibXamarinArchTemplate,$( .libs/$(1)/Xamarin$(4).armv7k.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS) .libs/$(1)/Xamarin$(4).armv7k.framework: $$(armv7k_$(1)$(3)_OBJECTS) + +.libs/$(1)/Xamarin$(4).arm64_32.framework: EXTRA_FLAGS=$$($(1)$(3)_COMMON_FRAMEWORK_FLAGS) +.libs/$(1)/Xamarin$(4).arm64_32.framework: $$(arm64_32_$(1)$(3)_OBJECTS) endef $(eval $(call LibXamarinTemplate,ios,IOS)) diff --git a/runtime/bindings.h b/runtime/bindings.h index e98d8d3e0544..cc8f6ea3dd0a 100644 --- a/runtime/bindings.h +++ b/runtime/bindings.h @@ -221,7 +221,7 @@ struct MPSImageHistogramInfoWrapper { // entire struct on a 16-byte boundary, which doesn't match how we've // defined it in managed code (explicit layout, but no specific alignment). // So we need to manually pad the struct to match the managed definition. -#if defined (__x86_64__) || defined (__arm64__) +#if !defined(__ILP32__) uint8_t dummy[7]; #else uint8_t dummy[11]; From 4637e75ef07f61241572957197032a5063d7761e Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Fri, 18 Jan 2019 16:40:54 +0100 Subject: [PATCH 4/5] undo libmono-native-compat/unified build changes --- builds/Makefile | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/builds/Makefile b/builds/Makefile index 5d15f4efe977..a8c6e7bcc8dd 100644 --- a/builds/Makefile +++ b/builds/Makefile @@ -1478,19 +1478,13 @@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-unified.a: $(WATCHOS $(Q) $(WATCHOS_BIN_PATH)/lipo $(WATCHOS_TARGET_LIBMONONATIVEUNIFIED) -create -output $@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-compat.dylib: $(WATCHOS_TARGET_SHAREDLIBMONONATIVECOMPAT) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib - $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.dylib -m -o $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-native-compat.dylib - $(Q_STRIP) $(WATCHOS_BIN_PATH)/lipo $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-native-compat.dylib -create -output $@ - $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-native-compat.dylib \ - -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmono-native-compat.dylib @rpath/libmono-native-compat.dylib \ - $@ + $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(WATCHOS_TARGET_SHAREDLIBMONONATIVECOMPAT) -m -o $@ + $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-native-compat.dylib -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmono-native-compat.dylib @rpath/libmono-native-compat.dylib $@ $(Q) dsymutil -t 4 -o $@.dSYM $@ $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib/libmono-native-unified.dylib: $(WATCHOS_TARGET_SHAREDLIBMONONATIVEUNIFIED) | $(IOS_DESTDIR)$(XAMARIN_WATCHOS_SDK)/usr/lib - $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-unified.dylib -m -o $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-native-unified.dylib - $(Q_STRIP) $(WATCHOS_BIN_PATH)/lipo $(BUILD_DESTDIR)/targetwatch/tmp-lib/libmono-native-unified.dylib -create -output $@ - $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-native-unified.dylib \ - -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmono-native-unified.dylib @rpath/libmono-native-unified.dylib \ - $@ + $(Q) $(WATCHOS_BIN_PATH)/bitcode_strip $(WATCHOS_TARGET_SHAREDLIBMONONATIVEUNIFIED) -m -o $@ + $(Q) $(WATCHOS_BIN_PATH)/install_name_tool -id @rpath/libmono-native-unified.dylib -change $(SDK_DESTDIR)/ios-targetwatch-release/lib/libmono-native-unified.dylib @rpath/libmono-native-unified.dylib $@ $(Q) dsymutil -t 4 -o $@.dSYM $@ $(WATCHOS_DIRECTORIES): From 5064bf0d3226fcc1e6331621e827b80b78eac497 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Fri, 18 Jan 2019 16:41:19 +0100 Subject: [PATCH 5/5] remove commented libs --- builds/Makefile | 5 ----- 1 file changed, 5 deletions(-) diff --git a/builds/Makefile b/builds/Makefile index a8c6e7bcc8dd..2a789837680c 100644 --- a/builds/Makefile +++ b/builds/Makefile @@ -1383,23 +1383,18 @@ WATCHOS_TARGET_MONOFRAMEWORK = \ WATCHOS_TARGET_LIBMONONATIVE = \ $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native.a -# $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.a WATCHOS_TARGET_LIBMONONATIVECOMPAT = \ $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.a \ -# $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native-compat.a WATCHOS_TARGET_LIBMONONATIVEUNIFIED = \ $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-unified.a -# $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native-unified.a WATCHOS_TARGET_SHAREDLIBMONONATIVECOMPAT = \ $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-compat.dylib -# $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native-compat.dylib WATCHOS_TARGET_SHAREDLIBMONONATIVEUNIFIED = \ $(BUILD_DESTDIR)/targetwatch/lib/libmono-native-unified.dylib -# $(BUILD_DESTDIR)/targetwatch64_32/lib/libmono-native-unified.dylib $(WATCHOS_TARGET_LIBMONOSGEN): .stamp-build-targetwatch .stamp-build-targetwatch64_32 $(WATCHOS_TARGET_SHAREDMONOSGEN): .stamp-build-targetwatch .stamp-build-targetwatch64_32