V2 progress
This commit is contained in:
parent
d2f5863552
commit
5e1fcd8590
9837 changed files with 790 additions and 1708518 deletions
171
README.md
171
README.md
|
|
@ -1,171 +0,0 @@
|
|||
# Crafter.Build
|
||||
|
||||
A modern, cross-platform C++ build system designed specifically for C++20 modules. Built with simplicity and flexibility in mind.
|
||||
|
||||
## Features
|
||||
|
||||
- **C++20 Modules Support**: Native support for modern C++ module systems
|
||||
- **JSON-based Configuration**: Easy-to-read project configuration files
|
||||
- **Multi-Configuration Builds**: Debug and Release builds with customizable settings
|
||||
- **Dependency Management**: Easy integration with external projects
|
||||
- **Testing Framework**: Built-in test execution capabilities
|
||||
|
||||
## Installation
|
||||
|
||||
### Prerequisites
|
||||
```bash
|
||||
lld
|
||||
clang
|
||||
git
|
||||
lldb
|
||||
onetbb
|
||||
glslang
|
||||
vulkan-devel
|
||||
wasi-compiler-rt
|
||||
```
|
||||
|
||||
### Build from Source
|
||||
```bash
|
||||
git clone https://forgejo.catcrafts.net/Catcrafts/Crafter.Build.git
|
||||
cd Crafter.Build
|
||||
./build.sh
|
||||
```
|
||||
(Optionally add to your PATH for global access)
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Quickstart Guide
|
||||
|
||||
1. Create a `project.json` file in your project directory:
|
||||
```json
|
||||
{
|
||||
"name": "hello-world",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "executable",
|
||||
"implementations": ["main"],
|
||||
},
|
||||
{
|
||||
"name": "executable-debug",
|
||||
"extends": ["executable"],
|
||||
"debug": true
|
||||
},
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
2. Create `main.cpp`:
|
||||
```cpp
|
||||
#include <print>
|
||||
int main() {
|
||||
std::println("Hello World!");
|
||||
}
|
||||
```
|
||||
|
||||
3. Build and run:
|
||||
```bash
|
||||
crafter-build build debug -r
|
||||
```
|
||||
|
||||
## Command Line Interface
|
||||
|
||||
```bash
|
||||
# Build a specific configuration
|
||||
crafter-build build [configuration]
|
||||
|
||||
# Run a specific test
|
||||
crafter-build test [test]
|
||||
|
||||
# Run all tests
|
||||
crafter-build test
|
||||
|
||||
# Display help information
|
||||
crafter-build --help
|
||||
|
||||
# Specify project file path (defaults to project.json)
|
||||
-p /path/to/project.json
|
||||
|
||||
# Run executable after building
|
||||
-r
|
||||
```
|
||||
|
||||
## Test Configuration
|
||||
|
||||
Tests are defined in the `tests` array of your project file. A typical test configuration depends on your main project:
|
||||
|
||||
```json
|
||||
"tests": [
|
||||
{
|
||||
"name": "should-compile",
|
||||
"implementations": ["tests/ShouldCompile"],
|
||||
"dependencies": [
|
||||
{
|
||||
"path": "./project.json",
|
||||
"configuration": "lib-shared"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### Writing Test Files
|
||||
|
||||
Test files must follow a specific format:
|
||||
- Export a C-compatible function named `RunTest()`
|
||||
- The `RunTest()` function must return `nullptr` if the test passes, or a pointer to an error message string if it fails
|
||||
|
||||
Example test implementation:
|
||||
```cpp
|
||||
import std;
|
||||
using namespace std;
|
||||
|
||||
extern "C" {
|
||||
string* RunTest() {
|
||||
// Perform your test logic here
|
||||
int expected = 42;
|
||||
int actual = 5 * 8 + 2; // Should equal 42
|
||||
|
||||
if (actual != expected) {
|
||||
return new string("Test failed: expected " + to_string(expected) + ", but got " + to_string(actual));
|
||||
}
|
||||
|
||||
// Return nullptr to indicate success
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Configuration Properties
|
||||
|
||||
### Basic Properties
|
||||
- **name**: Name of the configuration
|
||||
- **standard**: C++ standard (default: `c++26`)
|
||||
- **interfaces**: C++20 module files (`.cppm` extension)
|
||||
- **implementations**: Source files (`.cpp` extension)
|
||||
- **additional_files**: Files copied to output directory
|
||||
- **type**: Project type (`executable`, `library`, `shared-library`, default: `executable`)
|
||||
- **extends**: Array of configuration names to extend, later entries overwrite previous ones
|
||||
- **debug**: Boolean enabling debug mode (default: `false`)
|
||||
|
||||
### Dependencies
|
||||
Both local and git dependencies are supported:
|
||||
|
||||
For git dependencies branch and commit are mutually exclusive, if neither is supplied the latest commit on the default branch is chosen
|
||||
```json
|
||||
"dependencies": [
|
||||
{
|
||||
"path": "/home/Crafter.Build/project.json",
|
||||
"configuration": "debug-lib",
|
||||
},
|
||||
{
|
||||
"path": "https://github.com/Catcrafts/Crafter.Build.git",
|
||||
"configuration": "debug-lib",
|
||||
"branch": "master",
|
||||
"commit": "af7eb61c3d92ab18f6aa6c139ac7211a908a24ee"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the LGPL v3 License - see the LICENSE file for details.
|
||||
Loading…
Add table
Add a link
Reference in a new issue