From 0205361327c885e2c73f6c79e8fb0af4359949e2 Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Thu, 29 Oct 2020 11:05:50 +0300 Subject: [PATCH 01/10] Copy iOS sample to a separate location --- .../Mono.Samples/Directory.Build.props | 8 ++ .../tests/Functional/iOS/Makefile | 21 +++++ .../Mono.Samples.iOS.Functional.Tests.csproj | 88 +++++++++++++++++++ .../tests/Functional/iOS/Program.cs | 53 +++++++++++ .../Mono.Samples/tests/Functional/iOS/main.m | 80 +++++++++++++++++ 5 files changed, 250 insertions(+) create mode 100644 src/libraries/Mono.Samples/Directory.Build.props create mode 100644 src/libraries/Mono.Samples/tests/Functional/iOS/Makefile create mode 100644 src/libraries/Mono.Samples/tests/Functional/iOS/Mono.Samples.iOS.Functional.Tests.csproj create mode 100644 src/libraries/Mono.Samples/tests/Functional/iOS/Program.cs create mode 100644 src/libraries/Mono.Samples/tests/Functional/iOS/main.m diff --git a/src/libraries/Mono.Samples/Directory.Build.props b/src/libraries/Mono.Samples/Directory.Build.props new file mode 100644 index 00000000000000..0bd49e8f922c20 --- /dev/null +++ b/src/libraries/Mono.Samples/Directory.Build.props @@ -0,0 +1,8 @@ + + + false + false + true + + + diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile b/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile new file mode 100644 index 00000000000000..36dec2bc18dabf --- /dev/null +++ b/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile @@ -0,0 +1,21 @@ +MONO_CONFIG=Debug +MONO_ARCH=x64 +DOTNET := ../../../../.././dotnet.sh +USE_LLVM=True + +all: runtimepack run + +TOOLS_DIR=../../../../../tools-local/tasks/mobile.tasks +appbuilder: + $(DOTNET) build -c Release $(TOOLS_DIR)/AotCompilerTask/MonoAOTCompiler.csproj + $(DOTNET) build -c Release $(TOOLS_DIR)/AppleAppBuilder/AppleAppBuilder.csproj + +runtimepack: + ../../../../.././build.sh Mono+Libs -os iOS -arch $(MONO_ARCH) -c $(MONO_CONFIG) + +run: clean appbuilder + $(DOTNET) publish -c $(MONO_CONFIG) /p:TargetArchitecture=$(MONO_ARCH) \ + /p:UseLLVM=$(USE_LLVM) /p:UseAotForSimulator=true + +clean: + rm -rf bin diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/Mono.Samples.iOS.Functional.Tests.csproj b/src/libraries/Mono.Samples/tests/Functional/iOS/Mono.Samples.iOS.Functional.Tests.csproj new file mode 100644 index 00000000000000..832b98b5502f51 --- /dev/null +++ b/src/libraries/Mono.Samples/tests/Functional/iOS/Mono.Samples.iOS.Functional.Tests.csproj @@ -0,0 +1,88 @@ + + + Exe + bin + Portable + $(NetCoreAppCurrent) + iOS + $(ArtifactsBinDir)microsoft.netcore.app.runtime.ios-$(TargetArchitecture)\$(Configuration)\runtimes\ios-$(TargetArchitecture)\ + false + ios-$(TargetArchitecture) + true + <_TrimmerDefaultAction>link + True + true + false + + + + + + + $(ArtifactsBinDir)microsoft.netcore.app.runtime.ios-$(TargetArchitecture)\$(Configuration) + + + + + + + + + + + + + $(MSBuildThisFileDirectory)$(PublishDir)\app + iPhone 11 + + + + + + + + @(MonoAOTCompilerDefaultAotArguments, ';') + @(MonoAOTCompilerDefaultProcessArguments, ';') + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/Program.cs b/src/libraries/Mono.Samples/tests/Functional/iOS/Program.cs new file mode 100644 index 00000000000000..9769ded207e150 --- /dev/null +++ b/src/libraries/Mono.Samples/tests/Functional/iOS/Program.cs @@ -0,0 +1,53 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System; +using System.Threading; +using System.Threading.Tasks; +using System.Runtime.InteropServices; + +// it's not part of the BCL but runtime needs it for native-to-managed callbacks in AOT +// To be replaced with NativeCallableAttribute +public class MonoPInvokeCallbackAttribute : Attribute +{ + public MonoPInvokeCallbackAttribute(Type delegateType) { } +} + +public static class Program +{ + // Defined in main.m + [DllImport("__Internal")] + private extern static void ios_set_text(string value); + + [DllImport("__Internal")] + private extern static void ios_register_button_click(Action action); + + private static Action buttonClickHandler = null; + + private static int counter = 0; + + // Called by native code, see main.m + [MonoPInvokeCallback(typeof(Action))] + private static void OnButtonClick() + { + ios_set_text("OnButtonClick! #" + counter++); + } + + public static async Task Main(string[] args) + { + // Register a managed callback (will be called by UIButton, see main.m) + // Also, keep the handler alive so GC won't collect it. + ios_register_button_click(buttonClickHandler = OnButtonClick); + + const string msg = "Hello World!\n.NET 5.0"; + for (int i = 0; i < msg.Length; i++) + { + // a kind of an animation + ios_set_text(msg.Substring(0, i + 1)); + await Task.Delay(100); + } + + Console.WriteLine("Done!"); + await Task.Delay(-1); + } +} diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/main.m b/src/libraries/Mono.Samples/tests/Functional/iOS/main.m new file mode 100644 index 00000000000000..0ab407e8398682 --- /dev/null +++ b/src/libraries/Mono.Samples/tests/Functional/iOS/main.m @@ -0,0 +1,80 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +#import +#import "runtime.h" + +@interface ViewController : UIViewController +@end + +@interface AppDelegate : UIResponder +@property (strong, nonatomic) UIWindow *window; +@property (strong, nonatomic) ViewController *controller; +@end + +@implementation AppDelegate +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + self.controller = [[ViewController alloc] initWithNibName:nil bundle:nil]; + self.window.rootViewController = self.controller; + [self.window makeKeyAndVisible]; + return YES; +} +@end + +UILabel *label; +void (*clickHandlerPtr)(void); + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + label = [[UILabel alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; + label.textColor = [UIColor greenColor]; + label.font = [UIFont boldSystemFontOfSize: 30]; + label.numberOfLines = 2; + label.textAlignment = NSTextAlignmentCenter; + [self.view addSubview:label]; + + UIButton *button = [UIButton buttonWithType:UIButtonTypeInfoDark]; + [button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; + [button setFrame:CGRectMake(50, 300, 200, 50)]; + [button setTitle:@"Click me" forState:UIControlStateNormal]; + [button setExclusiveTouch:YES]; + [self.view addSubview:button]; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + mono_ios_runtime_init (); + }); +} +-(void) buttonClicked:(UIButton*)sender +{ + if (clickHandlerPtr) + clickHandlerPtr(); +} + +@end + +// called from C# sample +void +ios_register_button_click (void* ptr) +{ + clickHandlerPtr = ptr; +} + +// called from C# sample +void +ios_set_text (const char* value) +{ + NSString* nsstr = [NSString stringWithUTF8String:strdup(value)]; + dispatch_async(dispatch_get_main_queue(), ^{ + label.text = nsstr; + }); +} + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} From 09239b60002b9d32723f61f68b34651326ad8ce5 Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Thu, 29 Oct 2020 12:17:45 +0300 Subject: [PATCH 02/10] Exclude iOS sample for other OSs --- src/libraries/tests.proj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 511f7f68fe0020..8cc7aff8da068e 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -151,6 +151,10 @@ + + + + From d6ade59cda70d15b7d2cbc4628f58485678058f1 Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Thu, 29 Oct 2020 17:25:05 +0300 Subject: [PATCH 03/10] Remove properties redundant for CI from Directory.Build.props MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleksey Kliger (λgeek) --- src/libraries/Mono.Samples/Directory.Build.props | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/libraries/Mono.Samples/Directory.Build.props b/src/libraries/Mono.Samples/Directory.Build.props index 0bd49e8f922c20..6b3e60b4533199 100644 --- a/src/libraries/Mono.Samples/Directory.Build.props +++ b/src/libraries/Mono.Samples/Directory.Build.props @@ -1,8 +1,5 @@ - false - false - true From 634c57047648a3661ed64c84e8c91a0face96544 Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Thu, 29 Oct 2020 17:25:52 +0300 Subject: [PATCH 04/10] Remove make file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Aleksey Kliger (λgeek) --- .../tests/Functional/iOS/Makefile | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile b/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile index 36dec2bc18dabf..8b137891791fe9 100644 --- a/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile +++ b/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile @@ -1,21 +1 @@ -MONO_CONFIG=Debug -MONO_ARCH=x64 -DOTNET := ../../../../.././dotnet.sh -USE_LLVM=True -all: runtimepack run - -TOOLS_DIR=../../../../../tools-local/tasks/mobile.tasks -appbuilder: - $(DOTNET) build -c Release $(TOOLS_DIR)/AotCompilerTask/MonoAOTCompiler.csproj - $(DOTNET) build -c Release $(TOOLS_DIR)/AppleAppBuilder/AppleAppBuilder.csproj - -runtimepack: - ../../../../.././build.sh Mono+Libs -os iOS -arch $(MONO_ARCH) -c $(MONO_CONFIG) - -run: clean appbuilder - $(DOTNET) publish -c $(MONO_CONFIG) /p:TargetArchitecture=$(MONO_ARCH) \ - /p:UseLLVM=$(USE_LLVM) /p:UseAotForSimulator=true - -clean: - rm -rf bin From aba423d62cdbf0147412275518c706f1bee0b4d5 Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Thu, 29 Oct 2020 20:08:11 +0300 Subject: [PATCH 05/10] Remove make file --- src/libraries/Mono.Samples/tests/Functional/iOS/Makefile | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/libraries/Mono.Samples/tests/Functional/iOS/Makefile diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile b/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile deleted file mode 100644 index 8b137891791fe9..00000000000000 --- a/src/libraries/Mono.Samples/tests/Functional/iOS/Makefile +++ /dev/null @@ -1 +0,0 @@ - From bca56d918c04e3fd33864e613c2ccc2a0d8ac22e Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Thu, 29 Oct 2020 20:20:08 +0300 Subject: [PATCH 06/10] Rename test directory to something more neutral --- .../{Mono.Samples => IntegrationTests}/Directory.Build.props | 0 .../tests/Functional => IntegrationTests/tests}/iOS/Program.cs | 0 .../tests/iOS/iOS.Integration.Tests.csproj} | 0 .../tests/Functional => IntegrationTests/tests}/iOS/main.m | 0 src/libraries/tests.proj | 2 +- 5 files changed, 1 insertion(+), 1 deletion(-) rename src/libraries/{Mono.Samples => IntegrationTests}/Directory.Build.props (100%) rename src/libraries/{Mono.Samples/tests/Functional => IntegrationTests/tests}/iOS/Program.cs (100%) rename src/libraries/{Mono.Samples/tests/Functional/iOS/Mono.Samples.iOS.Functional.Tests.csproj => IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj} (100%) rename src/libraries/{Mono.Samples/tests/Functional => IntegrationTests/tests}/iOS/main.m (100%) diff --git a/src/libraries/Mono.Samples/Directory.Build.props b/src/libraries/IntegrationTests/Directory.Build.props similarity index 100% rename from src/libraries/Mono.Samples/Directory.Build.props rename to src/libraries/IntegrationTests/Directory.Build.props diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/Program.cs b/src/libraries/IntegrationTests/tests/iOS/Program.cs similarity index 100% rename from src/libraries/Mono.Samples/tests/Functional/iOS/Program.cs rename to src/libraries/IntegrationTests/tests/iOS/Program.cs diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/Mono.Samples.iOS.Functional.Tests.csproj b/src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj similarity index 100% rename from src/libraries/Mono.Samples/tests/Functional/iOS/Mono.Samples.iOS.Functional.Tests.csproj rename to src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj diff --git a/src/libraries/Mono.Samples/tests/Functional/iOS/main.m b/src/libraries/IntegrationTests/tests/iOS/main.m similarity index 100% rename from src/libraries/Mono.Samples/tests/Functional/iOS/main.m rename to src/libraries/IntegrationTests/tests/iOS/main.m diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 8cc7aff8da068e..48da5d7acec8ed 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -152,7 +152,7 @@ - + From 65d3e2843e89a09943f47d096adc6fe98195f18c Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Thu, 29 Oct 2020 21:43:38 +0300 Subject: [PATCH 07/10] Replace _TrimmerDefaultAction with TrimMode Co-authored-by: Marek Safar --- .../IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj b/src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj index 832b98b5502f51..74f034abe6596a 100644 --- a/src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj +++ b/src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj @@ -9,7 +9,7 @@ false ios-$(TargetArchitecture) true - <_TrimmerDefaultAction>link + link True true false From d3811c1eb38932b2403d47922f3a257bed489e82 Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Fri, 30 Oct 2020 10:46:34 +0300 Subject: [PATCH 08/10] Make test project name more detailed --- ...iOS.Simulator.Aot.Integration.Tests.csproj | 88 +++++++++++++++++++ src/libraries/tests.proj | 2 +- 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 src/libraries/IntegrationTests/tests/iOS/iOS.Simulator.Aot.Integration.Tests.csproj diff --git a/src/libraries/IntegrationTests/tests/iOS/iOS.Simulator.Aot.Integration.Tests.csproj b/src/libraries/IntegrationTests/tests/iOS/iOS.Simulator.Aot.Integration.Tests.csproj new file mode 100644 index 00000000000000..832b98b5502f51 --- /dev/null +++ b/src/libraries/IntegrationTests/tests/iOS/iOS.Simulator.Aot.Integration.Tests.csproj @@ -0,0 +1,88 @@ + + + Exe + bin + Portable + $(NetCoreAppCurrent) + iOS + $(ArtifactsBinDir)microsoft.netcore.app.runtime.ios-$(TargetArchitecture)\$(Configuration)\runtimes\ios-$(TargetArchitecture)\ + false + ios-$(TargetArchitecture) + true + <_TrimmerDefaultAction>link + True + true + false + + + + + + + $(ArtifactsBinDir)microsoft.netcore.app.runtime.ios-$(TargetArchitecture)\$(Configuration) + + + + + + + + + + + + + $(MSBuildThisFileDirectory)$(PublishDir)\app + iPhone 11 + + + + + + + + @(MonoAOTCompilerDefaultAotArguments, ';') + @(MonoAOTCompilerDefaultProcessArguments, ';') + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/libraries/tests.proj b/src/libraries/tests.proj index 48da5d7acec8ed..f144efad5e2e41 100644 --- a/src/libraries/tests.proj +++ b/src/libraries/tests.proj @@ -152,7 +152,7 @@ - + From c727d143973bd26c4e5b70bbed5767e3612d03c0 Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Fri, 30 Oct 2020 11:16:47 +0300 Subject: [PATCH 09/10] Fix bad merge --- .../tests/iOS/iOS.Integration.Tests.csproj | 88 ------------------- ...iOS.Simulator.Aot.Integration.Tests.csproj | 2 +- 2 files changed, 1 insertion(+), 89 deletions(-) delete mode 100644 src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj diff --git a/src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj b/src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj deleted file mode 100644 index 74f034abe6596a..00000000000000 --- a/src/libraries/IntegrationTests/tests/iOS/iOS.Integration.Tests.csproj +++ /dev/null @@ -1,88 +0,0 @@ - - - Exe - bin - Portable - $(NetCoreAppCurrent) - iOS - $(ArtifactsBinDir)microsoft.netcore.app.runtime.ios-$(TargetArchitecture)\$(Configuration)\runtimes\ios-$(TargetArchitecture)\ - false - ios-$(TargetArchitecture) - true - link - True - true - false - - - - - - - $(ArtifactsBinDir)microsoft.netcore.app.runtime.ios-$(TargetArchitecture)\$(Configuration) - - - - - - - - - - - - - $(MSBuildThisFileDirectory)$(PublishDir)\app - iPhone 11 - - - - - - - - @(MonoAOTCompilerDefaultAotArguments, ';') - @(MonoAOTCompilerDefaultProcessArguments, ';') - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/libraries/IntegrationTests/tests/iOS/iOS.Simulator.Aot.Integration.Tests.csproj b/src/libraries/IntegrationTests/tests/iOS/iOS.Simulator.Aot.Integration.Tests.csproj index 832b98b5502f51..0f45ace47fc9bb 100644 --- a/src/libraries/IntegrationTests/tests/iOS/iOS.Simulator.Aot.Integration.Tests.csproj +++ b/src/libraries/IntegrationTests/tests/iOS/iOS.Simulator.Aot.Integration.Tests.csproj @@ -9,7 +9,7 @@ false ios-$(TargetArchitecture) true - <_TrimmerDefaultAction>link + link True true false From dc13eb0620bc2a26690d00317574677ce7c3f141 Mon Sep 17 00:00:00 2001 From: Maxim Lipnin Date: Fri, 30 Oct 2020 12:06:07 +0300 Subject: [PATCH 10/10] Fix Directory.Build.props --- src/libraries/IntegrationTests/Directory.Build.props | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/libraries/IntegrationTests/Directory.Build.props b/src/libraries/IntegrationTests/Directory.Build.props index 6b3e60b4533199..5f191efe27c2e9 100644 --- a/src/libraries/IntegrationTests/Directory.Build.props +++ b/src/libraries/IntegrationTests/Directory.Build.props @@ -1,5 +1,3 @@ - - - +