Add Godot constants to Mono project builds
This adds constants to projects build via Godot Mono which allows project to conditionally react to different operating systems and 32/64 Bit architecture. Additionally .NET libraries could support multiple engines like Unity and Godot at the same time when compiled from Godot and reacting to definitions.
This commit is contained in:
parent
0d8f1ba6a9
commit
60e711a115
6 changed files with 37 additions and 9 deletions
|
@ -186,7 +186,7 @@ namespace GodotSharpTools.Build
|
||||||
|
|
||||||
private string BuildArguments(string loggerAssemblyPath, string loggerOutputDir, List<string> customProperties)
|
private string BuildArguments(string loggerAssemblyPath, string loggerOutputDir, List<string> customProperties)
|
||||||
{
|
{
|
||||||
string arguments = string.Format(@"""{0}"" /v:normal /t:Build ""/p:{1}"" ""/l:{2},{3};{4}""",
|
string arguments = string.Format(@"""{0}"" /v:normal /t:Rebuild ""/p:{1}"" ""/l:{2},{3};{4}""",
|
||||||
solution,
|
solution,
|
||||||
"Configuration=" + config,
|
"Configuration=" + config,
|
||||||
typeof(GodotBuildLogger).FullName,
|
typeof(GodotBuildLogger).FullName,
|
||||||
|
@ -196,7 +196,7 @@ namespace GodotSharpTools.Build
|
||||||
|
|
||||||
foreach (string customProperty in customProperties)
|
foreach (string customProperty in customProperties)
|
||||||
{
|
{
|
||||||
arguments += " \"/p:" + customProperty + "\"";
|
arguments += " /p:" + customProperty;
|
||||||
}
|
}
|
||||||
|
|
||||||
return arguments;
|
return arguments;
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace GodotSharpTools.Project
|
||||||
toolsGroup.AddProperty("DebugSymbols", "true");
|
toolsGroup.AddProperty("DebugSymbols", "true");
|
||||||
toolsGroup.AddProperty("DebugType", "portable");
|
toolsGroup.AddProperty("DebugType", "portable");
|
||||||
toolsGroup.AddProperty("Optimize", "false");
|
toolsGroup.AddProperty("Optimize", "false");
|
||||||
toolsGroup.AddProperty("DefineConstants", "DEBUG;TOOLS;");
|
toolsGroup.AddProperty("DefineConstants", "$(GodotDefineConstants);GODOT;DEBUG;TOOLS;");
|
||||||
toolsGroup.AddProperty("ErrorReport", "prompt");
|
toolsGroup.AddProperty("ErrorReport", "prompt");
|
||||||
toolsGroup.AddProperty("WarningLevel", "4");
|
toolsGroup.AddProperty("WarningLevel", "4");
|
||||||
toolsGroup.AddProperty("ConsolePause", "false");
|
toolsGroup.AddProperty("ConsolePause", "false");
|
||||||
|
@ -161,7 +161,7 @@ namespace GodotSharpTools.Project
|
||||||
debugGroup.AddProperty("DebugSymbols", "true");
|
debugGroup.AddProperty("DebugSymbols", "true");
|
||||||
debugGroup.AddProperty("DebugType", "portable");
|
debugGroup.AddProperty("DebugType", "portable");
|
||||||
debugGroup.AddProperty("Optimize", "false");
|
debugGroup.AddProperty("Optimize", "false");
|
||||||
debugGroup.AddProperty("DefineConstants", "DEBUG;");
|
debugGroup.AddProperty("DefineConstants", "$(GodotDefineConstants);GODOT;DEBUG;");
|
||||||
debugGroup.AddProperty("ErrorReport", "prompt");
|
debugGroup.AddProperty("ErrorReport", "prompt");
|
||||||
debugGroup.AddProperty("WarningLevel", "4");
|
debugGroup.AddProperty("WarningLevel", "4");
|
||||||
debugGroup.AddProperty("ConsolePause", "false");
|
debugGroup.AddProperty("ConsolePause", "false");
|
||||||
|
@ -170,6 +170,7 @@ namespace GodotSharpTools.Project
|
||||||
releaseGroup.Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ";
|
releaseGroup.Condition = " '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ";
|
||||||
releaseGroup.AddProperty("DebugType", "portable");
|
releaseGroup.AddProperty("DebugType", "portable");
|
||||||
releaseGroup.AddProperty("Optimize", "true");
|
releaseGroup.AddProperty("Optimize", "true");
|
||||||
|
releaseGroup.AddProperty("DefineConstants", "$(GodotDefineConstants);GODOT;");
|
||||||
releaseGroup.AddProperty("ErrorReport", "prompt");
|
releaseGroup.AddProperty("ErrorReport", "prompt");
|
||||||
releaseGroup.AddProperty("WarningLevel", "4");
|
releaseGroup.AddProperty("WarningLevel", "4");
|
||||||
releaseGroup.AddProperty("ConsolePause", "false");
|
releaseGroup.AddProperty("ConsolePause", "false");
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#include "godotsharp_builds.h"
|
#include "godotsharp_builds.h"
|
||||||
|
|
||||||
|
#include "core/os/os.h"
|
||||||
#include "core/vector.h"
|
#include "core/vector.h"
|
||||||
#include "main/main.h"
|
#include "main/main.h"
|
||||||
|
|
||||||
|
@ -351,7 +352,7 @@ bool GodotSharpBuilds::make_api_assembly(APIAssembly::Type p_api_type) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GodotSharpBuilds::build_project_blocking(const String &p_config) {
|
bool GodotSharpBuilds::build_project_blocking(const String &p_config, const Vector<String> &p_godot_defines) {
|
||||||
|
|
||||||
if (!FileAccess::exists(GodotSharpDirs::get_project_sln_path()))
|
if (!FileAccess::exists(GodotSharpDirs::get_project_sln_path()))
|
||||||
return true; // No solution to build
|
return true; // No solution to build
|
||||||
|
@ -366,6 +367,21 @@ bool GodotSharpBuilds::build_project_blocking(const String &p_config) {
|
||||||
pr.step("Building project solution", 0);
|
pr.step("Building project solution", 0);
|
||||||
|
|
||||||
MonoBuildInfo build_info(GodotSharpDirs::get_project_sln_path(), p_config);
|
MonoBuildInfo build_info(GodotSharpDirs::get_project_sln_path(), p_config);
|
||||||
|
|
||||||
|
// Add Godot defines
|
||||||
|
String constants = "GodotDefineConstants=\"";
|
||||||
|
|
||||||
|
for (int i = 0; i < p_godot_defines.size(); i++) {
|
||||||
|
constants += "GODOT_" + p_godot_defines[i].to_upper().replace("-", "_").replace(" ", "_").replace(";", "_") + ";";
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef REAL_T_IS_DOUBLE
|
||||||
|
constants += "GODOT_REAL_T_IS_DOUBLE;";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
constants += "\"";
|
||||||
|
build_info.custom_props.push_back(constants);
|
||||||
|
|
||||||
if (!GodotSharpBuilds::get_singleton()->build(build_info)) {
|
if (!GodotSharpBuilds::get_singleton()->build(build_info)) {
|
||||||
GodotSharpBuilds::show_build_error_dialog("Failed to build project solution");
|
GodotSharpBuilds::show_build_error_dialog("Failed to build project solution");
|
||||||
return false;
|
return false;
|
||||||
|
@ -393,7 +409,10 @@ bool GodotSharpBuilds::editor_build_callback() {
|
||||||
ERR_FAIL_COND_V(copy_err != OK, false);
|
ERR_FAIL_COND_V(copy_err != OK, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
return build_project_blocking("Tools");
|
Vector<String> godot_defines;
|
||||||
|
godot_defines.push_back(OS::get_singleton()->get_name());
|
||||||
|
godot_defines.push_back(sizeof(void *) == 4 ? "32" : "64");
|
||||||
|
return build_project_blocking("Tools", godot_defines);
|
||||||
}
|
}
|
||||||
|
|
||||||
GodotSharpBuilds *GodotSharpBuilds::singleton = NULL;
|
GodotSharpBuilds *GodotSharpBuilds::singleton = NULL;
|
||||||
|
|
|
@ -92,7 +92,7 @@ public:
|
||||||
|
|
||||||
static bool make_api_assembly(APIAssembly::Type p_api_type);
|
static bool make_api_assembly(APIAssembly::Type p_api_type);
|
||||||
|
|
||||||
static bool build_project_blocking(const String &p_config);
|
static bool build_project_blocking(const String &p_config, const Vector<String> &p_godot_defines);
|
||||||
|
|
||||||
static bool editor_build_callback();
|
static bool editor_build_callback();
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,12 @@ void GodotSharpExport::_export_begin(const Set<String> &p_features, bool p_debug
|
||||||
|
|
||||||
ERR_FAIL_COND(!_add_file(scripts_metadata_path, scripts_metadata_path));
|
ERR_FAIL_COND(!_add_file(scripts_metadata_path, scripts_metadata_path));
|
||||||
|
|
||||||
ERR_FAIL_COND(!GodotSharpBuilds::build_project_blocking(build_config));
|
// Turn export features into defines
|
||||||
|
Vector<String> godot_defines;
|
||||||
|
for (Set<String>::Element *E = p_features.front(); E; E = E->next()) {
|
||||||
|
godot_defines.push_back(E->get());
|
||||||
|
}
|
||||||
|
ERR_FAIL_COND(!GodotSharpBuilds::build_project_blocking(build_config, godot_defines));
|
||||||
|
|
||||||
// Add dependency assemblies
|
// Add dependency assemblies
|
||||||
|
|
||||||
|
|
|
@ -175,7 +175,10 @@ void MonoBottomPanel::_build_project_pressed() {
|
||||||
ERR_FAIL_COND(copy_err != OK);
|
ERR_FAIL_COND(copy_err != OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool build_success = GodotSharpBuilds::get_singleton()->build_project_blocking("Tools");
|
Vector<String> godot_defines;
|
||||||
|
godot_defines.push_back(OS::get_singleton()->get_name());
|
||||||
|
godot_defines.push_back((sizeof(void *) == 4 ? "32" : "64"));
|
||||||
|
bool build_success = GodotSharpBuilds::get_singleton()->build_project_blocking("Tools", godot_defines);
|
||||||
|
|
||||||
if (build_success) {
|
if (build_success) {
|
||||||
// Notify running game for hot-reload
|
// Notify running game for hot-reload
|
||||||
|
|
Loading…
Reference in a new issue