Skip to content
Ruthger Dijt edited this page May 21, 2020 · 8 revisions

It Just Works Wiki

Contributors' resources

Environment variables

  • SMCE_OPTIONS: Path to a smce config file, used if there are no config files found in the directory the binary was called from.

CMake configuration variables

  • SMCE_STDLIB_DEBUG: Define truthy to enable debug mode on the standard library in use if possible (falsy by default)

Identifier casing

C++

  • Macros should be in SHOUTING_SNAKE_CASE
  • Constructs that can have their address taken (variables and functions) should be in snake_case
  • Type names should be in PascalCase
  • Enumerators should be either in SHOUTING_SNAKE_CASE or in snake_case, but all enumerators in a given enum should follow the same convention

Repository structure

  • / : repository root directory
    • CMake/ : scripts and bits for normal CMake operation
      • Check/ : source files for performing the various platform checks by try_compile and friends
      • Modules/ : various CMake modules of this repository; meant to be include ()'ed
    • docs/* Doxygen files
    • examples/ : example files to demonstrate the project's usability
      • arduino/ : Arduino-specific examples
        • sketches/*.ino : example sketches
        • cxx/*.cxx : example C++ files (to demonstrate equal SFINAEability of the Arduino interface)
    • extras/mobile_remote_kit/**/* Kotlin-based Android toolkit to control the emulator and tunnel for BLE emulation
    • include/ : project-wide header files
      • ardpolyfills/ : Arduino mock headers
      • stdpolyfills/ : Special polyfills for C++ toolchains with partial C++2a support
      • **/*.[hxx,txx] : various utility headers that need to be available project-wide
    • modules/*/
      • include/**/*.[hxx,txx] : header files for the module (until C++2a Modules broadly available)
      • src/**/*.cxx : module implementation source files
      • test/*.cxx : sources for testing the module
      • CMakeLists.txt: Subproject for the module (until C++2a Modules broadly available)
      • ${MODULE_NAME}.ixx : module interface (once C++2a Modules broadly available)
    • share/scme : various resource files for runtime
      • toolchain/CMakeLists.txt : CMake project file for the runtime-loadable sketches
    • src/**/*.cxx : emulator's non-modular sources
    • test/**/*.cxx : sources for testing cross-module functionality
    • thirdparty/**/* : build/install dependencies
    • * : repository control files