From 47008fcefe8e3999bb6e2b0508e02ff7da3d53b2 Mon Sep 17 00:00:00 2001 From: Jordon Brooks Date: Mon, 27 May 2024 19:43:19 +0100 Subject: [PATCH] Successful compile, untested --- Source/HarmonyLink/HarmonyLink.Build.cs | 31 +--------- .../Private/HarmonyLinkLibrary.cpp | 2 +- .../HarmonyLink/Private/Structs/CPUInfo.cpp | 5 -- Source/HarmonyLink/Public/Structs/CPUInfo.h | 4 -- .../HarmonyLinkLib/HarmonyLinkLib.Build.cs | 60 +++++++++++++++++++ .../bin/Linux/libHarmonyLinkLibShared.so | 3 + .../bin/Win64/HarmonyLinkLibShared.dll | 3 + .../ThirdParty/HarmonyLinkLib/include/Core.h | 12 +++- .../lib/Linux/libHarmonyLinkLibStatic.a | 4 +- .../lib/Win64/HarmonyLinkLibStatic.lib | 4 +- 10 files changed, 84 insertions(+), 44 deletions(-) create mode 100644 Source/ThirdParty/HarmonyLinkLib/HarmonyLinkLib.Build.cs create mode 100644 Source/ThirdParty/HarmonyLinkLib/bin/Linux/libHarmonyLinkLibShared.so create mode 100644 Source/ThirdParty/HarmonyLinkLib/bin/Win64/HarmonyLinkLibShared.dll diff --git a/Source/HarmonyLink/HarmonyLink.Build.cs b/Source/HarmonyLink/HarmonyLink.Build.cs index ce895e9..93cd557 100644 --- a/Source/HarmonyLink/HarmonyLink.Build.cs +++ b/Source/HarmonyLink/HarmonyLink.Build.cs @@ -21,7 +21,6 @@ public class HarmonyLink : ModuleRules PrivateIncludePaths.AddRange( new string[] { // ... add other private include paths required here ... - "ThirdParty/HarmonyLinkLib/include" } ); @@ -40,34 +39,10 @@ public class HarmonyLink : ModuleRules PrivateDependencyModuleNames.AddRange( new string[] { - // ... add private dependencies that you statically link with here ... + // ... add private dependencies that you statically link with here ... + "HarmonyLinkLib", } ); - - - DynamicallyLoadedModuleNames.AddRange( - new string[] - { - // ... add any modules that your module loads dynamically here ... - } - ); - - // Platform-specific settings for static libraries - if (Target.Platform == UnrealTargetPlatform.Win64) - { - PublicAdditionalLibraries.Add(Path.Combine(PluginDirectory, "Source/ThirdParty/HarmonyLinkLib/lib/Win64/HarmonyLinkLibStatic.lib")); - PublicDefinitions.Add("HARMONYLINKLIB_STATIC=1"); - } - else if (Target.Platform == UnrealTargetPlatform.Linux) - { - PublicAdditionalLibraries.Add(Path.Combine(PluginDirectory, "Source/ThirdParty/HarmonyLinkLib/lib/Linux/libHarmonyLinkLibStatic.a")); - PublicDefinitions.Add("HARMONYLINKLIB_STATIC=1"); - } - // I shall include this if anyone wishes to provide Mac binaries of HarmonyLink but these are not included by default as I don't own one. - else if (Target.Platform == UnrealTargetPlatform.Mac) - { - PublicAdditionalLibraries.Add(Path.Combine(PluginDirectory, "Source/ThirdParty/HarmonyLinkLib/lib/Mac/libHarmonyLinkLibStatic.a")); - PublicDefinitions.Add("HARMONYLINKLIB_STATIC=1"); - } + } } diff --git a/Source/HarmonyLink/Private/HarmonyLinkLibrary.cpp b/Source/HarmonyLink/Private/HarmonyLinkLibrary.cpp index ac55833..35314a3 100644 --- a/Source/HarmonyLink/Private/HarmonyLinkLibrary.cpp +++ b/Source/HarmonyLink/Private/HarmonyLinkLibrary.cpp @@ -2,7 +2,7 @@ #include "HarmonyLinkLibrary.h" -#include +#include "HarmonyLinkLib.h" bool UHarmonyLinkLibrary::IsWine() { diff --git a/Source/HarmonyLink/Private/Structs/CPUInfo.cpp b/Source/HarmonyLink/Private/Structs/CPUInfo.cpp index c13d94d..8b70135 100644 --- a/Source/HarmonyLink/Private/Structs/CPUInfo.cpp +++ b/Source/HarmonyLink/Private/Structs/CPUInfo.cpp @@ -11,11 +11,6 @@ FCPUInfo::FCPUInfo(HarmonyLinkLib::FCPUInfo* cpu_info) PhysicalCores = cpu_info->Physical_Cores; LogicalCores = cpu_info->Logical_Cores; - for (const HarmonyLinkLib::FString& Flag : cpu_info->Flags) - { - Flags.Add(Flag.c_str()); - } - cpu_info->free(); } else diff --git a/Source/HarmonyLink/Public/Structs/CPUInfo.h b/Source/HarmonyLink/Public/Structs/CPUInfo.h index e6cbd9d..80aad0e 100644 --- a/Source/HarmonyLink/Public/Structs/CPUInfo.h +++ b/Source/HarmonyLink/Public/Structs/CPUInfo.h @@ -33,10 +33,6 @@ struct FCPUInfo UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="HarmonyLink") int32 LogicalCores = 0; - // A set of flags representing various features or capabilities of the CPU. - UPROPERTY(BlueprintReadWrite, EditAnywhere, Category="HarmonyLink") - TSet Flags; - // Constructor that initializes the struct with information from an external CPU info source. // @param cpu_info Pointer to an external FCPUInfo structure to copy data from. FCPUInfo(HarmonyLinkLib::FCPUInfo* cpu_info); diff --git a/Source/ThirdParty/HarmonyLinkLib/HarmonyLinkLib.Build.cs b/Source/ThirdParty/HarmonyLinkLib/HarmonyLinkLib.Build.cs new file mode 100644 index 0000000..0b54efa --- /dev/null +++ b/Source/ThirdParty/HarmonyLinkLib/HarmonyLinkLib.Build.cs @@ -0,0 +1,60 @@ +// Copyright (C) 2024 Jordon Brooks + +using UnrealBuildTool; +using System.IO; +using Internal; + +public class HarmonyLinkLib : ModuleRules +{ + public HarmonyLinkLib(ReadOnlyTargetRules Target) : base(Target) + { + Console.WriteLine("Building HarmonyLinkLib"); + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + Type = ModuleType.External; + + // Add the standard library + bUseRTTI = true; + bEnableExceptions = true; + + // Optionally, if you need C++17 features + CppStandard = CppStandardVersion.Cpp17; + + string includePath = Path.Combine(ModuleDirectory, "include"); + Console.WriteLine("Include Path: " + includePath); + PublicIncludePaths.Add(includePath); + + PublicDefinitions.Add("HARMONYLINKLIB_STATIC=1"); + + string platformString = Target.Platform.ToString(); + if (Target.Platform == UnrealTargetPlatform.Win64) + { + PublicDefinitions.Add("BUILD_WINDOWS=1"); + string dllPath = Path.Combine(ModuleDirectory, "lib", platformString, "HarmonyLinkLibStatic.lib"); + Console.WriteLine("DLL Path: " + dllPath); + PublicAdditionalLibraries.Add(dllPath); + //RuntimeDependencies.Add(dllPath); + } + else if (Target.Platform == UnrealTargetPlatform.Linux) + { + Console.WriteLine("Building Linux"); + PublicDefinitions.Add("BUILD_LINUX=1"); + string libPath = Path.Combine(ModuleDirectory, "bin", platformString, "libHarmonyLinkLibShared.so"); + Console.WriteLine("Library Path: " + libPath); + PublicAdditionalLibraries.Add(libPath); + + // Add the C++ standard library explicitly + //string toolchainLibPath = "E:/UnrealToolChains/v22_clang-16.0.6-centos7/x86_64-unknown-linux-gnu/lib"; + //PublicSystemLibraryPaths.Add(toolchainLibPath); + RuntimeDependencies.Add(libPath); + } + // I shall include this if anyone wishes to provide Mac binaries of HarmonyLink but these are not included by default as I don't own one. + else if (Target.Platform == UnrealTargetPlatform.Mac) + { + PublicDefinitions.Add("BUILD_MACOS=1"); + string dynlibPath = Path.Combine(ModuleDirectory, "lib", platformString, "libHarmonyLinkLibStatic.a"); + Console.WriteLine("Dynamic Library Path: " + dynlibPath); + RuntimeDependencies.Add(dynlibPath); + } + } +} diff --git a/Source/ThirdParty/HarmonyLinkLib/bin/Linux/libHarmonyLinkLibShared.so b/Source/ThirdParty/HarmonyLinkLib/bin/Linux/libHarmonyLinkLibShared.so new file mode 100644 index 0000000..81f0188 --- /dev/null +++ b/Source/ThirdParty/HarmonyLinkLib/bin/Linux/libHarmonyLinkLibShared.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7690f748eb883b77813eab76bb41e6264584c2c477ad19e0ce977378b11004a1 +size 252920 diff --git a/Source/ThirdParty/HarmonyLinkLib/bin/Win64/HarmonyLinkLibShared.dll b/Source/ThirdParty/HarmonyLinkLib/bin/Win64/HarmonyLinkLibShared.dll new file mode 100644 index 0000000..b32f33a --- /dev/null +++ b/Source/ThirdParty/HarmonyLinkLib/bin/Win64/HarmonyLinkLibShared.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45855c66e1828d2b85fef34956a61dfeedc84619f073bfec6ae3484831f24ff6 +size 195072 diff --git a/Source/ThirdParty/HarmonyLinkLib/include/Core.h b/Source/ThirdParty/HarmonyLinkLib/include/Core.h index 94a32d2..90babed 100644 --- a/Source/ThirdParty/HarmonyLinkLib/include/Core.h +++ b/Source/ThirdParty/HarmonyLinkLib/include/Core.h @@ -15,7 +15,7 @@ #pragma once // Use a preprocessor definition to switch between export and import declarations -#ifdef _WIN32 +#ifdef BUILD_WINDOWS #ifdef HARMONYLINKLIB_STATIC #define HARMONYLINKLIB_API #else @@ -26,5 +26,13 @@ #endif #endif #else - #define HARMONYLINKLIB_API + #ifdef HARMONYLINKLIB_SHARED + #ifdef __clang__ + #define HARMONYLINKLIB_API __attribute__((visibility("default"))) + #else + #define HARMONYLINKLIB_API + #endif + #else + #define HARMONYLINKLIB_API + #endif #endif diff --git a/Source/ThirdParty/HarmonyLinkLib/lib/Linux/libHarmonyLinkLibStatic.a b/Source/ThirdParty/HarmonyLinkLib/lib/Linux/libHarmonyLinkLibStatic.a index a68f717..df06019 100644 --- a/Source/ThirdParty/HarmonyLinkLib/lib/Linux/libHarmonyLinkLibStatic.a +++ b/Source/ThirdParty/HarmonyLinkLib/lib/Linux/libHarmonyLinkLibStatic.a @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:662848d6802035c1d74a131316d676e256a65c1537644e787e39c0b3c58209df -size 398236 +oid sha256:7c624c33e6c41a2c58ffed44332622c9332e6e333ed07ac36f659bc242a58ea2 +size 394806 diff --git a/Source/ThirdParty/HarmonyLinkLib/lib/Win64/HarmonyLinkLibStatic.lib b/Source/ThirdParty/HarmonyLinkLib/lib/Win64/HarmonyLinkLibStatic.lib index d011ea4..7044fd0 100644 --- a/Source/ThirdParty/HarmonyLinkLib/lib/Win64/HarmonyLinkLibStatic.lib +++ b/Source/ThirdParty/HarmonyLinkLib/lib/Win64/HarmonyLinkLibStatic.lib @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b400a97666909a2c7c4dd063f65d5bdfe404dda51e31c9d37546e1961f97a3c3 -size 1355050 +oid sha256:855a36ab6ca665a654cc72b00edb0d59abfec1cf56bcef6b02a0408b82b42e0c +size 789710