Commit Graph

196 Commits

Author SHA1 Message Date
bryan sefcik
4522523cb7 Fixed a PCH issue when compiling with multiple architectures at the same time.
#preflight 63eebdc13c1eb56f05661567

[CL 24272931 by bryan sefcik in ue5-main branch]
2023-02-16 18:55:59 -05:00
bryan sefcik
7dc0758263 Updated UBT to create the shared PCH instances before setting up the modules so all the PCHs and parent PCHs are setup beforehand.
#preflight 63eeb441977ceed915cb4207
#rb joe.kirchoff

[CL 24272192 by bryan sefcik in ue5-main branch]
2023-02-16 18:31:35 -05:00
bryan sefcik
0ef675123b Possible fix for SNDBS when compiling with PCH chains.
#jira
#rb joe.kirchoff
#preflight 63ed1d817d2ec3d2fd4c3452

[CL 24251837 by bryan sefcik in ue5-main branch]
2023-02-16 02:02:35 -05:00
joe kirchoff
ab11875d50 UnrealBuildTool: Always make a unity file for small modules when enabled unless requested to not do so
#rnx
#rb trivial

[CL 24225341 by joe kirchoff in ue5-main branch]
2023-02-14 20:53:25 -05:00
ben woodhouse
982c48de6a Add support for overriding module optimization mode from a target. This allows game projects to override engine module optimization modes.
Note: This also implicitly disables PCH usage if a private PCH isn't set (this was previously fatal, but we need to be more flexible if we're overriding from the target).

#rb joe.kirchoff

[CL 24225336 by ben woodhouse in ue5-main branch]
2023-02-14 20:53:08 -05:00
bryan sefcik
592942fad7 Added support for Clang PCH chaining
https://clang.llvm.org/docs/PCHInternals.html#chained-precompiled-headers

Linux - EngineTestEditor -allmodules
Before:
Total PCH Size: 3.41 GB

After:
Total PCH Size: 2.65 GB

#jira
#rb joe.kirchoff
#preflight 63e57da9636f66aac7dc1818

[CL 24114121 by bryan sefcik in ue5-main branch]
2023-02-09 22:37:30 -05:00
henrik karlsson
8238c1d56b [UBT]
* Fixed so .gen.cpp files are also using shared rsp. Also made code a little bit simpler

#preflight 63e49b72ea7ad6869855fccd
#rb joe.kirchoff

[CL 24106316 by henrik karlsson in ue5-main branch]
2023-02-09 16:24:11 -05:00
henrik karlsson
5f74d114d5 [UBT]
Changed how single files are built. We don't want to invalidate makefile everytime we build single files since it destroys turnaround times. With this change a single file compile can take 2s (+ the actual compile time).

The new behavior injects a special action per module when creating the makefile. These actions can be used to on-the-fly create a proper compile action that follows the rules of the module that the specific file belongs to.. In a normal build these actions are ignored since the logic deciding which actions to build is backtraced from which binaries we want to create.

When a specific file compile is triggered, the logic deciding which files to build search up all these special actions and create a lookup based on which folders the special actions handle. It then try to find the special action that handles the specific file. The matching special action then creates a compile action that can handle that specific file and then queue up the action for execution. If no special action is found it falls back to try to use actions that have this specific file as input (ispc files for example)

