Пример #1
0
        /**
         *	Whether the required external SDKs are installed for this platform
         */
        protected override SDKStatus HasRequiredManualSDKInternal()
        {
            // if any autosdk setup has been done then the local process environment is suspect
            if (HasSetupAutoSDK())
            {
                return(SDKStatus.Invalid);
            }
            if (!HTML5SDKInfo.IsSDKInstalled())
            {
                return(SDKStatus.Invalid);
            }
            try
            {
                int InstalledVersion = Convert.ToInt32(HTML5SDKInfo.EmscriptenVersion().Replace(".", ""));
                int RequiredVersion  = Convert.ToInt32(GetRequiredSDKString().Replace(".", ""));

                if (InstalledVersion >= RequiredVersion)
                {
                    return(SDKStatus.Valid);
                }
                else
                {
                    Console.WriteLine("EMSCRIPTEN sdk " + HTML5SDKInfo.EmscriptenVersion() + " found which is older than " + RequiredVersion + " Please install the latest emscripten SDK");
                    return(SDKStatus.Invalid);
                }
            }
            catch (Exception /*ex*/)
            {
                return(SDKStatus.Invalid);
            }
        }
Пример #2
0
        public HTML5ToolChain(FileReference InProjectFile)
            : base(CppPlatform.HTML5)
        {
            if (!HTML5SDKInfo.IsSDKInstalled())
            {
                throw new BuildException("HTML5 SDK is not installed; cannot use toolchain.");
            }

            // ini configs
            // - normal ConfigCache w/ UnrealBuildTool.ProjectFile takes all game config ini files
            //   (including project config ini files)
            // - but, during packaging, if -remoteini is used -- need to use UnrealBuildTool.GetRemoteIniPath()
            //   (note: ConfigCache can take null ProjectFile)
            string             EngineIniPath = UnrealBuildTool.GetRemoteIniPath();
            DirectoryReference ProjectDir    = !String.IsNullOrEmpty(EngineIniPath) ? new DirectoryReference(EngineIniPath)
                                                                                                : DirectoryReference.FromFile(InProjectFile);
            ConfigHierarchy Ini = ConfigCache.ReadHierarchy(ConfigHierarchyType.Engine, ProjectDir, UnrealTargetPlatform.HTML5);

//			Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableSIMD", out enableSIMD);
//			Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableMultithreading", out enableMultithreading);
            Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableTracing", out bEnableTracing);

            // TODO: remove this "fix" when emscripten supports (SIMD & pthreads) + WASM
            enableSIMD = false;
            // TODO: double check Engine/Source/Runtime/Core/Private/HTML5/HTML5PlatformProcess.cpp::SupportsMultithreading()
            enableMultithreading = false;

            Log.TraceInformation("HTML5ToolChain: EnableSIMD = " + enableSIMD);
            Log.TraceInformation("HTML5ToolChain: EnableMultithreading " + enableMultithreading);
            Log.TraceInformation("HTML5ToolChain: EnableTracing = " + bEnableTracing);

            PrintOnce = new VerbosePrint(PrintOnceOn);             // reset
        }
Пример #3
0
 /// <summary>
 /// Whether the required external SDKs are installed for this platform
 /// </summary>
 protected override SDKStatus HasRequiredManualSDKInternal()
 {
     if (!HTML5SDKInfo.IsSDKInstalled())
     {
         return(SDKStatus.Invalid);
     }
     return(SDKStatus.Valid);
 }
Пример #4
0
 // cache the location of SDK tools
 public HTML5ToolChain()
     : base(CPPTargetPlatform.HTML5, false)
 {
     if (!HTML5SDKInfo.IsSDKInstalled())
     {
         throw new BuildException("HTML5 SDK is not installed; cannot use toolchain.");
     }
 }
Пример #5
0
 // cache the location of SDK tools
 public HTML5ToolChain()
     : base(CppPlatform.HTML5, WindowsCompiler.VisualStudio2015)
 {
     if (!HTML5SDKInfo.IsSDKInstalled())
     {
         throw new BuildException("HTML5 SDK is not installed; cannot use toolchain.");
     }
 }
