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::plugin
andbuildcc::internal
- Remove
- Environment updates
- Remove
buildcc::env
- Refactor free / static functions and variables into classes with static members and variables. For example.
buildcc::env::init
should becomebuildcc::Environment::Init
- Remove
- Args and Register module updates
- Pch command from command line
- Make Register functions static.
Register::Build
- Update
CallbackIf
,Build
andTest
APIs for thestate
variable 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
faq
generators to make more varied and robust generators.
- Config options updates as per Target requirements
- Update configs to use
fmt::format
with 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
ToolchainId
and different Clang specializations. For example:Target_gcc_clang
orTarget_msvc_clang
orTarget_mingw_clang
etc - Option 2: Consider making a
Target_clang
that changes behaviour as per thetarget_triple_architecture
present in thetoolchain
- What other flavours of clang are present?
Append*
APIsAdd*WithFormat
orAppend*WithFormat
APIs
- [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::string
vsstd::string_view
vsconst char *
usage- NOTE, We cannot convert between
std::string_view
andconst char *
which makes it harder to usestd::string_view
for certain APIs
- NOTE, We cannot convert between
- Improve Branch Coverage
- Profiling BuildCC using Tracy
- Speed comparison between CMake and BuildCC (Release)
- Speed profiling
subprocess
vsstd::system
with 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::system
functionality while offering better security.
- Cross compiling
- Debugging using VSCode
- Debugging using GDB
- Check the GDBFrontend project