org-howto/env/development-environment.org

95 lines
3.3 KiB
Org Mode

#+title: c++ development environment
# org-publish options
# ^:{} require a_{b} before assuming that b should be subscripted.
# without this option a_b will automatically subscript b.
#+options: ^:{}
#
# emacs-specific options
#+startup: showall
#
# html exporter options
#+language: en
#+setupfile: ../ext/fniessen/theme-readtheorg.setup
# +infojs_opt: view:showall mouse:#ffc0c0 toc:nil ltoc:nil path:/web/ext/orginfo/org-info.js
# +html_head: <link rel="stylesheet" type="text/css" href="/web/css/primary.css" />
# +html_link_home: /web/index.html
* 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: [[[file:emacs-setup.org][.emacs walkthrough]]]
*** org-mode: [[file:org-mode-resources.org][[resources]]]
*** c++ build (cmake)
*** c++ unit tests
*** c++ code coverage
*** reproducible build (nix + flakes)
*** continuous integration: [[[file:github-continuous-integration.org][github + nix + docker]]]
*** containers (docker)
** C++ Library Stack
*** catch2
*** boost
*** pybind11
*** c++/browser communication
*** publish org-mode content: [[file:publish-static-html.org][[publish static html]]]