Пример #6
0
        public HTML5ToolChain(FileReference InProjectFile)
            : base(CppPlatform.HTML5)
        {
            if (!HTML5SDKInfo.IsSDKInstalled())
            {
                throw new BuildException("HTML5 SDK is not installed; cannot use toolchain.");
            }

            // ini configs
            // - normal ConfigCache w/ UnrealBuildTool.ProjectFile takes all game config ini files
            //   (including project config ini files)
            // - but, during packaging, if -remoteini is used -- need to use UnrealBuildTool.GetRemoteIniPath()
            //   (note: ConfigCache can take null ProjectFile)
            string             EngineIniPath = UnrealBuildTool.GetRemoteIniPath();
            DirectoryReference ProjectDir    = !String.IsNullOrEmpty(EngineIniPath) ? new DirectoryReference(EngineIniPath)
                                                                                                : DirectoryReference.FromFile(InProjectFile);
            ConfigHierarchy Ini = ConfigCache.ReadHierarchy(ConfigHierarchyType.Engine, ProjectDir, UnrealTargetPlatform.HTML5);

//			Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableSIMD", out enableSIMD);
            Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableMultithreading", out enableMultithreading);
            Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "OffscreenCanvas", out bMultithreading_UseOffscreenCanvas);
            Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "LLVMWasmBackend", out useLLVMwasmBackend);
            Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableTracing", out bEnableTracing);

            if (useLLVMwasmBackend)
            {
                libExt = ".a";                  // experimental - LLVMWasmBackend
            }

            // TODO: remove this "fix" when emscripten supports WASM with SIMD
            enableSIMD = false;

            Log.TraceInformation("HTML5ToolChain: EnableSIMD = " + enableSIMD);
            Log.TraceInformation("HTML5ToolChain: EnableMultithreading " + enableMultithreading);
            Log.TraceInformation("HTML5ToolChain: OffscreenCanvas " + bMultithreading_UseOffscreenCanvas);
            Log.TraceInformation("HTML5ToolChain: LLVMWasmBackend " + useLLVMwasmBackend);
            Log.TraceInformation("HTML5ToolChain: EnableTracing = " + bEnableTracing);

            PrintOnce = new VerbosePrint(PrintOnceOn);             // reset

            Log.TraceInformation("Setting Emscripten SDK: located in " + HTML5SDKInfo.EMSCRIPTEN_ROOT);
            string TempDir = HTML5SDKInfo.SetupEmscriptenTemp();

            HTML5SDKInfo.SetUpEmscriptenConfigFile();

            if (Environment.GetEnvironmentVariable("EMSDK") == null)             // If EMSDK is present, Emscripten is already configured by the developer
            {
                // If not using preset emsdk, configure our generated .emscripten config, instead of autogenerating one in the user's home directory.
                Environment.SetEnvironmentVariable("EM_CONFIG", HTML5SDKInfo.DOT_EMSCRIPTEN);
                Environment.SetEnvironmentVariable("EM_CACHE", HTML5SDKInfo.EMSCRIPTEN_CACHE);
                Environment.SetEnvironmentVariable("EMCC_TEMP_DIR", TempDir);
            }

            Log.TraceInformation("*** Emscripten Config File: " + Environment.GetEnvironmentVariable("EM_CONFIG"));
        }
Пример #7
0
        // cache the location of SDK tools
        public HTML5ToolChain()
            : base(CPPTargetPlatform.HTML5, false)
        {
            if (!HTML5SDKInfo.IsSDKInstalled())
            {
                throw new BuildException("HTML5 SDK is not installed; cannot use toolchain.");
            }

            // set some environment variable we'll need
//			Environment.SetEnvironmentVariable("EMCC_DEBUG", "1");
            Environment.SetEnvironmentVariable("EMCC_CORES", "8");
            Environment.SetEnvironmentVariable("EMCC_OPTIMIZE_NORMALLY", "1");
        }
