Skip to content

Commit daa1e75

Browse files
committed
compiler: support console programs
This makes it possible to build normal console programs in Uno, using "static int Main(string[] args)" entrypoints (return type and args are optional), just like in C#. * Set "outputType" to "console" (unoproj) to create a console program * Supported by dotnet and native build targets
1 parent c049bc1 commit daa1e75

File tree

25 files changed

+186
-46
lines changed

25 files changed

+186
-46
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ Uno is used on Linux, macOS and Windows, and makes native apps for the following
5757
### Uno syntax
5858

5959
```uno
60-
class App : Uno.Application
60+
class Program
6161
{
62-
public App()
62+
static void Main()
6363
{
64-
debug_log "Hello, world!";
64+
debug_log "Hello, World!";
6565
}
6666
}
6767
```

lib/UnoCore/UnoCore.unoproj

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@
9191
"cil/mac-loader.stuff:stuff",
9292
"cil/run.bat:file",
9393
"cil/run.sh:file",
94+
"cil/test.cil.uxl:extensions",
9495
"cpp/config.cpp.uxl:extensions",
96+
"cpp/main-app.cpp:file",
97+
"cpp/main-console.cpp:file",
98+
"cpp/main-mobile.cpp:file",
9599
"cpp/uno.cpp.uxl:extensions",
96100
"cpp/uno.h:file",
97101
"cpp/Uno/_config.h:file",
@@ -110,8 +114,6 @@
110114
"cpp/Uno/Support.h:file",
111115
"cpp/Uno/SupportApple.mm:file",
112116
"cpp/Uno/Uno.h:file",
113-
"cpp/uPlatform/_main.cpp:file",
114-
"cpp/uPlatform/_mainMobile.cpp:file",
115117
"cpp/uPlatform/GLHelper.h:file",
116118
"cpp/uPlatform/GraphicsContext.h:file",
117119
"cpp/uPlatform/WinAPIHelper.h:file",

lib/UnoCore/cil/app.cil.uxl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Extensions Backend="CIL" Condition="!LIBRARY && !TEST">
1+
<Extensions Backend="CIL" Condition="!CONSOLE && !LIBRARY && !TEST">
22

33
<Set AppDirectory="@(Project.Name).app" Condition="HOST_MAC" />
44
<Set AssemblyDirectory="@(HOST_MAC:Defined:Test('@(AppDirectory)/Contents/MonoBundle', '.'))" />

lib/UnoCore/cil/console.cil.uxl

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1-
<Extensions Backend="CIL" Condition="!LIBRARY && TEST">
2-
3-
<Set AppLoader.Assembly="@(Config.AppLoader.Console:Path)/uno-app.dll" />
4-
<Set AppLoader.Class="Uno.AppLoader.Program" />
5-
<Set AppLoader.Method="UnoGenerated" />
1+
<Extensions Backend="CIL" Condition="CONSOLE">
62

73
<CopyFile Name="@(Config.AppLoader.Console:Path)/uno-app.runtimeconfig.json"
8-
TargetName="@(Project.Name).exe.runtimeconfig.json" />
4+
TargetName="@(Project.Name).runtimeconfig.json" />
95

10-
<Set Product="@(Project.Name).exe.dll" />
6+
<Set Product="@(Project.Name).dll" />
117

128
<!-- Windows -->
139
<Set Commands.Run="run.bat" Condition="HOST_WIN32" />

lib/UnoCore/cil/mac-loader.stuff

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
if DOTNET && !LIBRARY && HOST_MAC && HOST_X64 {
1+
if DOTNET && HOST_MAC && HOST_X64 && !CONSOLE && !LIBRARY && !TEST {
22
"mac-x64": "https://www.nuget.org/api/v2/package/uno-mac-loader-x64/3.0.0-beta.0"
33
}

lib/UnoCore/cil/test.cil.uxl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<Extensions Backend="CIL" Condition="TEST">
2+
3+
<Set AppLoader.Assembly="@(Config.AppLoader.Console:Path)/uno-app.dll" />
4+
<Set AppLoader.Class="Uno.AppLoader.Program" />
5+
<Set AppLoader.Method="UnoGenerated" />
6+
7+
<CopyFile Name="@(Config.AppLoader.Console:Path)/uno-app.runtimeconfig.json"
8+
TargetName="@(Project.Name).exe.runtimeconfig.json" />
9+
10+
<Set Product="@(Project.Name).exe.dll" />
11+
12+
<!-- Windows -->
13+
<Set Commands.Run="run.bat" Condition="HOST_WIN32" />
14+
<ProcessFile Name="run.bat" Condition="HOST_WIN32" />
15+
16+
<!-- UNIX -->
17+
<Set Commands.Run="run.sh" Condition="HOST_UNIX" />
18+
<ProcessFile Name="run.sh" Condition="HOST_UNIX" IsExecutable="true" />
19+
20+
</Extensions>
File renamed without changes.

lib/UnoCore/cpp/main-console.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// @(MSG_ORIGIN)
2+
// @(MSG_EDIT_WARNING)
3+
4+
#include <Uno/ObjectModel.h>
5+
@(Main.IncludeDirective)
6+
@(TypeObjects.Declaration:JoinSorted())
7+
void uInitRtti(uType*(*factories[])());
8+
9+
// See @{Uno.Environment.GetCommandLineArgs():Call()}
10+
int uArgc = 0;
11+
char** uArgv = nullptr;
12+
13+
int main(int argc, char* argv[])
14+
{
15+
uArgc = argc;
16+
uArgv = argv;
17+
18+
uRuntime uno;
19+
uAutoReleasePool pool;
20+
21+
uType* (*factories[])() = {
22+
@(TypeObjects.FunctionPointer:JoinSorted('\n ', '', ','))
23+
nullptr
24+
};
25+
26+
uInitRtti(factories);
27+
return @(Main.Entrypoint);
28+
}
File renamed without changes.

lib/UnoCore/cpp/uno.cpp.uxl

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@
1818
<ProcessFile SourceFile="Uno/Reflection.cpp" Condition="REFLECTION" />
1919
<ProcessFile HeaderFile="Uno/Reflection.h" Condition="REFLECTION" />
2020

21-
<ProcessFile SourceFile="uPlatform/_main.cpp" Condition="!MOBILE"/>
22-
<ProcessFile SourceFile="uPlatform/_mainMobile.cpp" Condition="MOBILE" />
21+
<!-- Platform headers -->
2322
<ProcessFile HeaderFile="uPlatform/GraphicsContext.h" Condition="!MOBILE" />
2423
<ProcessFile HeaderFile="uPlatform/GLHelper.h" Condition="OPENGL" />
2524
<ProcessFile HeaderFile="uPlatform/WinAPIHelper.h" Condition="WIN32" />
2625

26+
<!-- Entrypoint -->
27+
<ProcessFile SourceFile="main-app.cpp" Condition="!MOBILE && !CONSOLE"/>
28+
<ProcessFile SourceFile="main-console.cpp" Condition="!MOBILE && CONSOLE"/>
29+
<ProcessFile SourceFile="main-mobile.cpp" Condition="MOBILE" />
30+
2731
<!-- Deprecated headers -->
2832
<ProcessFile HeaderFile="Uno/Graphics/GLHelper.h" Condition="ANDROID" />
2933
<ProcessFile HeaderFile="Uno/Uno.h" Condition="APPLE" />

0 commit comments

Comments
 (0)