示例#1
0
        public SkookumScriptRuntime(ReadOnlyTargetRules Target) : base(Target)
        {
            // SkUEBindings.cpp takes a long time to compile due to auto-generated engine bindings
            // Set to true when actively working on this plugin, false otherwise
            bFasterWithoutUnity = false;

            // Tell build system we're not using PCHs
            PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;

            // Add public include paths required here ...
            PublicIncludePaths.Add("SkookumScriptRuntime/Public/Bindings");
            //PublicIncludePaths.AddRange(
            //  new string[] {
            //    //"Programs/UnrealHeaderTool/Public",
            //    }
            //  );

            PrivateIncludePaths.Add("SkookumScriptRuntime/Private");

            // Add public dependencies that you statically link with here ...
            PublicDependencyModuleNames.AddRange(
                new string[]
            {
                "Core",
                "CoreUObject",
                "Engine",
            }
                );

            // ... add private dependencies that you statically link with here ...
            PrivateDependencyModuleNames.AddRange(
                new string[]
            {
                "Sockets",
                "HTTP",
                "Networking",
                "NetworkReplayStreaming",
                "Projects",
            }
                );

            if (Target.bBuildEditor)
            {
                PrivateDependencyModuleNames.Add("UnrealEd");
                PrivateDependencyModuleNames.Add("MainFrame");
                PrivateDependencyModuleNames.Add("KismetCompiler");
                PrivateDependencyModuleNames.Add("SourceControl");
            }

            // Load SkookumScript.ini and add any ScriptSupportedModules specified to the list of PrivateDependencyModuleNames
            PublicDependencyModuleNames.AddRange(GetSkookumScriptModuleNames(Path.Combine(ModuleDirectory, "../.."), false));

            // Add any modules that your module loads dynamically here ...
            //DynamicallyLoadedModuleNames.AddRange(new string[] {});

            // Whenever SkookumScript.ini changes, this build script should be re-evaluated
            ExternalDependencies.Add("../../Config/SkookumScript.ini");
        }
