Files
UnrealEngineUWP/Engine/Source/Developer/DerivedDataCache/Private/DerivedDataBuildPrivate.h
devin doucette 01c33e6702 DDC: Reworked FBuildSession to allow filtering of payloads
- Build now takes optional inputs for consistency with BuildAction.
- BuildAction has been renamed to Build and works the same as Build except it starts from an action.
- Build now takes a FBuildPolicy, which is implicitly constructible from EBuildPolicy, and allows setting the policy by payload.
- FBuildContext and FBuildConfigContext now have policy masks that allow clearing flags across every payload in the build.
- EBuildPolicy has CacheStore split into CacheStoreOnQuery and CacheStoreOnBuild for more control of cache behavior.
- Builds now use consistent completion callback parameters, FBuildCompleteParams.
- Build types now have debugger visualization.

#rb Zousar.Shaker
#rnx

#ROBOMERGE-AUTHOR: devin.doucette
#ROBOMERGE-SOURCE: CL 17874670 in //UE5/Release-5.0/... via CL 17874724
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v883-17842818)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17874740 by devin doucette in ue5-release-engine-test branch]
2021-10-20 12:38:01 -04:00

112 lines
3.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/StringFwd.h"
#include "DerivedDataBuildTypes.h"
#include "Logging/LogMacros.h"
#include "Misc/AsciiSet.h"
struct FGuid;
template <typename FuncType> class TUniqueFunction;
namespace UE::DerivedData { class FBuildAction; }
namespace UE::DerivedData { class FBuildActionBuilder; }
namespace UE::DerivedData { class FBuildDefinition; }
namespace UE::DerivedData { class FBuildDefinitionBuilder; }
namespace UE::DerivedData { class FBuildInputsBuilder; }
namespace UE::DerivedData { class FBuildOutputBuilder; }
namespace UE::DerivedData { class FBuildPolicy; }
namespace UE::DerivedData { class FBuildSession; }
namespace UE::DerivedData { class FOptionalBuildInputs; }
namespace UE::DerivedData { class IBuild; }
namespace UE::DerivedData { class IBuildFunctionRegistry; }
namespace UE::DerivedData { class IBuildInputResolver; }
namespace UE::DerivedData { class IBuildScheduler; }
namespace UE::DerivedData { class IBuildWorkerRegistry; }
namespace UE::DerivedData { class ICache; }
namespace UE::DerivedData { class IRequestOwner; }
namespace UE::DerivedData { struct FBuildKey; }
namespace UE::DerivedData::Private
{
DECLARE_LOG_CATEGORY_EXTERN(LogDerivedDataBuild, Log, All);
// Implemented in DerivedDataBuild.cpp
IBuild* CreateBuild(ICache& Cache);
// Implemented in DerivedDataBuildFunctionRegistry.cpp
IBuildFunctionRegistry* CreateBuildFunctionRegistry();
// Implemented in DerivedDataBuildWorkerRegistry.cpp
IBuildWorkerRegistry* CreateBuildWorkerRegistry();
// Implemented in DerivedDataBuildScheduler.cpp
IBuildScheduler* CreateBuildScheduler();
// Implemented in DerivedDataBuildDefinition.cpp
FBuildDefinitionBuilder CreateBuildDefinition(FStringView Name, FStringView Function);
// Implemented in DerivedDataBuildAction.cpp
FBuildActionBuilder CreateBuildAction(FStringView Name, FStringView Function, const FGuid& FunctionVersion, const FGuid& BuildSystemVersion);
// Implemented in DerivedDataBuildInput.cpp
FBuildInputsBuilder CreateBuildInputs(FStringView Name);
// Implemented in DerivedDataBuildOutput.cpp
FBuildOutputBuilder CreateBuildOutput(FStringView Name, FStringView Function);
// Implemented in DerivedDataBuildSession.cpp
FBuildSession CreateBuildSession(
FStringView Name,
ICache& Cache,
IBuild& BuildSystem,
IBuildScheduler& Scheduler,
IBuildInputResolver* InputResolver);
// Implemented in DerivedDataBuildJob.cpp
struct FBuildJobCreateParams
{
ICache& Cache;
IBuild& BuildSystem;
IBuildScheduler& Scheduler;
IBuildInputResolver* InputResolver{};
IRequestOwner& Owner;
};
void CreateBuildJob(
const FBuildJobCreateParams& Params,
const FBuildKey& Key,
const FBuildPolicy& Policy,
FOnBuildComplete&& OnComplete);
void CreateBuildJob(
const FBuildJobCreateParams& Params,
const FBuildDefinition& Definition,
const FOptionalBuildInputs& Inputs,
const FBuildPolicy& Policy,
FOnBuildComplete&& OnComplete);
void CreateBuildJob(
const FBuildJobCreateParams& Params,
const FBuildAction& Action,
const FOptionalBuildInputs& Inputs,
const FBuildPolicy& Policy,
FOnBuildComplete&& OnComplete);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
inline bool IsValidBuildFunctionName(FStringView Function)
{
constexpr FAsciiSet Valid("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
return !Function.IsEmpty() && FAsciiSet::HasOnly(Function, Valid);
}
inline void AssertValidBuildFunctionName(FStringView Function, FStringView Name)
{
checkf(IsValidBuildFunctionName(Function),
TEXT("A build function name must be alphanumeric and non-empty for build of '%.*s' by '%.*s'."),
Name.Len(), Name.GetData(), Function.Len(), Function.GetData());
}
} // UE::DerivedData::Private