using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using Sharpmake; namespace JustDance.Engine { #region UnitTests project base class internal abstract class UnitTests_Project : EngineProject { protected UnitTests_Project() { Name = GetType().Name.Replace("_", "."); } public override void ConfigureAll(Project.Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); // UnitTests projects use gmock conf.IncludePaths.Add(ExternPath + @"gmock\googlemock\include"); conf.IncludePaths.Add(ExternPath + @"gmock\googletest\include"); conf.IncludePaths.Add(ExternPath + "rapidjson/include"); if (conf.Platform == Platform.nx || conf.Platform == Platform.orbis) { // Suppress warning "binding dereferenced null pointer to reference has undefined behavior" // Due to function template inline T Invalid(); // in extern\gmock\include\gmock\internal\gmock-internal-utils.h conf.AdditionalCompilerOptions.Add("-Wno-null-dereference"); } // For DTEST if (target.Optimization == Optimization.Debug || target.Optimization == Optimization.Release) { if ((conf.Platform == Platform.win64 && target.ApplicationType == ApplicationType.Editor) || conf.Platform == Platform.durango || conf.Platform == Platform.nx || conf.Platform == Platform.orbis) { conf.AddPublicDependency(target); } } if (conf.Platform == Platform.orbis) { conf.AdditionalCompilerOptions.Add("-std=c++14"); } } } #endregion #region UAF #region UAF Adapters Test [Generate] internal class UAF_Adapters_Test : UnitTests_Project { public UAF_Adapters_Test() { RootPath = UnitTestsPath + "adapters"; PrecompileHeader = "precompiled_unittests_adapters"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); conf.Options.Add(Options.Vc.Linker.LinkLibraryDependencies.Enable); conf.SolutionFolder = "/UAF"; conf.IncludePaths.Add(ExternPath + @"GLEW"); conf.IncludePaths.Add(ExternPath + @"Raki/Source"); conf.IncludePaths.Add(ExternPath + @"EDGE/edge_1_2_0/cell/host-common/include", ExternPath + @"EDGE/edge_1_2_0/cell/target/common/include", ExternPath + @"EDGE/edge_1_2_0/cell/target/ppu/include", ExternPath + @"EDGE/edge_1_2_0/cell/target/spu/include"); conf.IncludePaths.Add(ExternPath + @"UbiServices/custom/client-sdk/public", ExternPath + @"UbiServices/custom/external/harbourcommon/libraries/harboureal/api/sources"); //Misc conf.If(Platform.orbis).IncludePaths.Add("$(IISU_SDK_DIR)/include/iisu"); } } #endregion #region UAF Core Test [Generate] internal class UAF_Core_Test : UnitTests_Project { public UAF_Core_Test() { RootPath = UnitTestsPath + "core"; PrecompileHeader = "precompiled_unittests_core"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.SolutionFolder = "/UAF"; conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); conf.Options.Add(Options.Vc.Linker.LinkLibraryDependencies.Enable); } } #endregion #region UAF Editor Test [Generate] internal class UAF_Editor_Test : UnitTests_Project { public UAF_Editor_Test() { RootPath = UnitTestsPath + "editor"; PrecompileHeader = "precompiled_unittests_editor"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.SolutionFolder = "/UAF"; } } #endregion #region UAF Engine Test [Generate] internal class UAF_Engine_Test : UnitTests_Project { public UAF_Engine_Test() { RootPath = UnitTestsPath + "engine"; PrecompileHeader = "precompiled_unittests_engine"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.SolutionFolder = "/UAF"; conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); conf.Options.Add(Options.Vc.Linker.LinkLibraryDependencies.Enable); conf.AddPublicDependency(target); conf.IncludePaths.Add(ExternPath + "UbiServices/custom/client-sdk/public", ExternPath + "UbiServices/custom/external/harbourcommon/libraries/harboureal/api/sources"); } } #endregion #region UAF EngineWrapper Test [Generate] internal class UAF_EngineWrapper_Test : UnitTests_Project { public UAF_EngineWrapper_Test() { RootPath = UnitTestsPath + "engineWrapper"; PrecompileHeader = "precompiled_unittests_engineWrapper"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.SolutionFolder = "/UAF"; conf.IfNot(Platform.win32 | Platform.win64).SourceFilesBuildExcludeRegex.Add(".cpp"); conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); conf.Options.Add(Options.Vc.Linker.LinkLibraryDependencies.Enable); } } #endregion #region UAF Gameplay Test [Generate] internal class UAF_Gameplay_Test : UnitTests_Project { public UAF_Gameplay_Test() { RootPath = UnitTestsPath + "gameplay"; PrecompileHeader = "precompiled_unittests_gameplay"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.SolutionFolder = "/UAF"; conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); conf.Options.Add(Options.Vc.Linker.LinkLibraryDependencies.Enable); } } #endregion #region UAF InitFactory Test [Generate] internal class UAF_InitFactory_Test : UnitTests_Project { public UAF_InitFactory_Test() { RootPath = UnitTestsPath + "initFactory"; PrecompileHeader = "precompiled_unittests_initFactory"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.SolutionFolder = "/UAF"; conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); conf.Options.Add(Options.Vc.Linker.LinkLibraryDependencies.Enable); } } #endregion #endregion #region JD #region JD Editor Test [Generate] internal class JD_Editor_Test : UnitTests_Project { public JD_Editor_Test() { RootPath = UnitTestsPath + "JD/editor"; PrecompileHeader = "JD_precompiled_unittests_editor"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.SolutionFolder = "/JD"; } } #endregion #region JD Gameplay Test [Generate] internal class JD_Gameplay_Test : UnitTests_Project { public JD_Gameplay_Test() { RootPath = UnitTestsPath + "JD/gameplay"; PrecompileHeader = "JD_precompiled_unittests_gameplay"; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.SolutionFolder = "/JD"; conf.IncludePaths.Add(ExternPath + "UbiServices/custom/client-sdk/public", ExternPath + "UbiServices/custom/external/harbourcommon/libraries/harboureal/api/sources"); conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); conf.Options.Add(Options.Vc.Linker.LinkLibraryDependencies.Enable); } } #endregion #endregion #region UA_unittests [Generate] internal class UA_Unittests : UnitTests_Project { public UA_Unittests() { RootPath = UnitTestsPath + "ua_unittests"; OutputType = Configuration.OutputType.Exe; Name = "ua_unittests"; DeployProject = true; } public override void ConfigureAll(Configuration conf, BaseCppTarget target) { base.ConfigureAll(conf, target); conf.If(target.Platform.IsWindows()).TargetFileName = Name + (target.Platform == Platform.win32 ? "32" : ""); conf.Options.Add(Options.Vc.Linker.SubSystem.Console); conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); conf.Options.Add(Options.Vc.Linker.LinkLibraryDependencies.Enable); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.If(Platform.win32 | Platform.win64).AddPublicDependency(target); conf.IfNot(Platform.win32 | Platform.win64).AddPublicDependency(target, DependencySetting.DefaultWithoutLinking); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddExternDependency(target); conf.AddExternDependency(target); conf.If(Platform.win32 | Platform.win64).AddExternDependency(target); conf.AddExternDependency(target); conf.AddExternDependency(target); conf.AddExternDependency(target); conf.AddExternDependency(target); conf.AddExternDependency(target); conf.AddExternDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target, DependencySetting.DefaultWithoutLinking); conf.IfNot(Optimization.Retail).AddPublicDependency(target); conf.AddPublicDependency(target); conf.If(Platform.win32 | Platform.win64 | Platform.orbis | Platform.durango | Platform.nx).AddExternDependency(target); conf.If(Platform.win32 | Platform.win64 | Platform.orbis | Platform.durango | Platform.nx).AddExternDependency(target); conf.IfNot(Optimization.Retail).If(Platform.win32 | Platform.win64 | Platform.orbis | Platform.durango | Platform.nx).AddExternDependency(target); ConfigureGmock(conf, target); switch (conf.Platform) { case Platform.win32: case Platform.win64: ConfigurePC(conf, target); break; case Platform.orbis: ConfigureOrbis(conf, target); break; case Platform.durango: ConfigureDurango(conf, target); break; case Platform.nx: ConfigureNX(conf, target); break; // case Ggp.SharpmakePlatform: ConfigureGGP(conf, target); // break; // case Prospero.SharpmakePlatform: ConfigureProspero(conf, target); // break; } } private static void ConfigureGmock(Configuration conf, BaseCppTarget target) { conf.If(Platform.win32 | Platform.win64 | Platform.orbis | Platform.nx).AddExternDependency(target); } private void ConfigurePC(Configuration conf, BaseCppTarget target) { Debug.Assert(conf.Platform == Platform.win32 || conf.Platform == Platform.win64); conf.Defines.Add("_CONSOLE"); conf.IgnoreLibrary("LIBCMT.lib", "LIBCMTd.lib"); conf.If(Optimization.Debug).IgnoreLibrary("msvcrt.lib"); if (target.ApplicationType == ApplicationType.Editor) { conf.AddPrivateDependency(target); conf.AddPrivateDependency(target); conf.AddPublicDependency(target); conf.AddPublicDependency(target); } string vsVersion = (target.DevEnv == DevEnv.vs2012 ? "vs11" : (target.DevEnv == DevEnv.vs2015 ? "vs14" : "vs15")); string procArch = (target.DevEnv == DevEnv.vs2015 || target.DevEnv == DevEnv.vs2017) ? (conf.Platform == Platform.win32 ? "x86/" : "x64/") : ""; string plainArch = conf.Platform == Platform.win64 ? "64" : "32"; string winArch = "win" + plainArch; string P4Arch = procArch; string ubiservicesArch = winArch; string edgeArch = conf.Platform == Platform.win64 ? "x64" : "Win32"; string kinectArch = conf.Platform == Platform.win64 ? "amd64" : "x86"; string wiiYourselfArch = conf.Platform == Platform.win64 ? "/x64" : ""; conf.If(Optimization.Debug | Optimization.Release).LibraryPaths.Add(ExternPath + "p4/lib/" + vsVersion + "/" + P4Arch + target.Optimization); conf.LibraryPaths.Add( /*ExternPath + "UbiServices/custom/lib/SdkClient/win64_2015/" + target.Optimization,*/ ExternPath + "UbiServices/custom/lib/SdkClient/" + ubiservicesArch + "_" + target.DevEnv.GetDevEnvString() + "/" + target.Optimization, ExternPath + "UbiServices/custom/external/dependencies/uplaypc/lib/", ExternPath + "WiiYourself_1.15/miniDDK/lib" + wiiYourselfArch, ExternPath + "EDGE/edge_1_2_0/lib/" + edgeArch + "/VS" + target.DevEnv.GetDevEnvString(), ExternPath + "KinectPC_Sdk/v1.8/Lib/" + kinectArch, ExternPath + "KinectGesture/Lib"); string libNvttArch = target.DevEnv == DevEnv.vs2012 ? "32" : target.DevEnv == DevEnv.vs2015 ? plainArch : target.DevEnv == DevEnv.vs2017 ? plainArch : "32"; string libNvttSuffix = target.DevEnv == DevEnv.vs2012 ? "_vs12" : target.DevEnv == DevEnv.vs2015 ? "_vs15" : target.DevEnv == DevEnv.vs2017 ? "_vs17" : ""; string libNvttName = "nvtt" + libNvttArch + libNvttSuffix + ".lib"; conf.LibraryFiles.Add("edgeanim_" + winArch + "_r.lib"); conf.If(Optimization.Debug).LibraryFiles.Add("Version.lib", "xapobased.lib", "nvcore.lib", "nvimage.lib", "nvmath.lib", libNvttName, "dxguid.lib", "xaudio2_8.lib", "d3d9.lib", "winmm.lib", "d3d11.lib", "dxgi.lib", "dinput8.lib", "XInput.lib", "winmm.lib", "IpHlpApi.lib", "Wininet.lib", "ws2_32.lib", "dsound.lib"); conf.If(Optimization.Release).LibraryFiles.Add("xapobase.lib"); conf.If(Optimization.Debug | Optimization.Release).LibraryFiles.Add("libclient.lib", "libsupp.lib", "librpc.lib", "libp4api.lib", "libp4script.lib", "libp4script_c.lib", "libp4script_curl.lib", "libp4script_sqlite.lib"); conf.If(Optimization.Release | Optimization.Retail).LibraryFiles.Add("Version.lib", "nvcore.lib", "nvimage.lib", "nvmath.lib", libNvttName, "dxguid.lib", "xaudio2_8.lib", "d3d9.lib", "winmm.lib", "dinput8.lib", "XInput.lib", "winmm.lib", "d3d11.lib", "dxgi.lib", "IpHlpApi.lib", "Wininet.lib", "ws2_32.lib", "dsound.lib"); conf.AdditionalLinkerOptions.Add("/ignore:4204"); conf.LibraryFiles.Add("psapi.lib"); conf.LibraryFiles.Add("mf.lib", "mfplat.lib", "mfreadwrite.lib", "mfuuid.lib", "shlwapi.lib", "wmcodecdspuuid.lib"); string kinectGestureArch = ((target.DevEnv == DevEnv.vs2015 || target.DevEnv == DevEnv.vs2017) && conf.Platform == Platform.win64) ? "x64" : "PC"; conf.If(Optimization.Debug).LibraryFiles.Add("KinectGesture_" + vsVersion + "_" + kinectGestureArch + "d.lib"); conf.If(Optimization.Release | Optimization.Retail).LibraryFiles.Add("KinectGesture_" + vsVersion + "_" + kinectGestureArch + "r.lib"); conf.LibraryFiles.Add("Kinect10.lib"); // UbiServices conf.LibraryFiles.Add("libcurl.lib", "openSSL.lib", "ubiservices.lib", "uszlib.lib", "uplay_r2_loader64.lib", "nghttp2.lib", "crypt32.lib"); conf.AddPostBuildCopy(Path.Combine(ExternPath + "UbiServices/custom/lib/SdkClient/" + ubiservicesArch + "_" + target.DevEnv.GetDevEnvString() + "/" + target.Optimization + "/" + "uplay_r2_loader64.dll")); var cudartDllName = target.DevEnv == DevEnv.vs2012 ? "cudart32_65.dll" : target.DevEnv == DevEnv.vs2015 ? "cudart" + plainArch + "_80.dll" : target.DevEnv == DevEnv.vs2017 ? "cudart" + plainArch + "_101.dll" : "cudart" + plainArch + "_50_35.dll"; conf.AddPostBuildCopy(Path.Combine(ExternPath, @"NVIDIA GPU Computing Toolkit/" + cudartDllName)); conf.EventPreBuild.Add(string.Format(@"IF EXIST $(TargetDir)\Kinect10.dll DEL $(TargetDir)\Kinect10.dll")); conf.AddPostBuildCopy(Path.Combine(ExternPath, @"KinectPC_Sdk\v1.8\lib\" + kinectArch + @"\Kinect10.dll")); if (conf.Platform.IsWindows()) { if (target.ApplicationType == ApplicationType.Editor) { conf.AddPostBuildCopy(ResolveString(DeploymentFilesPath + "win32", conf)); } if (target.ApplicationType == ApplicationType.Standalone) { conf.AddPostBuildCopy(ResolveString(DeploymentFilesPath + "pc", conf)); conf.LibraryFiles.Add(ExternPath + "UplaySDK/lib/" + "uplay_r1_loader.lib"); conf.LibraryFiles.Add(ExternPath + "SteamSDK/redistributable_bin/" + "steam_api.lib"); } } conf.AddPostBuildCopy(Path.Combine(BranchRoot, "tools/extern/AudioEncode/AdpcmEncode.exe")); // execute ua_unittests.exe in the post-build : each time the project is compiled, it executes unit tests if (!target.IsPcStandalone()) { conf.If(Optimization.Debug | Optimization.Release).EventPostBuild.Add(@"$(OutputFile)"); conf.If(Optimization.Debug | Optimization.Release).EventPostBuild.Add(@"IF %ERRORLEVEL% NEQ 0 ECHO Unit Tests didn't finish successfully && EXIT 1"); } } private void ConfigureOrbis(Configuration conf, BaseCppTarget target) { string vsVersion = (target.DevEnv == DevEnv.vs2012 ? "vs11" : (target.DevEnv == DevEnv.vs2015 ? "vs14" : "vs15")); conf.LibraryPaths.Add( ExternPath + "EDGE/edge_1_2_0/lib/Orbis/VS" + target.DevEnv.GetDevEnvString(), ExternPath + "KinectGesture/Lib", ExternPath + "UbiServices/custom/lib/SdkClient/ps4_" + target.DevEnv.GetDevEnvString() + "/" + target.Optimization); conf.LibraryFiles.Add( "SceJson2_stub_weak", "SceSigninDialog_stub_weak", "SceGameLiveStreaming_stub_weak", "SceRandom_stub_weak", "SceWebBrowserDialog_stub_weak", "ScePlayGo_stub_weak", "SceSaveDataDialog_stub_weak", "SceSaveData_stub_weak", "SceDepth_stub_03_weak", "SceNpAuth_stub_weak", "SceNpManager_stub_weak", "SceAppContent_stub_weak", "SceMove_stub_weak", "SceSystemService_stub_weak", "SceCommonDialog_stub_weak", "ScePosix_stub_weak", "SceMsgDialog_stub_weak", "SceImeDialog_stub_weak", "SceFios2_stub_weak", "SceAudioOut_stub_weak", "SceNgs2_stub_weak", "ScePad_stub_weak", "SceAudioIn_stub_weak", "SceNet_stub_weak", "SceNetCtl_stub_weak", "SceGpuAddress", "SceGnmDriver_stub_weak", "SceShaderBinary", "SceVideoOut_stub_weak", "SceUlt_stub_weak", "SceCes", "SceHttp_stub_weak", "SceSsl_stub_weak", "SceNpCommon_stub_weak", "SceRtc_stub_weak", "SceUserService_stub_weak", "SceCamera_stub_weak", "SceSysmodule_stub_weak", "SceNpMatching2_stub_weak", "SceNpUtility_stub_weak", "SceNpScore_stub_weak", "SceNpTrophy_stub_weak", "SceNpTus_stub_weak", "SceNpWebApi_stub_weak", "SceNpCommerce_stub_weak", "SceInvitationDialog_stub_weak", "SceNpProfileDialog_stub_weak", "SceNpToolkit2_stub_weak", "SceErrorDialog_stub_weak", "SceScreenShot_stub_weak", "SceVideoRecording_stub_weak", "SceSecure", ExternPath + "SK_iisu/PS4/Lib/libHumanTracking_stub_weak.a", "SceSpeechRecognition"); conf.If(Optimization.Debug).LibraryFiles.Add( "SceGnm_debug", "SceGnmx_debug", "edgeanim_orbis_d", "KinectGesture_" + vsVersion + "_ORBISd.a"); conf.If(Optimization.Debug | Optimization.Release).LibraryFiles.Add("SceDbg_stub_weak", 10); conf.If(Optimization.Debug | Optimization.Release).LibraryFiles.Add("SceDbgException_stub_weak", 10); conf.If(Optimization.Debug | Optimization.Release).LibraryFiles.Add("SceRazorCpu_stub_weak", 10); conf.If(Optimization.Debug | Optimization.Release).LibraryFiles.Add(ExternPath + "SK_iisu/Ps4/lib/libskv.a", 10); conf.If(Optimization.Release | Optimization.Retail).LibraryFiles.Add( "SceGnm", "SceGnmx", "edgeanim_orbis_r", "KinectGesture_" + vsVersion + "_ORBISr.a"); //UbiServices conf.LibraryFiles.Add( "ubiservices", "openSSL", "uszlib"); conf.AddPostBuildCopy(ResolveString(DeploymentFilesPath + "orbis", conf)); } private void ConfigureDurango(Configuration conf, BaseCppTarget target) { string vsVersion = (target.DevEnv == DevEnv.vs2012 ? "vs11" : (target.DevEnv == DevEnv.vs2015 ? "vs14" : "vs15")); conf.IgnoreLibrary("winmm.lib", "%(IgnoreSpecificDefaultLibraries)"); conf.If(Optimization.Debug).IgnoreLibrary("libcmtd.lib"); conf.If(Optimization.Release | Optimization.Retail).IgnoreLibrary("libcmt.lib"); conf.LibraryPaths.Add( ExternPath + "EDGE/edge_1_2_0/lib/Durango/VS" + target.DevEnv.GetDevEnvString(), ExternPath + "UbiServices/custom/lib/SdkClient/xone_" + target.DevEnv.GetDevEnvString() + "/" + target.Optimization, ExternPath + "KinectGesture/Lib"); conf.If(Optimization.Debug).LibraryFiles.Add("d3dcompiler.lib", "d3d11_x.lib", "combase.lib", "kernelx.lib", "dxguid.lib", "uuid.lib", "xaudio2.lib", "ws2_32.lib", "edgeanim_durango_d.lib", "KinectGesture_" + vsVersion + "_Durangod.lib", "acphal.lib", "xg_x.lib", "pixevt.lib", "Mmdevapi.lib", "EtwPlus.lib"); conf.If(Optimization.Release).LibraryFiles.Add("d3dcompiler.lib", "d3d11_x.lib", "combase.lib", "kernelx.lib", "dxguid.lib", "uuid.lib", "xaudio2.lib", "ws2_32.lib", "edgeanim_durango_r.lib", "KinectGesture_" + vsVersion + "_Durangor.lib", "acphal.lib", "xg_x.lib", "pixevt.lib", "Mmdevapi.lib", "EtwPlus.lib"); conf.If(Optimization.Retail).LibraryFiles.Add("d3d11_x.lib", "combase.lib", "kernelx.lib", "dxguid.lib", "uuid.lib", "xaudio2.lib", "ws2_32.lib", "edgeanim_durango_r.lib", "KinectGesture_" + vsVersion + "_Durangor.lib", "acphal.lib", "xg_x.lib", "Mmdevapi.lib", "EtwPlus.lib"); conf.LibraryFiles.Add("consoleid.lib", "bcrypt.lib"); // UbiServices conf.LibraryFiles.Add("ubiservices.lib"); //Add winm search directory conf.AdditionalCompilerOptions.Add("/AI\"$(Console_SdkWindowsMetadataPath)\" /AI\"$(VCInstallDir)vcpackages\""); //Setup subsystem so we could use recommended from microsoft main signature conf.Options.Add(Options.Vc.Linker.SubSystem.Console); //Hack: clear AppxManifest.xml explicitly cause with our configs visual studio does not do it even when changing configurations conf.EventPreBuild.Add("del \"$(FinalAppxManifestName)\""); conf.Options.Add(Options.Vc.Compiler.CompileAsWinRT.Enable); conf.Options.Add(Options.Vc.Linker.UseLibraryDependencyInputs.Enable); //Package_durango.appxmanifest List files = Directory.GetFiles(ResolveString(SourcePath + "/appFramework"), "*.appxManifest", SearchOption.AllDirectories).ToList(); if (files.Count > 0) { conf.AppxManifestFilePath = files.First(); } conf.ConsumeWinRTExtensions.Add("Live"); conf.AddPostBuildCopy(ResolveString(DeploymentFilesPath + "durango", conf)); } private void ConfigureNX(Configuration conf, BaseCppTarget target) { conf.If(Optimization.Debug | Optimization.Release).LibraryFiles.Add("libnn_profiler.a"); // forced to do this way, otherwise the $(NINTENDO_SDK_ROOT)\..\ path would remove the while $(NINTENDO_SDK_ROOT) path... string sdkRoot = Environment.GetEnvironmentVariable("NINTENDO_SDK_ROOT"); conf.LibraryPaths.Add(ExternPath + "EDGE/edge_1_2_0/lib/NX64/VS" + target.DevEnv.GetDevEnvString(), ExternPath + "UbiServices/custom/lib/SdkClient/switch_" + target.DevEnv.GetDevEnvString() + "/" + target.Optimization, sdkRoot + @"\..\NvnGraphicsDebugger\target\nx-nvn-a64"); // Edge conf.If(Optimization.Debug).LibraryFiles.Add("edgeanim_nx_d"); conf.If(Optimization.Release | Optimization.Retail).LibraryFiles.Add("edgeanim_nx_r"); // UbiServices conf.LibraryFiles.Add("ubiservices", "uszlib"); conf.LibraryFiles.Add("openSSL"); // in NX SDK, not Ubiservices conf.LibraryFiles.Add("curl"); // in NX SDK, not Ubiservices conf.If(Optimization.Debug | Optimization.Release).AdditionalNSOFiles.Add("Nvidia_gfx_debugger.nso"); conf.AdditionalNSOFiles.Add("multimedia.nso"); // to use hardware video decoding chipset conf.MetadataSource = @"$(ProjectDir)..\..\..\gameroot\nx\JD.aarch64.lp64.meta"; } private void ConfigureGGP(Configuration conf, BaseCppTarget target) { } private void ConfigureProspero(Configuration conf, BaseCppTarget target) { } } #endregion }