示例#2
0
 public override int GetHashCode()
 {
     unchecked
     {
         int hashCode = base.GetHashCode();
         hashCode = (hashCode * 397) ^ (MinimumRuntimeVersion != null ? MinimumRuntimeVersion.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ ExternalDependencies.GetHashCode();
         return(hashCode);
     }
 }
示例#3
0
    public AgogCore(ReadOnlyTargetRules Target) : base(Target)
    {
        bRequiresImplementModule = false;

        // Ignore warnings about hokey code in windows.h
        bEnableUndefinedIdentifierWarnings = false;

        // Check if Sk source code is present (Pro-RT license)
        var bFullSource = File.Exists(Path.Combine(ModuleDirectory, "..", "SkookumScript", "Private", "SkookumScript", "Sk.cpp"));

        // Allow packaging script to force a lib build by creating a temp file (Agog Labs internal)
        bFullSource = bFullSource && !File.Exists(Path.Combine(ModuleDirectory, "..", "SkookumScript", "force-lib-build.txt"));

        // If full source is present, build module from source, otherwise link with binary library
        Type = bFullSource ? ModuleType.CPlusPlus : ModuleType.External;

        // Enable fussy level of checking (Agog Labs internal)
        ExternalDependencies.Add("enable-mad-check.txt");
        var bMadCheck = File.Exists(Path.Combine(ModuleDirectory, "enable-mad-check.txt"));

        if (bMadCheck)
        {
            PublicDefinitions.Add("A_MAD_CHECK");
        }

        // Add user define if exists (Agog Labs internal)
        ExternalDependencies.Add("mad-define.txt");
        var userDefineFilePath = Path.Combine(ModuleDirectory, "mad-define.txt");

        if (File.Exists(userDefineFilePath))
        {
            var userDefine = File.ReadAllText(userDefineFilePath).Trim();
            if (userDefine.Length > 0)
            {
                PublicDefinitions.Add(userDefine);
            }
        }

        var bPlatformAllowed = false;

        List <string> platPathSuffixes = new List <string>();

        string libNameExt    = ".a";
        string libNamePrefix = "lib";
        string libNameSuffix = "";
        string platformName  = "";
        bool   useDebugCRT   = Target.bDebugBuildsActuallyUseDebugCRT;

        switch (Target.Platform)
        {
        case UnrealTargetPlatform.Win32:
        case UnrealTargetPlatform.Win64:
            bPlatformAllowed = true;
            platformName     = Target.Platform == UnrealTargetPlatform.Win64 ? "Win64" : "Win32";
            platPathSuffixes.Add(Path.Combine(platformName, Target.WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2015 || Target.WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2017 ? "VS2015" : "VS2013"));
            libNameExt    = ".lib";
            libNamePrefix = "";
            break;

        case UnrealTargetPlatform.Mac:
            bPlatformAllowed = true;
            platformName     = "Mac";
            platPathSuffixes.Add(platformName);
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_OSX");
            // On Mac, in library mode, always assume DLL since libs are universal for both dylib and static builds
            if (!bFullSource)
            {
                PublicDefinitions.Add("A_IS_DLL");
            }
            break;

        case UnrealTargetPlatform.Linux:
            bPlatformAllowed = true;
            platformName     = "Linux";
            platPathSuffixes.Add(platformName);
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_LINUX64");
            //UEBuildConfiguration.bForceEnableExceptions = true;
            break;

        case UnrealTargetPlatform.IOS:
            bPlatformAllowed = true;
            platformName     = "IOS";
            platPathSuffixes.Add(platformName);
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_iOS");
            break;

        case UnrealTargetPlatform.TVOS:
            bPlatformAllowed = true;
            platformName     = "TVOS";
            platPathSuffixes.Add(platformName);
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_tvOS");
            break;

        case UnrealTargetPlatform.Android:
            bPlatformAllowed = true;
            platformName     = "Android";
            platPathSuffixes.Add(Path.Combine(platformName, "ARM"));
            platPathSuffixes.Add(Path.Combine(platformName, "ARM64"));
            platPathSuffixes.Add(Path.Combine(platformName, "x86"));
            platPathSuffixes.Add(Path.Combine(platformName, "x64"));
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_ANDROID");
            break;

        case UnrealTargetPlatform.XboxOne:
            bPlatformAllowed = bFullSource;
            platformName     = "XONE";
            PublicDefinitions.Add("A_PLAT_X_ONE");
            break;

        case UnrealTargetPlatform.PS4:
            bPlatformAllowed = bFullSource;
            platformName     = "PS4";
            PublicDefinitions.Add("A_PLAT_PS4");
            break;
        }

        // NOTE: All modules inside the SkookumScript plugin folder must use the exact same definitions!
        switch (Target.Configuration)
        {
        case UnrealTargetConfiguration.Debug:
        case UnrealTargetConfiguration.DebugGame:
            libNameSuffix = useDebugCRT ? "-Debug" : "-DebugCRTOpt";
            PublicDefinitions.Add("A_EXTRA_CHECK=1");
            PublicDefinitions.Add("A_UNOPTIMIZED=1");
            break;

        case UnrealTargetConfiguration.Development:
        case UnrealTargetConfiguration.Test:
            libNameSuffix = "-Development";
            PublicDefinitions.Add("A_EXTRA_CHECK=1");
            break;

        case UnrealTargetConfiguration.Shipping:
            libNameSuffix = "-Shipping";
            PublicDefinitions.Add("A_SYMBOL_STR_DB=1");
            PublicDefinitions.Add("A_NO_SYMBOL_REF_LINK=1");
            break;
        }

        // Determine if monolithic build
        var bIsMonolithic = (Target.LinkType == TargetLinkType.Monolithic);

        if (!bIsMonolithic)
        {
            PublicDefinitions.Add("A_IS_DLL");
        }

        // Public include paths
        PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Public"));

        if (bFullSource)
        {
            // We're building SkookumScript from source - not much else needed
            PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "Private"));
        }
        else if (bPlatformAllowed)
        {
            var moduleName = "AgogCore";
            // Link with monolithic library on all platforms except UE4Editor Win64 which requires a specific DLL import library
            var libFileNameStem = libNamePrefix + moduleName + ((!bIsMonolithic && Target.Platform == UnrealTargetPlatform.Win64) ? "-" + platformName : "") + libNameSuffix;
            var libFileName     = libFileNameStem + libNameExt;
            var libDirPathBase  = Path.Combine(ModuleDirectory, "Lib");
            // Add library paths to linker parameters
            foreach (var platPathSuffix in platPathSuffixes)
            {
                var libDirPath  = Path.Combine(libDirPathBase, platPathSuffix);
                var libFilePath = Path.Combine(libDirPath, libFileName);

                PublicLibraryPaths.Add(libDirPath);

                // For non-Android, add full path
                if (Target.Platform != UnrealTargetPlatform.Android)
                {
                    PublicAdditionalLibraries.Add(libFilePath);
                }
            }

            // For Android, just add core of library name, e.g. "SkookumScript-Development"
            if (Target.Platform == UnrealTargetPlatform.Android)
            {
                PublicAdditionalLibraries.Add(moduleName + libNameSuffix);
            }
        }
    }
    public AgogCore(ReadOnlyTargetRules Target) : base(Target)
    {
        bRequiresImplementModule = false;

        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

        // Ignore warnings about hokey code in windows.h
        bEnableUndefinedIdentifierWarnings = false;

        // If full source is present, build module from source, otherwise link with binary library
        Type = ModuleType.CPlusPlus;

        // Enable fussy level of checking (Agog Labs internal)
        ExternalDependencies.Add("enable-mad-check.txt");
        var bMadCheck = File.Exists(Path.Combine(ModuleDirectory, "enable-mad-check.txt"));

        if (bMadCheck)
        {
            PublicDefinitions.Add("A_MAD_CHECK");
        }

        // Add user define if exists (Agog Labs internal)
        ExternalDependencies.Add("mad-define.txt");

        PublicDependencyModuleNames.AddRange(
            new string[]
        {
            "Core",
            "CoreUObject",
            "Engine",
        }
            );

        var userDefineFilePath = Path.Combine(ModuleDirectory, "mad-define.txt");

        if (File.Exists(userDefineFilePath))
        {
            var userDefine = File.ReadAllText(userDefineFilePath).Trim();
            if (userDefine.Length > 0)
            {
                PublicDefinitions.Add(userDefine);
            }
        }

        List <string> platPathSuffixes = new List <string>();

        string platformName = "";
        bool   useDebugCRT  = Target.bDebugBuildsActuallyUseDebugCRT;

        if (Target.Platform == UnrealTargetPlatform.Win64)
        {
            platformName = "Win64";
            platPathSuffixes.Add(Path.Combine(platformName, Target.WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2019 ? "VS2019" : "VS2017"));
        }
        else if (Target.Platform == UnrealTargetPlatform.Mac)
        {
            platformName = "Mac";
            platPathSuffixes.Add(platformName);
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_OSX");
        }
        else if (Target.Platform == UnrealTargetPlatform.Linux)
        {
            platformName = "Linux";
            platPathSuffixes.Add(platformName);
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_LINUX64");
            //UEBuildConfiguration.bForceEnableExceptions = true;
        }
        else if (Target.Platform == UnrealTargetPlatform.IOS)
        {
            platformName = "IOS";
            platPathSuffixes.Add(platformName);
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_iOS");
        }
        else if (Target.Platform == UnrealTargetPlatform.TVOS)
        {
            platformName = "TVOS";
            platPathSuffixes.Add(platformName);
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_tvOS");
        }
        else if (Target.Platform == UnrealTargetPlatform.Android)
        {
            platformName = "Android";
            platPathSuffixes.Add(Path.Combine(platformName, "ARM"));
            platPathSuffixes.Add(Path.Combine(platformName, "ARM64"));
            platPathSuffixes.Add(Path.Combine(platformName, "x86"));
            platPathSuffixes.Add(Path.Combine(platformName, "x64"));
            useDebugCRT = true;
            PublicDefinitions.Add("A_PLAT_ANDROID");
        }
        else if (Target.Platform == UnrealTargetPlatform.XboxOne)
        {
            platformName = "XONE";
            PublicDefinitions.Add("A_PLAT_X_ONE");
        }
        else if (Target.Platform == UnrealTargetPlatform.PS4)
        {
            platformName = "PS4";
            PublicDefinitions.Add("A_PLAT_PS4");
        }
        else if (Target.Platform == UnrealTargetPlatform.Switch)
        {
            platformName = "SWITCH";
            PublicDefinitions.Add("A_PLAT_SWITCH");
        }

        // NOTE: All modules inside the SkookumScript plugin folder must use the exact same definitions!
        switch (Target.Configuration)
        {
        case UnrealTargetConfiguration.Debug:
        case UnrealTargetConfiguration.DebugGame:
            PublicDefinitions.Add("A_EXTRA_CHECK=1");
            PublicDefinitions.Add("A_UNOPTIMIZED=1");
            break;

        case UnrealTargetConfiguration.Development:
        case UnrealTargetConfiguration.Test:
            PublicDefinitions.Add("A_EXTRA_CHECK=1");
            break;

        case UnrealTargetConfiguration.Shipping:
            PublicDefinitions.Add("A_SYMBOL_STR_DB=1");
            PublicDefinitions.Add("A_NO_SYMBOL_REF_LINK=1");
            break;
        }

        // Determine if monolithic build
        var bIsMonolithic = (Target.LinkType == TargetLinkType.Monolithic);

        if (!bIsMonolithic)
        {
            PublicDefinitions.Add("A_IS_DLL");
        }

        // Public include paths
        PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Public"));

        // We're building SkookumScript from source - not much else needed
        PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "Private"));
    }
