Complete working proof of concept of the following
- BuildCC library
- BuildCC bootstrap "script" files (Basic)
- BuildExe executable (Standalone)
Contains the following working features
BuildCC
- Supported plugin
- Clang Compile Commands
- Toolchain, Generator, TargetInfo and Target interfaces
- Specialized Toolchain for GCC, MSVC and MINGW
- Specialized Target for GCC, MSVC and MINGW
BuildExe
- Immediate mode
- Script mode
- Local Package Manager with git
- Serialization Interface
- Namespace changes
- Remove
buildcc::env - We should only have 3 namespaces
buildcc,buildcc::pluginandbuildcc::internal
- Remove
- Environment updates
- Remove
buildcc::env - Refactor free / static functions and variables into classes with static members and variables. For example.
buildcc::env::initshould becomebuildcc::Environment::Init
- Remove
- Args and Register module updates
- Pch command from command line
- Make Register functions static.
Register::Build - Update
CallbackIf,BuildandTestAPIs for thestatevariable usage
- Unit testing and mocking for BuildExe
- Make a common interface / internal library which contains all utility functions and libraries
- New generators
- Currently we only have a simple Generator which is similar to our FileIOGenerator (input -> subprocess commands -> outputs)
- Read the
faqgenerators to make more varied and robust generators.
- Config options updates as per Target requirements
- Update configs to use
fmt::formatwith format specifiers for "{prefix}{value}{suffix}" for customizability. For example:/D{preprocessor}for msvc or-D{preprocessor}for gcc etc
- Update configs to use
- Target specialized clang
- Clang behaves differently depending on its backend
- Option 1: Consider adding more options to
ToolchainIdand different Clang specializations. For example:Target_gcc_clangorTarget_msvc_clangorTarget_mingw_clangetc - Option 2: Consider making a
Target_clangthat changes behaviour as per thetarget_triple_architecturepresent in thetoolchain - What other flavours of clang are present?
Append*APIsAdd*WithFormatorAppend*WithFormatAPIs
- [Discussion] Supported plugin requirements by users
- [Discussion] Customizability requirements by users
- [Discussion] Target and Generator interfaces for standardization by compilers. (White paper)
- [Community Support] MacOS testing and CI/CD
- Bootstrapping
- CMake is used to create BuildCC
- We now create a BuildCC executable that creates BuildCC
- BuildCC bootstrap executable through CMake (Static Libraries during linkage)
- BuildCC bootstrap executable through CMake (Dynamic Libraries during linkage)
- BuildCC bootstrap executable through BuildCC bootstrap executable (similar to the CMake executable)
- C++20 module support
- Understand flags
- Understand procedure for GCC, MSVC and Clang
- Plugin - BuildCCFind
- Find executable
- Find toolchain
- Plugin - ClangFormat
- Plugin - Graph Visualizer
- Append Setter APIs for Target
- Doxygen
- Online documentation (read the docs)
- Github pages
- CI/CD
- Linux
- GCC
- Clang
- Windows
- MSVC
- Clang
- MinGW
- MacOS
- Linux
- Codacy
- Speed vs Memory considerations
- Currently the project favours speed over memory usage
-
std::stringvsstd::string_viewvsconst char *usage- NOTE, We cannot convert between
std::string_viewandconst char *which makes it harder to usestd::string_viewfor certain APIs
- NOTE, We cannot convert between
- Improve Branch Coverage
- Profiling BuildCC using Tracy
- Speed comparison between CMake and BuildCC (Release)
- Speed profiling
subprocessvsstd::systemwith gprof and qcachegrind- NOTE, Since we have Taskflow for parallel programming, we do not need to construct a multi-threaded subprocess.
- Subprocess should typically replicate
std::systemfunctionality while offering better security.
- Cross compiling
- Debugging using VSCode
- Debugging using GDB
- Check the GDBFrontend project