95 lines
3.1 KiB
Markdown
95 lines
3.1 KiB
Markdown
# C++ Build Module in Python
|
|
|
|
|
|
This Python module builds C++ projects without CMake, aiming to be:
|
|
|
|
* **Fast**
|
|
* **Automatic**
|
|
* **Cool**
|
|
|
|
> **Why?** Because I'm just not a huge fan of CMake
|
|
|
|
|
|
-----
|
|
|
|
## Setup
|
|
|
|
For this module to work without any modifications, your project needs to follow a specific directory structure:
|
|
|
|
* **`src/`**: Contains your source code files.
|
|
* **`include/`**: Holds your header files.
|
|
* **`build/`**: Where the output binaries will be placed.
|
|
|
|
Additionally, you'll need a configuration file named **`builds.json`**. Here's an example:
|
|
|
|
```json
|
|
{
|
|
"configurations": [
|
|
{
|
|
"name": "debug",
|
|
"build_type": "DEBUG",
|
|
"platform": "LINUX_x86_64",
|
|
"args": []
|
|
}
|
|
],
|
|
"global_build_args": []
|
|
}
|
|
```
|
|
|
|
-----
|
|
|
|
## Supported `builds.json` Values
|
|
|
|
Here's a breakdown of the supported values within your `builds.json` file:
|
|
|
|
* **`"name"`**: Specifies the name of the resulting output binary.
|
|
* **`"build_type"`**: Controls the compiler flags used for the build.
|
|
* **Supported values**: `DEBUG`, `TRACE`, `RELEASE`, `PROFILE`, `RELWITHDEBINFO`, `FASTEST`
|
|
* **`"platform"`**: Defines the target platform architecture for compilation.
|
|
* **Supported values**: `LINUX_x86_64`, `LINUX_x86`, `LINUX_x86_64_V4`, `MACOS` (untested)
|
|
* **`"args"`**: A list of strings containing unique compiler flags and instructions specific to a particular build.
|
|
* **`"global_build_args"`**: A list of strings containing compiler flags and instructions that will be applied to *all* builds.
|
|
|
|
-----
|
|
|
|
## Usage
|
|
This project is designed to be portable (kinda).
|
|
- Clone module into C++ project with supported layout.
|
|
- Run with `python compile`
|
|
|
|
### Example Usage
|
|
```bash
|
|
oscarg@ws01:~/Development/rpg-game$ ls
|
|
build builds.json compile include src
|
|
oscarg@ws01:~/Development/rpg-game$ cat builds.json
|
|
{
|
|
"configurations": [
|
|
{
|
|
"name": "debug",
|
|
"build_type": "DEBUG",
|
|
"platform": "LINUX_x86_64",
|
|
"args": []
|
|
},
|
|
{
|
|
"name": "trace",
|
|
"build_type": "TRACE",
|
|
"platform": "LINUX_x86_64",
|
|
"args": []
|
|
}
|
|
],
|
|
"global_build_args": ["-lSDL3", "-lSDL3_image", "-lm"]
|
|
}oscarg@ws01:~/Development/rpg-game$ python compile
|
|
[CppBuilder] 2025-07-07 14:00:37 - DEBUG - 'debug' config loaded from file.
|
|
[CppBuilder] 2025-07-07 14:00:37 - DEBUG - 'trace' config loaded from file.
|
|
[CppBuilder] 2025-07-07 14:00:37 - INFO - Configurations successfully loaded from 'builds.json'.
|
|
[CppBuilder] 2025-07-07 14:00:37 - INFO - Starting builds...
|
|
[MultiprocessWorker] 2025-07-07 14:00:37 - DEBUG - Adding task with callable _build_worker
|
|
[MultiprocessWorker] 2025-07-07 14:00:37 - DEBUG - Adding task with callable _build_worker
|
|
[MultiprocessWorker] 2025-07-07 14:00:37 - DEBUG - Starting with 2 tasks and max 4 processes.
|
|
[MultiprocessWorker] 2025-07-07 14:00:37 - DEBUG - All multiprocessing tasks completed.
|
|
[CppBuilder] 2025-07-07 14:00:37 - INFO - SUCCESS: Compiled 'build/trace_linux_x86-64'
|
|
[CppBuilder] 2025-07-07 14:00:37 - INFO - SUCCESS: Compiled 'build/debug_linux_x86-64'
|
|
oscarg@ws01:~/Development/rpg-game$ ls build/
|
|
debug_linux_x86-64 res trace_linux_x86-64
|
|
oscarg@ws01:~/Development/rpg-game$
|
|
``` |