From 8d7d2431df74e86a291a108e110c24b575bcf25c Mon Sep 17 00:00:00 2001 From: mafiesto4 Date: Sun, 10 Jan 2021 19:57:01 +0100 Subject: [PATCH] Add glslang for Linux --- .../ThirdParty/x64/libGenericCodeGen.a | 3 + .../Linux/Binaries/ThirdParty/x64/libHLSL.a | 3 + .../ThirdParty/x64/libMachineIndependent.a | 3 + .../Binaries/ThirdParty/x64/libOGLCompiler.a | 3 + .../Binaries/ThirdParty/x64/libOSDependent.a | 3 + .../ThirdParty/x64/libSPIRV-Tools-opt.a | 3 + .../Binaries/ThirdParty/x64/libSPIRV-Tools.a | 3 + .../Linux/Binaries/ThirdParty/x64/libSPIRV.a | 3 + .../Binaries/ThirdParty/x64/libglslang.a | 3 + Source/ThirdParty/glslang/glslang.Build.cs | 7 +++ .../spirv-tools/spirv_tools.Build.cs | 2 + .../Flax.Build/Deps/Dependencies/glslang.cs | 62 ++++++++++++++----- 12 files changed, 84 insertions(+), 14 deletions(-) create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libGenericCodeGen.a create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libHLSL.a create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libMachineIndependent.a create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libOGLCompiler.a create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libOSDependent.a create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV-Tools-opt.a create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV-Tools.a create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV.a create mode 100644 Source/Platforms/Linux/Binaries/ThirdParty/x64/libglslang.a diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libGenericCodeGen.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libGenericCodeGen.a new file mode 100644 index 000000000..1a8237027 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libGenericCodeGen.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c6add4697d7513883ea5583587a50b3b01ff0156d06e2ccc48070e23c415bf4 +size 31902 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libHLSL.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libHLSL.a new file mode 100644 index 000000000..3ce822729 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libHLSL.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:254756fe20ea96e73bd82a9a491c1f18c852aae33dd8bf9d6648c91d0247c7eb +size 1068 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libMachineIndependent.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libMachineIndependent.a new file mode 100644 index 000000000..0235bd398 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libMachineIndependent.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9e79710c30285e0c5e4fe2ff1e9c47d06d9457428c177c6580e1ec8966dd079 +size 5287654 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libOGLCompiler.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libOGLCompiler.a new file mode 100644 index 000000000..7ac2e3cc5 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libOGLCompiler.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b78a2a48c4c17a066164b7d151260d836e01ddb0d4087f25a6266aafc220eb5 +size 3332 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libOSDependent.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libOSDependent.a new file mode 100644 index 000000000..ce233ff4f --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libOSDependent.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67afb8e80b768c785905821f4ab4e4491598ab3a69f3fd514d4a9dadf6f80d36 +size 4966 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV-Tools-opt.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV-Tools-opt.a new file mode 100644 index 000000000..5c0736d35 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV-Tools-opt.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d101fdbbdb514937ef3ccdbb2a0791542fdb880b0331a59599e1cab3fdaba8d0 +size 8949560 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV-Tools.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV-Tools.a new file mode 100644 index 000000000..3732827d0 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV-Tools.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dafaa04b6d0896fdb33738ea7104fa47ad150f287d046bd752d7f343efb6bc1a +size 2515558 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV.a new file mode 100644 index 000000000..2c9b04e3d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libSPIRV.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e8ee83a8a956e1e700aa5599107a5710d9c17f350a7d9025765b588146272c7 +size 1057884 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libglslang.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libglslang.a new file mode 100644 index 000000000..0e82c48ea --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libglslang.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5f1fad7d2bc3a7768ea1e8a075315c371064cfd5cfcc64f9d4a55837e304b3a +size 32314 diff --git a/Source/ThirdParty/glslang/glslang.Build.cs b/Source/ThirdParty/glslang/glslang.Build.cs index 141b2d675..6d6c911fc 100644 --- a/Source/ThirdParty/glslang/glslang.Build.cs +++ b/Source/ThirdParty/glslang/glslang.Build.cs @@ -36,6 +36,13 @@ public class glslang : DepsModule options.OutputFiles.Add(Path.Combine(depsRoot, "SPIRV.lib")); break; case TargetPlatform.Linux: + options.OutputFiles.Add(Path.Combine(depsRoot, "libGenericCodeGen.a")); + options.OutputFiles.Add(Path.Combine(depsRoot, "libglslang.a")); + options.OutputFiles.Add(Path.Combine(depsRoot, "libHLSL.a")); + options.OutputFiles.Add(Path.Combine(depsRoot, "libMachineIndependent.a")); + options.OutputFiles.Add(Path.Combine(depsRoot, "libOSDependent.a")); + options.OutputFiles.Add(Path.Combine(depsRoot, "libOGLCompiler.a")); + options.OutputFiles.Add(Path.Combine(depsRoot, "libSPIRV.a")); break; default: throw new InvalidPlatformException(options.Platform.Target); } diff --git a/Source/ThirdParty/spirv-tools/spirv_tools.Build.cs b/Source/ThirdParty/spirv-tools/spirv_tools.Build.cs index 4318317d9..d503f8c4e 100644 --- a/Source/ThirdParty/spirv-tools/spirv_tools.Build.cs +++ b/Source/ThirdParty/spirv-tools/spirv_tools.Build.cs @@ -32,6 +32,8 @@ public class spirv_tools : DepsModule options.OutputFiles.Add(Path.Combine(depsRoot, "SPIRV-Tools-opt.lib")); break; case TargetPlatform.Linux: + options.OutputFiles.Add(Path.Combine(depsRoot, "libSPIRV-Tools.a")); + options.OutputFiles.Add(Path.Combine(depsRoot, "libSPIRV-Tools-opt.a")); break; default: throw new InvalidPlatformException(options.Platform.Target); } diff --git a/Source/Tools/Flax.Build/Deps/Dependencies/glslang.cs b/Source/Tools/Flax.Build/Deps/Dependencies/glslang.cs index d8034e1b8..bb7ef862e 100644 --- a/Source/Tools/Flax.Build/Deps/Dependencies/glslang.cs +++ b/Source/Tools/Flax.Build/Deps/Dependencies/glslang.cs @@ -21,7 +21,12 @@ namespace Flax.Deps.Dependencies case TargetPlatform.Windows: return new[] { - TargetPlatform.Windows, + TargetPlatform.Linux, + }; + case TargetPlatform.Linux: + return new[] + { + TargetPlatform.Linux, }; default: return new TargetPlatform[0]; } @@ -36,20 +41,8 @@ namespace Flax.Deps.Dependencies var buildDir = root; var solutionPath = Path.Combine(buildDir, "glslang.sln"); var configuration = "Release"; - var cmakeArgs = string.Format("-DCMAKE_INSTALL_PREFIX=\"{0}\" -DENABLE_CTEST=OFF -DENABLE_HLSL=ON -DENABLE_SPVREMAPPER=ON -DENABLE_GLSLANG_BINARIES=OFF", installDir); + var cmakeArgs = string.Format("-DCMAKE_INSTALL_PREFIX=\"{0}\" -DCMAKE_BUILD_TYPE={1} -DENABLE_RTTI=ON -DENABLE_CTEST=OFF -DENABLE_HLSL=ON -DENABLE_SPVREMAPPER=ON -DENABLE_GLSLANG_BINARIES=OFF", installDir, configuration); var libsRoot = Path.Combine(installDir, "lib"); - var outputFiles = new[] - { - Path.Combine(libsRoot, "GenericCodeGen.lib"), - Path.Combine(libsRoot, "MachineIndependent.lib"), - Path.Combine(libsRoot, "HLSL.lib"), - Path.Combine(libsRoot, "OSDependent.lib"), - Path.Combine(libsRoot, "OGLCompiler.lib"), - Path.Combine(libsRoot, "SPIRV-Tools-opt.lib"), - Path.Combine(libsRoot, "SPIRV-Tools.lib"), - Path.Combine(libsRoot, "SPIRV.lib"), - Path.Combine(libsRoot, "glslang.lib"), - }; // Get the source CloneGitRepoFast(root, "https://github.com/FlaxEngine/glslang.git"); @@ -63,6 +56,19 @@ namespace Flax.Deps.Dependencies { case TargetPlatform.Windows: { + var outputFiles = new[] + { + Path.Combine(libsRoot, "GenericCodeGen.lib"), + Path.Combine(libsRoot, "MachineIndependent.lib"), + Path.Combine(libsRoot, "HLSL.lib"), + Path.Combine(libsRoot, "OSDependent.lib"), + Path.Combine(libsRoot, "OGLCompiler.lib"), + Path.Combine(libsRoot, "SPIRV-Tools-opt.lib"), + Path.Combine(libsRoot, "SPIRV-Tools.lib"), + Path.Combine(libsRoot, "SPIRV.lib"), + Path.Combine(libsRoot, "glslang.lib"), + }; + // Build for Win64 File.Delete(Path.Combine(buildDir, "CMakeCache.txt")); RunCmake(buildDir, TargetPlatform.Windows, TargetArchitecture.x64, cmakeArgs); @@ -75,6 +81,34 @@ namespace Flax.Deps.Dependencies } break; } + case TargetPlatform.Linux: + { + var outputFiles = new[] + { + Path.Combine(libsRoot, "libGenericCodeGen.a"), + Path.Combine(libsRoot, "libMachineIndependent.a"), + Path.Combine(libsRoot, "libHLSL.a"), + Path.Combine(libsRoot, "libOSDependent.a"), + Path.Combine(libsRoot, "libOGLCompiler.a"), + Path.Combine(libsRoot, "libSPIRV-Tools-opt.a"), + Path.Combine(libsRoot, "libSPIRV-Tools.a"), + Path.Combine(libsRoot, "libSPIRV.a"), + Path.Combine(libsRoot, "libglslang.a"), + }; + + // Build for Linux + RunCmake(root, TargetPlatform.Linux, TargetArchitecture.x64, cmakeArgs); + Utilities.Run("cmake", string.Format("--build . --config {0} --target install", configuration), null, buildDir, Utilities.RunOptions.None); + Utilities.Run("make", null, null, root, Utilities.RunOptions.None); + var depsFolder = GetThirdPartyFolder(options, TargetPlatform.Linux, TargetArchitecture.x64); + foreach (var file in outputFiles) + { + var dst = Path.Combine(depsFolder, Path.GetFileName(file)); + Utilities.FileCopy(file, dst); + //Utilities.Run("strip", string.Format("-s \"{0}\"", dst), null, null, Utilities.RunOptions.None); + } + break; + } } }