From 916c01a3e55166c00531f3af3c7cb678b896ffb6 Mon Sep 17 00:00:00 2001 From: "Simon (Darkside) Jackson" Date: Mon, 19 Feb 2024 16:29:51 +0000 Subject: [PATCH 1/2] Initial check-in of compiler definition documentation --- .../articles/conditional_compilation.md | 130 ++++++++++++++++++ .../images/vsprojectbuildproperties.png | Bin 0 -> 16 bytes 2 files changed, 130 insertions(+) create mode 100644 documentation/articles/conditional_compilation.md create mode 100644 documentation/articles/images/vsprojectbuildproperties.png diff --git a/documentation/articles/conditional_compilation.md b/documentation/articles/conditional_compilation.md new file mode 100644 index 00000000..6be68076 --- /dev/null +++ b/documentation/articles/conditional_compilation.md @@ -0,0 +1,130 @@ +--- +title: Conditional Compilation +description: Compilation directives for platform specific compilation of code. +--- + +# Conditional compilation + +MonoGame supports running C# projects on multiple platforms and supports several [directives](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives) to allow developers to selectively include or exclude code from compilation, based on whether certain [scripting symbols](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/symbols) or definitions are defined or not defined. + +You can read more broadly about how these directives work in C# in Microsoft’s user documentation on [C# preprocessor directives](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives) + +The hash `#` character in front of the **if** and **endif** indicates that these statements are “directives”, and they are handled during the build/compilation process, rather than at runtime. + +As an example, you can see in the code excerpt below, one set of code will be compiled on a DesktopGL platform, else the other code will be used. + +```csharp +#if DESKTOPGL + // The Client is running on the DesktopGL runtime +#else + // The Client is NOT running on DesktopGL +#endif +``` + +The critical factor is that the above pattern reduces what code is compiled and is included in the final build / release. + +> [!NOTE] +> The above technique is an alternative to using the `MonoGamePlatform` method, where all code included is compiled and included in your build, for example: +> +> ```csharp +> if(PlatformInfo.MonoGamePlatform == MonoGamePlatform.DesktopGL) +> { +> // The Client is running on the DesktopGL runtime +> } +> else +> { +> // The Client is NOT running on DesktopGL +> } +> ``` + +## Platform scripting symbols + +MonoGame provides the following scripting symbols through the [PlatformInfo](https://github.com/MonoGame/MonoGame/blob/develop/MonoGame.Framework/Utilities/PlatformInfo.cs) class, these are as follows: + +|Scripting #define|Description|Notes| +|-|-|-| +|ANDROID|Defines an application running on an Android system, this includes all Android based systems and varients.|| +|DESKTOPGL|A collective defintion covering OpenGL graphics on Windows, Mac and Linux.|| +|IOS|Covers all iOS based devices, including iPhone, iPad and future systems based on iOS.|| +|TVOS|Specific target for TVOS only.|| +|WINDOWS && DIRECTX|Combined definition for using DirectX on a Windows runtime|If you are using OpenGL, then use the DESKTOPGL define.| +|WINDOWS_UAP|Targetting Windows 10 & 11 UWP based applications|| +|SWITCH|Nintendo Switch based platform only.|| +|XB1|Xbox One, all editions. Including Xbox One, Xbox One X & S, Xbox Series X&S|| +|PLAYSTATION4|Playstation 4 custom silicon platform, for all editions of Playstation 4 including Pro|| +|PLAYSTATION5|Playstation 5 AMD based platform, for all editions|| +|STADIA|Google Statia runtime|*Note, being deprecated with the fall of Stadia| + +## Other scripting symbols + +Microsoft Build which is used under the hood to build MonoGame projects also provides the following default symbols (as well as those included in your projects definition): + + + +|Scripting #define|Description|Notes| +|-|-|-| +|TRACE||| +|DEBUG|Is the application running in a DEBUG mode.|| +|RELEASE|Is the application running in a RELEASE mode.|| +|NET|Defines an application running on .NET.|| +|NETX|A define for the specific version of .NET being used, usually NET6 (.net 6) or NET8 (.net 8).|| +|NETCOREAPP|Defines an appication running as a .NET Core Application.|| + +To see the default symbols defined for your project: + +# [VSCode](#tab/vscode) + +In your `project.csproj` file, you can add custom symbols to your project as shown below. TRACE, DEBUG, RELEASE and framework options are included by default. + +The below example adds a `MYDEBUG` symbol in `Debug` build profile. + +```xml + + $(DefineConstants);MYDEBUG + +``` + +# [Visual Studio](#tab/vs) + +In Visual Studio, you can right-click your project and select properties to view your project definition, navigating down to the `Build` tab shows the symbol options for your project. + +![Visual Studio Build properties](./images/vsprojectbuildproperties.png) + +## Testing precompiled code + +The example below shows logging the specific platform that was detected on startup. + +```csharp +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using MonoGame.Framework.Utilities; +using System; + +namespace MonoGameDefinitionsTest; + +public class Game1 : Game +{ + private SpriteBatch _spriteBatch; + + public Game1() + { + _graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; +#if DESKTOPGL + Console.WriteLine("Hello from DesktopGL"); +#elif ANDROID + Console.WriteLine("Hello from ANDROID"); +#elif IOS + Console.WriteLine("Hello from iOS"); +#elif WINDOWS && DIRECTX + Console.WriteLine("Hello from WindowsDX"); +#else + // Fallback for any platform that was not selected above. + Console.WriteLine($"Hello from {PlatformInfo.MonoGamePlatform}"); +#endif + } +} +``` + +Depending on whichever platform you `Compile` for (build), only the specific lines detected above will be included in the build. \ No newline at end of file diff --git a/documentation/articles/images/vsprojectbuildproperties.png b/documentation/articles/images/vsprojectbuildproperties.png new file mode 100644 index 0000000000000000000000000000000000000000..43ee814751fffd51fe794dd53779ea60661f9454 GIT binary patch literal 16 XcmaFAe{X=FJ1>_MFBby?11}c Date: Mon, 19 Feb 2024 16:53:27 +0000 Subject: [PATCH 2/2] Minor tweaks and local testing --- .../articles/conditional_compilation.md | 8 ++-- .../images/vsprojectbuildproperties.png | Bin 16 -> 34225 bytes documentation/articles/toc.yml | 40 ++++++++++-------- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/documentation/articles/conditional_compilation.md b/documentation/articles/conditional_compilation.md index 6be68076..8a394b5e 100644 --- a/documentation/articles/conditional_compilation.md +++ b/documentation/articles/conditional_compilation.md @@ -53,14 +53,12 @@ MonoGame provides the following scripting symbols through the [PlatformInfo](htt |XB1|Xbox One, all editions. Including Xbox One, Xbox One X & S, Xbox Series X&S|| |PLAYSTATION4|Playstation 4 custom silicon platform, for all editions of Playstation 4 including Pro|| |PLAYSTATION5|Playstation 5 AMD based platform, for all editions|| -|STADIA|Google Statia runtime|*Note, being deprecated with the fall of Stadia| +|STADIA|Google Statia runtime|Being deprecated with the fall of Stadia| ## Other scripting symbols Microsoft Build which is used under the hood to build MonoGame projects also provides the following default symbols (as well as those included in your projects definition): - - |Scripting #define|Description|Notes| |-|-|-| |TRACE||| @@ -88,7 +86,9 @@ The below example adds a `MYDEBUG` symbol in `Debug` build profile. In Visual Studio, you can right-click your project and select properties to view your project definition, navigating down to the `Build` tab shows the symbol options for your project. -![Visual Studio Build properties](./images/vsprojectbuildproperties.png) +![Visual Studio Build properties](images/vsprojectbuildproperties.png) + +--- ## Testing precompiled code diff --git a/documentation/articles/images/vsprojectbuildproperties.png b/documentation/articles/images/vsprojectbuildproperties.png index 43ee814751fffd51fe794dd53779ea60661f9454..d6904db1a1ab9ebe8b35f4c5d930cb5e4126ba10 100644 GIT binary patch literal 34225 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 *V*ZYLfzNb9Q>#_gt8_6LF}?H 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 literal 16 XcmaFAe{X=FJ1>_MFBby?11}c