#+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: # +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]]]