示例#5
0
 private IEnumerable <NuGetReference> GetExternalPackages()
 => ExternalDependencies?.Select(each
                                 => new NuGetReference(each.Name, each.Version)) ?? Empty;
 public BenchmarkOptionHelper(ExternalDependencies externalDependencies, CancellationTokenSource cancellationTokenSource)
 {
     _externalDependencies    = externalDependencies;
     _cancellationTokenSource = cancellationTokenSource;
 }
    public NuGetModule(ReadOnlyTargetRules Target) : base(Target)
    {
        PrivateDependencyModuleNames.AddRange(
            new string[]
        {
            "Core",
        }
            );

        // WinRT with Nuget support
        if (Target.Platform == UnrealTargetPlatform.Win64 || Target.Platform == UnrealTargetPlatform.HoloLens)
        {
            // these parameters mandatory for winrt support
            bEnableExceptions = true;
            bUseUnity         = false;
            CppStandard       = CppStandardVersion.Cpp17;
            PublicSystemLibraries.AddRange(new string [] { "shlwapi.lib", "runtimeobject.lib" });

            // prepare everything for nuget
            string MyModuleName = GetType().Name;
            string NugetFolder  = Path.Combine(PluginDirectory, "Intermediate", "Nuget", MyModuleName);
            Directory.CreateDirectory(NugetFolder);

            string BinariesSubFolder = Path.Combine("Binaries", "ThirdParty", Target.Type.ToString(), Target.Platform.ToString(), Target.Architecture);

            PublicDefinitions.Add(string.Format("THIRDPARTY_BINARY_SUBFOLDER=\"{0}\"", BinariesSubFolder.Replace(@"\", @"\\")));

            string BinariesFolder = Path.Combine(PluginDirectory, BinariesSubFolder);
            Directory.CreateDirectory(BinariesFolder);

            ExternalDependencies.Add("packages.config");

            // download nuget
            string NugetExe = Path.Combine(NugetFolder, "nuget.exe");
            if (!File.Exists(NugetExe))
            {
                using (System.Net.WebClient myWebClient = new System.Net.WebClient())
                {
                    // we aren't focusing on a specific nuget version, we can use any of them but the latest one is preferable
                    myWebClient.DownloadFile(@"https://dist.nuget.org/win-x86-commandline/latest/nuget.exe", NugetExe);
                }
            }

            // run nuget to update the packages
            {
                var StartInfo = new System.Diagnostics.ProcessStartInfo(NugetExe, string.Format("install \"{0}\" -OutputDirectory \"{1}\"", Path.Combine(ModuleDirectory, "packages.config"), NugetFolder));
                StartInfo.UseShellExecute = false;
                StartInfo.CreateNoWindow  = true;
                var ExitCode = Utils.RunLocalProcessAndPrintfOutput(StartInfo);
                if (ExitCode < 0)
                {
                    throw new BuildException("Failed to get nuget packages.  See log for details.");
                }
            }

            // get list of the installed packages, that's needed because the code should get particular versions of the installed packages
            string[] InstalledPackages = Utils.RunLocalProcessAndReturnStdOut(NugetExe, string.Format("list -Source \"{0}\"", NugetFolder)).Split(new char[] { '\r', '\n' });

            // winmd files of the packages
            List <string> WinMDFiles = new List <string>();

            // WinRT lib for some job
            string QRPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.MixedReality.QR"));
            if (!string.IsNullOrEmpty(QRPackage))
            {
                string QRFolderName = QRPackage.Replace(" ", ".");

                // copying dll and winmd binaries to our local binaries folder
                // !!!!! please make sure that you use the path of file! Unreal can't do it for you !!!!!
                string WinMDFile = Path.Combine(NugetFolder, QRFolderName, @"lib\uap10.0.18362\Microsoft.MixedReality.QR.winmd");
                SafeCopy(WinMDFile, Path.Combine(BinariesFolder, "Microsoft.MixedReality.QR.winmd"));

                SafeCopy(Path.Combine(NugetFolder, QRFolderName, string.Format(@"runtimes\win10-{0}\native\Microsoft.MixedReality.QR.dll", Target.WindowsPlatform.Architecture.ToString())),
                         Path.Combine(BinariesFolder, "Microsoft.MixedReality.QR.dll"));

                // also both both binaries must be in RuntimeDependencies, unless you get failures in Hololens platform
                RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.MixedReality.QR.dll"));
                RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.MixedReality.QR.winmd"));

                //add winmd file to the list for further processing using cppwinrt.exe
                WinMDFiles.Add(WinMDFile);
            }

            string ASAPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.Azure.SpatialAnchors.WinRT"));
            if (!string.IsNullOrEmpty(ASAPackage))
            {
                string ASAFolderName = ASAPackage.Replace(" ", ".");

                // copying dll and winmd binaries to our local binaries folder
                // !!!!! please make sure that you use the path of file! Unreal can't do it for you !!!!!
                string WinMDFile = Path.Combine(NugetFolder, ASAFolderName, @"lib\uap10.0\Microsoft.Azure.SpatialAnchors.winmd");
                SafeCopy(WinMDFile, Path.Combine(BinariesFolder, "Microsoft.Azure.SpatialAnchors.winmd"));

                SafeCopy(Path.Combine(NugetFolder, ASAFolderName, string.Format(@"runtimes\win10-{0}\native\Microsoft.Azure.SpatialAnchors.dll", Target.WindowsPlatform.Architecture.ToString())),
                         Path.Combine(BinariesFolder, "Microsoft.Azure.SpatialAnchors.dll"));

                SafeCopy(Path.Combine(NugetFolder, ASAFolderName, string.Format(@"runtimes\win10-{0}\native\CoarseRelocUW.dll", Target.WindowsPlatform.Architecture.ToString())),
                         Path.Combine(BinariesFolder, "CoarseRelocUW.dll"));

                // also all binaries must be in RuntimeDependencies
                RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.Azure.SpatialAnchors.dll"));
                RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.Azure.SpatialAnchors.winmd"));
                RuntimeDependencies.Add(Path.Combine(BinariesFolder, "CoarseRelocUW.dll"));

                // add winmd file to the list for further processing using cppwinrt.exe
                WinMDFiles.Add(WinMDFile);
            }

            if (Target.Platform == UnrealTargetPlatform.Win64)
            {
                // Microsoft.VCRTForwarders.140 is needed to run WinRT dlls in Win64 platforms
                string VCRTForwardersPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.VCRTForwarders.140"));
                if (!string.IsNullOrEmpty(VCRTForwardersPackage))
                {
                    string VCRTForwardersName = VCRTForwardersPackage.Replace(" ", ".");
                    foreach (var Dll in Directory.EnumerateFiles(Path.Combine(NugetFolder, VCRTForwardersName, "runtimes/win10-x64/native/release"), "*_app.dll"))
                    {
                        string newDll = Path.Combine(BinariesFolder, Path.GetFileName(Dll));
                        SafeCopy(Dll, newDll);
                        RuntimeDependencies.Add(newDll);
                    }
                }

                string RemotingPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.Holographic.Remoting.OpenXr"));
                if (!string.IsNullOrEmpty(RemotingPackage))
                {
                    string RemotingFolderName = RemotingPackage.Replace(" ", ".");

                    SafeCopy(Path.Combine(NugetFolder, RemotingFolderName, @"build\native\bin\x64\Desktop\Microsoft.Holographic.AppRemoting.OpenXr.dll"),
                             Path.Combine(BinariesFolder, "Microsoft.Holographic.AppRemoting.OpenXr.dll"));

                    SafeCopy(Path.Combine(NugetFolder, RemotingFolderName, @"build\native\bin\x64\Desktop\RemotingXR.json"),
                             Path.Combine(BinariesFolder, "RemotingXR.json"));

                    PublicIncludePaths.Add(Path.Combine(NugetFolder, RemotingFolderName, @"build\native\include\openxr"));

                    RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.Holographic.AppRemoting.OpenXr.dll"));
                    RuntimeDependencies.Add(Path.Combine(BinariesFolder, "RemotingXR.json"));
                }
            }

            // get WinRT package
            string CppWinRTPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.Windows.CppWinRT"));
            if (!string.IsNullOrEmpty(CppWinRTPackage))
            {
                string CppWinRTName   = CppWinRTPackage.Replace(" ", ".");
                string CppWinRTExe    = Path.Combine(NugetFolder, CppWinRTName, "bin", "cppwinrt.exe");
                string CppWinRTFolder = Path.Combine(PluginDirectory, "Intermediate", CppWinRTName, MyModuleName);
                Directory.CreateDirectory(CppWinRTFolder);

                // all downloaded winmd file with WinSDK to be processed by cppwinrt.exe
                var WinMDFilesStringbuilder = new System.Text.StringBuilder();
                foreach (var winmd in WinMDFiles)
                {
                    WinMDFilesStringbuilder.Append(" -input \"");
                    WinMDFilesStringbuilder.Append(winmd);
                    WinMDFilesStringbuilder.Append("\"");
                }

                // generate winrt headers and add them into include paths
                var StartInfo = new System.Diagnostics.ProcessStartInfo(CppWinRTExe, string.Format("{0} -input \"{1}\" -output \"{2}\"", WinMDFilesStringbuilder, Target.WindowsPlatform.WindowsSdkVersion, CppWinRTFolder));
                StartInfo.UseShellExecute = false;
                StartInfo.CreateNoWindow  = true;
                var ExitCode = Utils.RunLocalProcessAndPrintfOutput(StartInfo);
                if (ExitCode < 0)
                {
                    throw new BuildException("Failed to get generate WinRT headers.  See log for details.");
                }

                PublicIncludePaths.Add(CppWinRTFolder);
            }
            else
            {
                // fall back to default WinSDK headers if no winrt package in our list
                PublicIncludePaths.Add(Path.Combine(Target.WindowsPlatform.WindowsSdkDir, "Include", Target.WindowsPlatform.WindowsSdkVersion, "cppwinrt"));
            }
        }
    }