Details:
* Removed lots of custom code for "specific files" handling
* Changed so pch (both private and shared) always use definition file. Added #pragma once and change so pch wrapper file include definition file. This made the adaptive path and specific file easy to implement (just disable pch in compile environment and it will just work)
* Added SingleFileAction for both VCToolChain and ClangToolChain. It now works to compile specific headers and cpp files. (It creates wrapper files on the fly to be able to compile all header files (compiling headers directly blow up if there are circular includes)
* Fixed so GenerateClangDatabase mode works with new changes
* Moved the logic that makes sure all (directly) depending cpp files are recompiled when .h are included in the singlefile option

#preflight 63dcc46f78716a01e8069649
#rb joe.kirchoff

[CL 24094027 by henrik karlsson in ue5-main branch]
2023-02-09 04:20:43 -05:00
henrik karlsson
1a528a125b [UBT]
* Changed so code generating unity file is modifying the right compile environment when adding lookup for source file -> .gen.cpp

Fixes a bug where sndbs fails to remotely build unity files properly

#preflight skipped
#rb joe.kirchoff

[CL 24092753 by henrik karlsson in ue5-main branch]
2023-02-08 23:59:58 -05:00
joe kirchoff
0e0c85e015 UnrealBuildTool: Use a force include define header for .ixx compiles
#rnx
#rb Henrik.Karlsson
#jira UE-175773
#preflight 63e2a028c2257e56f40f5b85

[CL 24058078 by joe kirchoff in ue5-main branch]
2023-02-07 15:41:28 -05:00
henrik karlsson
0de807f1a8 [UBT]
* Added support for additional response files (will be used by header units)
* Added support for shared response files and changed so normal cpp/h build path uses it if toolchain supports it.
* Enabled shared response files on all platforms but android (which doesnt seem to support reponse files including response files)
* Some cleanup in the iwyu toolchain related to shared rsp files

#preflight 63d9af169b3bb6a66cec9a8e
#rb joe.kirchoff

[CL 23943501 by henrik karlsson in ue5-main branch]
2023-01-31 21:24:28 -05:00
ben woodhouse
61d6a27216 Add support for overriding an individual module's optimization level via a new OptimizationLevel property. This requires either a private PCH, or PCHUsageMode=NoPCHs (not recommended) because Clang requires that a PCH's optimization flags match the compile unit.
#rb Joe.Kirchoff

[CL 23933583 by ben woodhouse in ue5-main branch]
2023-01-31 14:12:11 -05:00
henrik karlsson
15e7512ecf [UBT]
* Changed a bunch of code to use StringBuilder instead of TextWriter. Based on superluminal profiling data

#preflight 63d8bb903656ea96dc4ef1bf
#rb none

[CL 23924725 by henrik karlsson in ue5-main branch]
2023-01-31 03:23:17 -05:00
henrik karlsson
047beba924 [UBT]
* Changed so code related to inlined .gen.cpp is using FileItems etc to reduce number of sys calls

#preflight 63d8a8c5ba4fadeef05749cb
#rb none

[CL 23924497 by henrik karlsson in ue5-main branch]
2023-01-31 01:45:05 -05:00
henrik karlsson
bce2998aaa [UBT]
* Fixed so only colliding headers gets hash suffix for files in immediate folder

#preflight 63d86e11f626715201a3daa5
#rb joe.kirchoff

[CL 23924099 by henrik karlsson in ue5-main branch]
2023-01-31 01:29:20 -05:00
henrik karlsson
8c4b56c12b [UBT]
* ActionGraphBuilder - Added AllowAsync parameter to CreateIntermediateTextFile which defaults to true.
* UEBuildModuleCPP - Added AllowAsync false to one place where the code touches the file after CreateIntermediateTextFile has been called
* UEBuildModuleCPP - Changed so code writing LiveCodingInfo.json is using same path as others when it comes to writing files

#preflight 63d86264ec3d1af440d22e35
#rb joe.kirchoff

[CL 23924077 by henrik karlsson in ue5-main branch]
2023-01-31 01:28:52 -05:00
bryan sefcik
5798c36ed1 Added a missing circular dependency with AssetTools and UnrealEd.
Updated AssetTypeActivationOpenedMethod.h to include the generated.h.
#preflight 63d2beb85354589b5c70adb5

[CL 23871556 by bryan sefcik in ue5-main branch]
2023-01-26 13:19:09 -05:00
josh adams
1610c3bee3 UnrealArch/UnrealArchitectures changes
- Creates the UnrealArchitectures class, which wraps a list of UnrealArch objects
 - UnrealArch is a single architecture, expandable enum-like struct
 - There is no more concept of "no/default architecture", there is always a valid active architecture when building
 - Most uses of "string Architecture" are replaced with one of the two above, depending if multiple architectures are supported or not
 - UnrealArch has some platform-extensions for platform-specific naming (like Linux adds in LinuxName that turns, for instance, Arm64 -> aarch64-unknown-linux-gnueabi, which is used in folder names, etc)
 - UnrealArch has bIsX64 which can be used determine intel instruction set (as opposed to arm)
 - TargetRules class has an "Architecture" accessor that will return a single architecture if the active architectures is a single architecture, or throw an exception if multiple. This is useful in a majority of the cases where a paltform can only have a single architecture active in TargetRules (microsoft platforms, for instance, will create separate targets when compiling multiple architectures at once)
 - Added UnrealArchitectureConfig class, which contains all the architecture information for a platform (what architectures are supported, what ones are currently active for given project, etc)

#preflight 63c81fb5b065224750a1759e
#rb mike.fricker,roman.dzieciol,joe.kirchoff,dmytro.vovk,brandon.schaefer [various parts]
#p4v-preflight-copy 23562471

[CL 23829977 by josh adams in ue5-main branch]
2023-01-24 09:30:28 -05:00
Joe Kirchoff
24ebcdfb1d UnrealBuildTool: Support msvc analyzer extensions
Enable by setting ModuleRules.bStaticAnalyzerExtensions = true.

It is recommended to use ModuleRules.StaticAnalyzerRulesets to filter the warnings that are reported as this will enable a large number of additional warnings.

Please see the following links for more details:
https://learn.microsoft.com/en-us/cpp/code-quality/using-the-cpp-core-guidelines-checkers
https://learn.microsoft.com/en-us/cpp/code-quality/using-rule-sets-to-specify-the-cpp-rules-to-run

#jira UE-174521
#rb trivial
#preflight 63c9e333977c626356cdf40f

[CL 23784396 by Joe Kirchoff in ue5-main branch]
2023-01-19 19:46:12 -05:00
christopher waters
552f2a9ca0 RHI header reorganization
- Changing RHIUtilities, RHIContext, RHICommandList and DynamicRHI to get them to compile independently of the rest of the RHI headers.

#preflight 63c1e22c2e714f64ad46aae5

[CL 23697282 by christopher waters in ue5-main branch]
2023-01-14 00:23:40 -05:00
christopher waters
c8fb19a8de IWYU iteration changes
- Adding -IWYUHeadersOnly command line option to restrict IWYU to just header files
- Adding IWYU support for -Module=XXX

#rb henrik.karlsson
#preflight 63c05f7e1a06fc61057cf347

[CL 23670631 by christopher waters in ue5-main branch]
2023-01-12 17:29:36 -05:00
bob tellez
971983eb65 [Backout] - CL23624045
[FYI] christopher.waters
Original CL Desc
-----------------------------------------------------------------
RHI header dependency cleanup
- Reducing other header dependencies from RHIDefinitions.h
- Moved a few functions to the new RHIStrings.h
- Uniform buffer layout initializer moved to its own file to reduce RHI dependency on MemoryLayout.

#preflight 63bca752577437afe604b097

[CL 23631957 by bob tellez in ue5-main branch]
2023-01-10 15:28:15 -05:00
christopher waters
3df5dae685 RHI header dependency cleanup
- Reducing other header dependencies from RHIDefinitions.h
- Moved a few functions to the new RHIStrings.h
- Uniform buffer layout initializer moved to its own file to reduce RHI dependency on MemoryLayout.

#preflight 63bca752577437afe604b097

[CL 23631946 by christopher waters in ue5-main branch]
2023-01-10 15:27:33 -05:00
henrik karlsson
31c48b294e [UBT]
* Fixed new iwyu code to be compatible with changes coming from ue5 main (CompileCppFiles is now protected and UEBuildModuleCPP.cs calls CompileAllCPPFiles instead of CompileCppFiles directly)

#preflight skipped
#rb none
#jira none

[CL 23631280 by henrik karlsson in ue5-main branch]
2023-01-10 14:56:25 -05:00
henrik karlsson
23ea716c7a [UBT]
* Added IWYU toolchain which can be enabled with -IWYU
* Added IWYU mode that can be used with -Mode=IWYU. This can be used to modify code files
* Binary of include-what-you-use that contains a ton of fixes to make ue build

#preflight skipped
#rb joe.kirchoff

[CL 23631202 by henrik karlsson in ue5-main branch]
2023-01-10 14:52:00 -05:00