.. _compiling-the-software: Compiling the software ###################### Tools ===== I use the following tools in order to build and manage the software: * Visual Studio Code * PlatformIO * Git for Windows * VSCode plugin: Minify (used to minimise the html files) Code Formatting =============== I use pre-commit and their cpp style checks to validate the code. Plugin defintions are found in **.pre-commit-config.yaml** `Pre-Commit `_ .. note:: There is not yet any automatic checks since this does not work on Windows. It works if running under WSL2 with Ubuntu. Targets ======= In the platformio config there are 3 targets defined * gravity-debug; Maximum logging for trouble shooting, deep sleep is disabled. * gravity-release; Standard release * gravity-perf; Standard release but contains code for measuring performance .. warning:: The debug target can be unsable and crash the device under certain circumstanses. Excessive logging to the serial port can cause corruption and crashes. I'm still trying to figure out what causes these issues in the debug target. Other targets are stable and works fine. Source structure ================ .. list-table:: Directory structure :widths: 40 60 :header-rows: 1 * - path - content * - /bin - Contains compiled binaries * - /data - Directory for flashing device filesystem * - /doc - Various external documents used as input * - /html - Source for html files * - /img - Images uses in README.md * - /lib - External libraries used when compiling * - /script - Scripts used in build process * - /src - Source code for software * - /src_docs - Source code for documentation * - /stl - 3d models * - /test - Test data for developing html files Options ======= This is a list of C++ defines that is used to enable/disable functions in the code. .. list-table:: Defines :widths: 40 60 :header-rows: 1 * - define - description * - ACTIVATE_OTA - Enables the OTA functionallity in the code * - SKIP_SLEEPMODE - THe device never goes into sleep mode, useful when developing. * - CFG_DISABLE_LOGGING - Done include verbose logging in Config class. Excessive logging may crash device. * - GYRO_DISABLE_LOGGING - Done include verbose logging in Gyro class. Excessive logging may crash device. * - PUSH_DISABLE_LOGGING - Done include verbose logging in PushTarget class. Excessive logging may crash device. * - TSEN_DISABLE_LOGGING - Done include verbose logging in TempSensor class. Excessive logging may crash device. * - WEB_DISABLE_LOGGING - Done include verbose logging in WebServer class. Excessive logging may crash device. * - MAIN_DISABLE_LOGGING - Done include verbose logging in Main class. Excessive logging may crash device. * - USE_LITTLEFS - Use the new filesystem in Ardurino * - EMBED_HTML - Html files are included in code, if not defined they are served from the file system. * - USER_SSID - If defined the device will always use this SSID * - USER_SSID_PWD - Password to the SSID * - CFG_APPVER - Defines the version of the compiled software