Пример #8
0
 // cache the location of SDK tools
 public override void RegisterToolChain()
 {
     if (HTML5SDKInfo.IsSDKInstalled())
     {
         // set some environment variable we'll need
         //Environment.SetEnvironmentVariable("EMCC_DEBUG", "cache");
         Environment.SetEnvironmentVariable("EMCC_CORES", "8");
         Environment.SetEnvironmentVariable("EMCC_OPTIMIZE_NORMALLY", "1");
         // finally register the toolchain that is now ready to go
         Log.TraceVerbose("        Registered for {0}", CPPTargetPlatform.HTML5.ToString());
         UEToolChain.RegisterPlatformToolChain(CPPTargetPlatform.HTML5, this);
     }
 }
Пример #9
0
        static bool bEnableTracing       = false;   // Debug option

        public HTML5ToolChain(FileReference InProjectFile)
            : base(CppPlatform.HTML5, WindowsCompiler.VisualStudio2015)
        {
            if (!HTML5SDKInfo.IsSDKInstalled())
            {
                throw new BuildException("HTML5 SDK is not installed; cannot use toolchain.");
            }

            // ini configs
            // - normal ConfigCache w/ UnrealBuildTool.ProjectFile takes all game config ini files
            //   (including project config ini files)
            // - but, during packaging, if -remoteini is used -- need to use UnrealBuildTool.GetRemoteIniPath()
            //   (note: ConfigCache can take null ProjectFile)
            string             EngineIniPath = UnrealBuildTool.GetRemoteIniPath();
            DirectoryReference ProjectDir    = !String.IsNullOrEmpty(EngineIniPath) ? new DirectoryReference(EngineIniPath)
                                                                                                : DirectoryReference.FromFile(InProjectFile);
            ConfigHierarchy Ini = ConfigCache.ReadHierarchy(ConfigHierarchyType.Engine, ProjectDir, UnrealTargetPlatform.HTML5);

            // these will be going away...
            bool targetingAsmjs = false;           // inverted check
            bool targetWebGL1   = false;           // inverted check

            if (Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "TargetAsmjs", out targetingAsmjs))
            {
                targetingWasm = !targetingAsmjs;
            }
            if (Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "TargetWebGL1", out targetWebGL1))
            {
                targetWebGL2 = !targetWebGL1;
            }
            Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableSIMD", out enableSIMD);
            Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableMultithreading", out enableMultithreading);
            Ini.GetBool("/Script/HTML5PlatformEditor.HTML5TargetSettings", "EnableTracing", out bEnableTracing);
            Log.TraceInformation("HTML5ToolChain: TargetWasm = " + targetingWasm);
            Log.TraceInformation("HTML5ToolChain: TargetWebGL2 = " + targetWebGL2);
            Log.TraceInformation("HTML5ToolChain: EnableSIMD = " + enableSIMD);
            Log.TraceInformation("HTML5ToolChain: EnableMultithreading " + enableMultithreading);
            Log.TraceInformation("HTML5ToolChain: EnableTracing = " + bEnableTracing);

            // TODO: remove this "fix" when emscripten supports (SIMD & pthreads) + WASM
            if (targetingWasm)
            {
                enableSIMD = false;

                // TODO: double check Engine/Source/Runtime/Core/Private/HTML5/HTML5PlatformProcess.cpp::SupportsMultithreading()
                enableMultithreading = false;
            }
        }
Пример #10
0
        // cache the location of SDK tools
        public override void RegisterToolChain()
        {
            if (HTML5SDKInfo.IsSDKInstalled() && HTML5SDKInfo.IsPythonInstalled())
            {
                EMCCPath   = "\"" + HTML5SDKInfo.EmscriptenCompiler() + "\"";
                PythonPath = HTML5SDKInfo.PythonPath();

                // set some environment variable we'll need
                //Environment.SetEnvironmentVariable("EMCC_DEBUG", "cache");
                Environment.SetEnvironmentVariable("EMCC_CORES", "8");
                Environment.SetEnvironmentVariable("EMCC_FORCE_STDLIBS", "1");
                Environment.SetEnvironmentVariable("EMCC_OPTIMIZE_NORMALLY", "1");
                // finally register the toolchain that is now ready to go
                Log.TraceVerbose("        Registered for {0}", CPPTargetPlatform.HTML5.ToString());
                UEToolChain.RegisterPlatformToolChain(CPPTargetPlatform.HTML5, this);
            }
        }