4#include "../Containers/Vector.h"
5#include "../Foundation/Result.h"
6#include "../Strings/String.h"
25 Parameter(
const T& other) : value(other) {}
26 operator const T&()
const {
return value; }
28 bool hasBeenSet()
const {
return valueSet; }
29 void unset() { valueSet =
false; }
40 bool valueSet =
false;
60 case Unknown:
return "unknown";
61 case Windows:
return "windows";
62 case Apple:
return "apple";
63 case Linux:
return "linux";
64 case Wasm:
return "wasm";
66 Assert::unreachable();
87 case Any:
return "Any";
88 case Intel32:
return "Intel32";
89 case Intel64:
return "Intel64";
90 case Arm64:
return "Arm64";
91 case Wasm:
return "Wasm";
93 Assert::unreachable();
113 case XCode:
return "XCode";
116 case Make:
return "Make";
118 Assert::unreachable();
136 case Debug:
return "Debug"_a8;
137 case Release:
return "Release"_a8;
139 Assert::unreachable();
199 Assert::unreachable();
205 [[nodiscard]]
static constexpr StringView getStandardBuildDirectory()
207 return "$(TARGET_OS)-$(TARGET_ARCHITECTURES)-$(BUILD_SYSTEM)-$(COMPILER)-$(CONFIGURATION)";
249 bool operator==(
const File& other)
const
318 String intermediatesDirectory;
320 String packagesCacheDirectory;
321 String packagesInstallDirectory;
372 Type action = Configure;
Build Architecture (Processor / Instruction set)
Definition: Build.h:72
static constexpr StringView toString(Type type)
Get StringView from Architecture::Type.
Definition: Build.h:83
Compile flags (include paths, preprocessor defines etc.)
Definition: Build.h:145
Vector< String > defines
Preprocessor defines.
Definition: Build.h:147
Vector< String > includePaths
Include search paths list.
Definition: Build.h:146
Parameter< bool > enableStdCpp
Enable and include C++ Standard Library.
Definition: Build.h:154
Parameter< bool > enableASAN
Enable Address Sanitizer.
Definition: Build.h:151
Parameter< bool > enableRTTI
Enable C++ Runtime Type Identification.
Definition: Build.h:152
Parameter< bool > enableExceptions
Enable C++ Exceptions.
Definition: Build.h:153
Optimization::Type optimizationLevel
Optimization level.
Definition: Build.h:149
Parameter< bool > enableCoverage
Enables code coverage instrumentation.
Definition: Build.h:155
Visual Studio platform toolset.
Definition: Build.h:184
Groups SC::Build::CompileFlags and SC::Build::LinkFlags for a given SC::Build::Architecture.
Definition: Build.h:173
bool applyPreset(const Project &project, Preset newPreset, const Parameters ¶meters)
Set compile flags depending on the given Preset.
String intermediatesPath
Obj path. If relative, it's appended to _Intermediates relative to .
Definition: Build.h:212
String outputPath
Exe path. If relative, it's appended to _Outputs relative to .
Definition: Build.h:211
CompileFlags compile
Configuration compile flags.
Definition: Build.h:214
String name
Configuration name.
Definition: Build.h:210
static constexpr StringView PresetToString(Preset preset)
Convert Preset to StringView.
Definition: Build.h:191
LinkFlags link
Configuration link flags.
Definition: Build.h:215
Architecture::Type architecture
Restrict this configuration to a specific architecture.
Definition: Build.h:217
Preset
A pre-made preset with pre-configured set of options.
Definition: Build.h:176
@ Debug
Compile for debug, enabling ASAN (if not set on project and never on VStudio)
@ Release
Compile for release.
@ DebugCoverage
Compile for debug, enabling coverage (sets ClangCL for VStudio)
VisualStudio visualStudio
Customize VisualStudio platformToolset.
Definition: Build.h:188
Top level build description holding all Workspace objects.
Definition: Build.h:343
Result configure(StringView projectName, const Parameters ¶meters) const
Generates projects for all workspaces, with specified parameters at given root path.
Vector< Workspace > workspaces
Workspaces to be generated.
Definition: Build.h:344
Build system generator (Xcode / Visual Studio)
Definition: Build.h:99
static constexpr StringView toString(Type type)
Get StringView from Generator::Type.
Definition: Build.h:109
Type
Definition: Build.h:101
@ Make
Generate posix makefiles.
Definition: Build.h:105
@ VisualStudio2022
Generate projects for Visual Studio 2022.
Definition: Build.h:103
@ VisualStudio2019
Generate projects for Visual Studio 2019.
Definition: Build.h:104
@ XCode
Generate projects for XCode (Version 14+)
Definition: Build.h:102
Link flags (library paths, libraries to link, etc.)
Definition: Build.h:160
Parameter< bool > enableStdCpp
Enable and link C++ Standard Library.
Definition: Build.h:168
Vector< String > frameworksIOS
Frameworks to link on iOS only.
Definition: Build.h:164
Vector< String > frameworksMacOS
Frameworks to link on macOS only.
Definition: Build.h:165
Vector< String > libraries
Names of libraries to link.
Definition: Build.h:162
Vector< String > frameworks
Frameworks to link on both iOS and macOS.
Definition: Build.h:163
Vector< String > libraryPaths
Libraries search paths list.
Definition: Build.h:161
Parameter< bool > enableASAN
Enable linking Address Sanitizer.
Definition: Build.h:167
Optimization level (Debug / Release)
Definition: Build.h:124
static constexpr StringView toString(Type type)
Get StringView from Optimization::Type.
Definition: Build.h:132
Type
Definition: Build.h:126
@ Debug
Optimizations set to debug.
Definition: Build.h:127
@ Release
Optimizations set to release.
Definition: Build.h:128
Describes a specific set of platforms, architectures and build generators to generate projects for.
Definition: Build.h:327
Platform::Type platform
Platform to generate.
Definition: Build.h:328
Generator::Type generator
Build system types to generate.
Definition: Build.h:330
Architecture::Type architecture
Architecture to generate.
Definition: Build.h:329
Project list of files.
Definition: Build.h:238
Operation
Indicates if this is an additive or subtractive files operation.
Definition: Build.h:241
@ Remove
Remove files.
Definition: Build.h:243
@ Add
Add files.
Definition: Build.h:242
Operation operation
Operation type (add or remove files)
Definition: Build.h:245
String mask
Mask suffix (can contain *)
Definition: Build.h:247
String base
Base path (not containing *)
Definition: Build.h:246
Groups multiple Configuration and source files with their compile and link flags.
Definition: Build.h:235
const Configuration * getConfiguration(StringView configurationName) const
Get Configuration with the matching configurationName
Configuration * getConfiguration(StringView configurationName)
Get Configuration with the matching configurationName
TargetType::Type targetType
Type of build artifact.
Definition: Build.h:259
Result validate() const
Validates this project for it to contain a valid combination of flags.
String rootDirectory
Project root directory.
Definition: Build.h:262
String targetName
Project target name.
Definition: Build.h:263
CompileFlags compile
Shared CompileFlags for all files in the project.
Definition: Build.h:267
bool addDirectory(StringView subdirectory, StringView filter)
Add all files from specific subdirectory (relative to project root) matching given filter.
bool setRootDirectory(StringView file)
Set root directory for this project (all relative paths will be relative to this one)
Vector< Configuration > configurations
Build configurations created inside the project.
Definition: Build.h:270
bool removeFiles(StringView subdirectory, StringView filter)
Remove files matching the given filter.
LinkFlags link
Shared LinkFlags for all files in the project.
Definition: Build.h:268
String name
Project name.
Definition: Build.h:261
bool addPresetConfiguration(Configuration::Preset preset, const Parameters ¶meters, StringView configurationName=StringView())
Add a configuration with a given name, started by cloning options of a specific Preset.
String iconPath
Icon location.
Definition: Build.h:264
Vector< File > files
Files that belong to the project.
Definition: Build.h:266
bool addFile(StringView singleFile)
Add a single file to the project.
Type of target artifact to build (executable, library)
Definition: Build.h:224
Type
Type of artifact.
Definition: Build.h:227
@ ConsoleExecutable
Create console executable program.
Definition: Build.h:228
@ GUIApplication
Create graphical application program.
Definition: Build.h:229
Groups multiple Project together with shared compile and link flags.
Definition: Build.h:304
String name
Workspace name.
Definition: Build.h:308
Vector< Project > projects
List of projects in this workspace.
Definition: Build.h:309
Result validate() const
Validates all projects in this workspace.
An ascii string used as boolean result. SC_TRY macro forwards errors to caller.
Definition: Result.h:12
A non-modifiable owning string with associated encoding.
Definition: String.h:29
Non-owning view over a range of characters with UTF Encoding.
Definition: StringView.h:47
A contiguous sequence of heap allocated elements.
Definition: Vector.h:257