org-howto/env/development-environment.org

3.3 KiB

c++ development environment

#

#

Introduction

This describes my personal development environment. It focuses on productive C++-oriented development.

Goals

  1. portable development environment
  2. editor with LSP support
  3. Integrate compiled c++ libraries with python and jupyter notebooks.
  4. Communicate with browser-based front ends.
  5. Reliable and composable build system. Want it to be easy to introduce new libraries, with an arbitrarily elaborate dependecy graph
  6. Reproducible builds.

    • so it's easy to transfer/replicate development environment on another host
    • to mitigate bitrot
  7. Unit tests with code coverage
  8. Continuous Integration (CI)

Summary

Will be using the following components

Development Stack

component solution
o/s independent package manager nix
editor emacs
document generator org-mode
compiler gcc
language server lsp + clangd
version control git
continuous integration (CI) github actions
containers docker
cloud provider digital ocean

Build Stack

component solution
c++ build cmake + custom modules
c++ unit tests ctest + catch2
c++ code coverage gcov + lcov
reproducible build nix + flakes
documentation sphinx

C++ Library Stack

using these c++ libraries

component solution
unit tests catch2
general purpose boost
python integration pybind11
c++/browser communication websocket

Topics

Build Stack

nix setup

emacs setup: [.emacs walkthrough]

org-mode: [resources]

c++ build (cmake)

c++ unit tests

c++ code coverage

reproducible build (nix + flakes)

continuous integration: [github + nix + docker]

containers (docker)

C++ Library Stack

catch2

boost

pybind11

c++/browser communication

publish org-mode content: [publish static html]