95 lines
3.3 KiB
Org Mode
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]]]
|