gamp /gămp/ noun
- A large baggy umbrella.
said to allude to Mrs. Gamp's umbrella, in Dickens's Martin Chuzzlewit.
- often: one that is untidily or loosely tied up
if you carry an umbrella use it tightly rolled and never as a gamp — S. D. Barney
This project's canonical repositories is hosted on Gothel Software.
Gamp intends to replicate JogAmp's experience to C++ in a condensed form, allowing a similar workflow on native targets and within the browser via WebAssembly.
Ironically this will bring back runs everywhere including the web.
Initial goal is to reimplement Graph/GraphUI.
Gamp uses jaulib for general purpose functionality including linear algebra and geometry.
gfxbox2 of our CS class evaluated the C++ to WebAssembly path earlier.
This project is currently very much unstable and heavily WIP.
All APIs, if any, will change - but I thought it is nice to share the development with whoever might be interested.
- C++20 or better, see jaulib C++ Minimum Requirements.
- SDL2 library is supported
- emscripten for WebAssembly (optional)
- CMake >= 3.21 (2021-07-14)
- C++ compiler
- gcc >= 11 (C++20), recommended >= 12.2.0
- clang >= 13 (C++20), recommended >= 18.1.6
- Optional for
lint
validation- clang-tidy >= 18.1.6
- Optional for
eclipse
andvscodium
integration- clangd >= 18.1.6
- clang-tools >= 18.1.6
- clang-format >= 18.1.6
- Optional
- libunwind8 >= 1.2.1
- libcurl4 >= 7.74 (tested, lower may work)
- jaulib submodule
- SDL2 library is supported
- emscripten for WebAssembly (optional)
Installing build dependencies for Debian >= 12 and Ubuntu >= 22:
apt install git
apt install build-essential g++ gcc libc-dev libpthread-stubs0-dev
apt install clang-18 clang-tidy-18 clangd-18 clang-tools-18 clang-format-18
apt install libunwind8 libunwind-dev
apt install cmake cmake-extras extra-cmake-modules pkg-config
apt install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev
apt install doxygen graphviz
apt install emscripten
If using optional clang toolchain, perhaps change the clang version-suffix of above clang install line to the appropriate version.
After complete clang installation, you might want to setup the latest version as your default. For Debian you can use this clang alternatives setup script.
git clone --recurse-submodules git://jausoft.com/srv/scm/direct_bt.git
cd direct_bt
Analog to jaulib CMake build presets ...
Following debug presets are defined in CMakePresets.json
debug
- default generator
- default compiler
- C++20
- debug enabled
- disabled
clang-tidy
debug-gcc
- inherits from
debug
- compiler:
gcc
- disabled
clang-tidy
- inherits from
debug-clang
- inherits from
debug
- compiler:
clang
- enabled
clang-tidy
- inherits from
release
- inherits from
debug
- debug disabled
- disabled
clang-tidy
- inherits from
release-gcc
- compiler:
gcc
- disabled
clang-tidy
- compiler:
release-clang
- compiler:
clang
- enabled
clang-tidy
- compiler:
release-wasm
- compiler:
clang / emscripten
- disabled
clang-tidy
- needs to be run by
emcmake
- compiler:
Kick-off the workflow by e.g. using preset release-gcc
to configure, build, test, install and building documentation.
You may skip install
and doc
by dropping it from --target
.
cmake --preset release-gcc
cmake --build --preset release-gcc --parallel
cmake --build --preset release-gcc --target test install doc
You may utilize scripts/build-preset.sh
for an initial build, install and test workflow.
Analog to jaulib CMake hardcoded presets ...
Besides above CMakePresets.json
presets,
JaulibSetup.cmake
contains hardcoded presets for undefined variables if
CMAKE_INSTALL_PREFIX
andCMAKE_CXX_CLANG_TIDY
cmake variables are unset, orJAU_CMAKE_ENFORCE_PRESETS
cmake- or environment-variable is set toTRUE
orON
The hardcoded presets resemble debug-clang
presets.
Kick-off the workflow to configure, build, test, install and building documentation.
You may skip install
and doc
by dropping it from --target
.
rm -rf build/default
cmake -B build/default
cmake --build build/default --parallel
cmake --build build/default --target test install doc
The install target of the last command will create the include/ and lib/ directories with a copy of the headers and library objects respectively in your dist location.
Our cmake configure has a number of options, cmake-gui or ccmake can show you all the options. The interesting ones are detailed below:
See jaulib CMake variables for details.
TBD
TBD
Also provided is a cross-build script using chroot into a target system using QEMU User space emulation and Linux kernel binfmt_misc to run on other architectures than the host.
You may use our pi-gen branch to produce a Raspi-arm64, Raspi-armhf or PC-amd64 target image.
Will be updated
Tested Eclipse 2024-03 (4.31).
IDE integration configuration files are provided for
- Eclipse with extensions
- CDT or CDT @ eclipse.org
- CDT-LSP recommended
- Should work with clang toolchain >= 16
- Utilizes clangd, clang-tidy and clang-format to support C++20 and above
- Add to available software site:
https://download.eclipse.org/tools/cdt/releases/cdt-lsp-latest
- Install
C/C++ LSP Support
in theEclipse CDT LSP Category
CMake Support
, installC/C++ CMake Build Support
with IDorg.eclipse.cdt.cmake.feature.group
- Usable via via Hardcoded CMake Presets with
debug-clang
- Usable via via Hardcoded CMake Presets with
The Hardcoded CMake Presets will
use build/default
as the default build folder with debug enabled.
Make sure to set the environment variable CMAKE_BUILD_PARALLEL_LEVEL
to a suitable high number, best to your CPU core count.
This will enable parallel build with the IDE.
You can import the project to your workspace via File . Import...
and Existing Projects into Workspace
menu item.
For Eclipse one might need to adjust some setting in the .project
and .cproject
(CDT)
via Eclipse settings UI, but it should just work out of the box.
Otherwise recreate the Eclipse project by
- delete
.project
and.cproject
File . New . C/C++ Project
andEmpty or Existing CMake Project
while using this project folder.
IDE integration configuration files are provided for
For VSCodium one might copy the example root-workspace file
to the parent folder of this project (note the filename change) and adjust the path
to your filesystem.
cp .vscode/direct_bt.code-workspace_example ../direct_bt.code-workspace
vi ../direct_bt.code-workspace
Then you can open it via File . Open Workspace from File...
menu item.
- All listed extensions are referenced in this workspace file to be installed via the IDE
- Select one of the CMake Presets for
- Configuration
- Build
- Test
Gamp is lead by Gothel Software.
If you like to utilize Gamp in a commercial setting, please contact Gothel Software to setup a potential support contract or just help to fund the ongoing effort.
Bugtracker etc to be setup at a later stage.
See Changes.