public override void RunPostStep(List <ModuleDef> Modules, ModuleDef CoreModule) { VisualStudioProjectEditor.EnableUnityBuild(CoreModule); foreach (ModuleDef m in Modules) { VisualStudioProjectEditor.EnableUnityBuild(m); VisualStudioProjectEditor.ProcessFile(m); VisualStudioProjectEditor.ReplaceAllModule(m, "$(Console_Libs).lib", "$(Console_Libs)"); } VisualStudioProjectEditor.ReplaceAllModule(CoreModule, "$(Console_Libs).lib", "$(Console_Libs)"); //foreach (BuildConfig bc in ModuleDefManager.CurrentConfigs) //{ // string path = StringUtils.SanitizePath(ModuleDefManager.GetBinPath()/* + "\\" + PD.Name*/ + "\\" + bc.Name + "\\"); // VisualStudioProjectEditor.SetTargetOutput(BuildAllTarget, path, CoreModule.OutputObjectName, bc.Name); //} }
public override void RunPostStep(List <ModuleDef> Modules, ModuleDef CoreModule) { string replacement = " Win64|x64"; string ConfigToken = "</Configuration>"; string ConfigreplaceToken = " Win64</Configuration>"; VisualStudioProjectEditor.EnableUnityBuild(CoreModule); VisualStudioProjectEditor.ReplaceAllModule(CoreModule, "|x64", replacement); VisualStudioProjectEditor.ReplaceAllModule(CoreModule, ConfigToken, ConfigreplaceToken); foreach (ModuleDef m in Modules) { VisualStudioProjectEditor.EnableUnityBuild(m); VisualStudioProjectEditor.ProcessFile(m); VisualStudioProjectEditor.ReplaceAllModule(m, "|x64", replacement); VisualStudioProjectEditor.ReplaceAllModule(m, ConfigToken, ConfigreplaceToken); } string buildall = ModuleDefManager.GetIntermediateDir() + "\\ALL_Build.vcxproj"; VisualStudioProjectEditor.ReplaceAll(buildall, "|x64", replacement); VisualStudioProjectEditor.ReplaceAll(buildall, ConfigToken, ConfigreplaceToken); string HeaderTool = ModuleDefManager.GetIntermediateDir() + "\\HeaderTool.vcxproj"; VisualStudioProjectEditor.ReplaceAll(HeaderTool, "|x64", replacement); VisualStudioProjectEditor.ReplaceAll(HeaderTool, ConfigToken, ConfigreplaceToken); string SLNpath = ModuleDefManager.GetIntermediateDir() + "\\Engine.sln"; foreach (BuildConfig bc in ModuleDefManager.CurrentConfigs) { string token = "|x64.ActiveCfg = " + bc.Name + "|x64"; string repalcementtoken = "|Win64.ActiveCfg = " + bc.Name + " Win64|x64"; VisualStudioProjectEditor.ReplaceAll(SLNpath, token, repalcementtoken); token = "|x64.Build.0 = " + bc.Name + "|x64"; repalcementtoken = "|Win64.Build.0 = " + bc.Name + " Win64|x64"; VisualStudioProjectEditor.ReplaceAll(SLNpath, token, repalcementtoken); token = "|x64 = " + bc.Name + "|x64"; repalcementtoken = "|Win64 = " + bc.Name + "|Win64"; VisualStudioProjectEditor.ReplaceAll(SLNpath, token, repalcementtoken); } if (UseAllBuildWorkAround) { foreach (BuildConfig bc in ModuleDefManager.CurrentConfigs) { string path = StringUtils.SanitizePath(ModuleDefManager.GetBinPath() + "\\" + bc.Name + "\\"); VisualStudioProjectEditor.SetTargetOutput(BuildAllTarget, path, CoreModule.OutputObjectName, bc.Name); } } }
public void ProcessModule(ModuleDef Module) { if (Module.Processed) { return; } OutputData += "#-------------Module Start " + Module.ModuleName + "----------------\n"; Module.GatherSourceFiles(); Module.GatherIncludes(); if (Module.LaunguageType == ModuleDef.ProjectType.CSharp) { OutputData += CmakeCSharpProject.GetModule(Module); return; } Module.PreProcessorDefines.AddRange(SingleTargetPlatform.Defines); string AllSourceFiles = StringUtils.ArrayStringQuotes(Module.ModuleSourceFiles.ToArray()); string ExtraSourceFiles = StringUtils.ArrayStringQuotes(Module.ModuleExtraFiles.ToArray()); string ALLFiles = StringUtils.RelativeToABS(Module.ModuleSourceFiles) + ExtraSourceFiles; if (Module.ModuleOutputType == ModuleDef.ModuleType.ModuleDLL) { OutputData += "add_library( " + Module.ModuleName + " MODULE " + ALLFiles + ")\n"; } else if (Module.ModuleOutputType == ModuleDef.ModuleType.DLL) { OutputData += "add_library( " + Module.ModuleName + " SHARED " + ALLFiles + ")\n"; } else if (Module.ModuleOutputType == ModuleDef.ModuleType.LIB) { OutputData += "add_library( " + Module.ModuleName + " STATIC " + ALLFiles + ")\n"; } else if (Module.ModuleOutputType == ModuleDef.ModuleType.EXE) { OutputData += "add_executable( " + Module.ModuleName + " " + ALLFiles + ")\n"; OutputData += "set_target_properties(" + Module.ModuleName + " PROPERTIES ENABLE_EXPORTS On)\n"; } if (Module.UseConsoleSubSystem) { OutputData += "set_target_properties(" + Module.ModuleName + " PROPERTIES LINK_FLAGS ${CMAKE_EXE_LINKER_CONSOLE_FLAGS})\n"; foreach (BuildConfig bc in ModuleDefManager.CurrentConfigs) { string OutputDir = StringUtils.SanitizePath(ModuleDefManager.GetBinPath() + "\\Tools\\" + bc.Name + "\\"); OutputData += "set_target_properties(" + Module.ModuleName + " PROPERTIES RUNTIME_OUTPUT_DIRECTORY_" + bc.Name.ToUpper() + " \"" + OutputDir + "\")\n"; } } if (Module.OutputObjectName.Length > 0) { OutputData += "set_target_properties(" + Module.ModuleName + " PROPERTIES OUTPUT_NAME \"" + Module.OutputObjectName + "\")\n"; } if (Module.SolutionFolderPath.Length == 0) { Module.SolutionFolderPath = "Engine/Modules"; } OutputData += "set_target_properties(" + Module.ModuleName + " PROPERTIES FOLDER " + Module.SolutionFolderPath + ")\n"; if (Module.ModuleLibs.Count != 0) { OutputData += "target_link_libraries(" + Module.ModuleName + " " + StringUtils.ArrayStringQuotes(Module.ModuleLibs.ToArray()) + ")\n"; } if (PreBuild_HeaderTool) { OutputData += "add_dependencies(" + Module.ModuleName + " " + HeaderToolTarget + ")\n"; } if (Module.LaunguageType == ModuleDef.ProjectType.ManagedCPP) { //Module.ModuleDepends.Add("CSharpCore"); } if (Module.ModuleDepends.Count != 0) { OutputData += "target_link_libraries(" + Module.ModuleName + " " + StringUtils.ArrayStringQuotes(Module.ModuleDepends.ToArray()) + ")\n"; } VisualStudioProjectEditor.ProcessNuGetPacks(Module); List <string> Dirs = new List <string>(); Module.GetIncludeDirs(ref Dirs); if (Module != ModuleDefManager.CoreModule) { ModuleDefManager.CoreModule.GetIncludeDirs(ref Dirs); } if (Dirs.Count > 0) { #if true OutputData += "target_include_directories(" + Module.ModuleName + " PRIVATE " + StringUtils.ArrayStringQuotes(Dirs.ToArray()) + ")\n"; #else OutputData += "include_directories(" + Module.ModuleName + " " + ArrayStringQuotes(Dirs.ToArray()) + ")\n"; #endif Dirs.Clear(); } OutputData += "source_group(TREE \"" + StringUtils.SanitizePath(ModuleDefManager.GetRootPath()) + "\" REGULAR_EXPRESSION \"*.h\" FILES " + ALLFiles + ")\n"; OutputData += "set_source_files_properties(" + ExtraSourceFiles + " PROPERTIES HEADER_FILE_ONLY ON)\n"; OutputData += "set_target_properties( " + Module.ModuleName + " PROPERTIES GHS_NO_SOURCE_GROUP_FILE OFF)\n"; if (Module.UseCorePCH) { Module.PCH = ModuleDefManager.CoreModule.PCH; } if (Module.PCH.Length != 0) { string PCHString = /*"Source/" +*/ /*Module.SourceFileSearchDir + "/"+*/ Module.PCH; string pchstring = "/FI" + PCHString + ".h"; string SharedHeaderData = " /Yu" + PCHString + ".h "; if (Module.UseCorePCH) { SharedHeaderData = ""; } #if false if (Module.UseCorePCH) { SharedHeaderData = "/Fp" + ModuleDefManager.CoreModule.ModuleName + ".dir" + "/$(Configuration)/" + ModuleDefManager.CoreModule.ModuleName + ".pch"; } #endif OutputData += "set_target_properties(" + Module.ModuleName + " PROPERTIES COMPILE_FLAGS \"" + SharedHeaderData + pchstring + "\" )\n"; if (!Module.UseCorePCH) { OutputData += "SET_SOURCE_FILES_PROPERTIES(\"" + Module.SourceFileSearchDir + "/" + Module.PCH + ".cpp\" COMPILE_FLAGS \"/Yc" + PCHString + ".h\" )\n"; } } if (VisualStudioProjectEditor.CanModuleUnity(Module)) { Module.PreProcessorDefines.Add("WITH_UNITY"); } OutputData += "target_compile_definitions(" + Module.ModuleName + " PRIVATE " + StringUtils.ListStringDefines(Module.PreProcessorDefines) + ")\n"; ///WHOLEARCHIVE if (Module.ModuleDepends.Count > 0 && Module.ModuleOutputType == ModuleDef.ModuleType.LIB) { string WholeDataString = ""; foreach (string s in Module.ModuleDepends) { WholeDataString += "/WHOLEARCHIVE:" + s + " "; } OutputData += "SET_TARGET_PROPERTIES(" + Module.ModuleName + " PROPERTIES LINK_FLAGS_DEBUG " + WholeDataString + " )\n"; } if (Module.NeedsCore && Module != ModuleDefManager.CoreModule) { OutputData += "add_dependencies(" + Module.ModuleName + " Core )\n"; } if (Module.IsCoreModule) { string VersionGetterString = StringUtils.SanitizePath(ModuleDefManager.GetRootPath() + "/Scripts/WriteCommit.bat "); OutputData += "add_custom_command(TARGET " + Module.ModuleName + " PRE_BUILD \nCOMMAND \"" + VersionGetterString + "\" )\n"; } if (Module.LaunguageType == ModuleDef.ProjectType.ManagedCPP) { //Imported_common_language_runtime OutputData += "set_property(TARGET " + Module.ModuleName + " PROPERTY VS_DOTNET_TARGET_FRAMEWORK_VERSION \"v4.6.1\")\n"; OutputData += "set_target_properties(" + Module.ModuleName + " PROPERTIES COMMON_LANGUAGE_RUNTIME \"\")\n"; //OutputData += "SET (MANAGEDFLAGS \"${CMAKE_CXX_FLAGS}\")\n"; //OutputData += "SET (MANAGEDFLAGS_D \"${CMAKE_CXX_FLAGS_DEBUG}\")\n"; //OutputData += "STRING(REPLACE \"/EHsc\" \"/EHa\" MANAGEDFLAGS ${MANAGEDFLAGS}) \n STRING(REPLACE \"/RTC1\" \"\" MANAGEDFLAGS_D ${MANAGEDFLAGS_D})\n"; //OutputData += "set_target_properties(" + Module.ModuleName + " PROPERTIES COMPILE_FLAGS \"${CMAKE_CXX_FLAGS}" + "/clr" + "\" )\n"; OutputData += "set_property(TARGET " + Module.ModuleName + " PROPERTY VS_DOTNET_REFERENCES \"System\" " + StringUtils.ArrayStringQuotes(Module.NetReferences.ToArray()) + " )\n"; } Module.Processed = true; }