Development tips

From miki
Revision as of 08:02, 23 May 2022 by Mip (talk | contribs) (→‎Reproducible build)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Summary of things I do frequently or that I learned the hard way

Console tips

  • Search for whole words occurence:
ag "\bWHOLEWORD\b" # or
ag -w WHOLEWORD

Advices

  • Always keep your tests in sync with your source code.
  • At the very least, this means in the same repository. Ideally code and tests are updated together in the same commit.
  • Make your startup / boot / init sequence independent of system configuration. Avoid early optimization.

Reproducible build

This section is dedicated to reproducible builds / build determinism / deterministic builds.

libraries / ar

With libraries produced with ar, use option D to produce deterministic build.

ar rcsD mylib.a foo.o bar.o

Alternatively one can run ranlib in deterministic mode:

ranlib -D mylib.a

I also made a custom python script ardee.py (that also works on libraries produce by ARM toolchain armar, which doesn't have the D flag)

ardee.py mylib.a

clang

See https://blog.llvm.org/2019/11/deterministic-builds-with-clang-and-lld.html .

Import flags include:

CCFLAGS       += -no-canonical-prefixes
CCFLAGS       += -fdebug-compilation-dir .
sCFLAGS       += -Wa,-fdebug-compilation-dir,.
SCFLAGS       += -Wa,-fdebug-compilation-dir,.

Good practices =

  • Avoid linguistic smells.
That is method or identifier that does more / less / reverse of what they say
  • Adopt name molds.
That is conventions on where to put quantifier, letter case... to increase the likelihood that developers pick the same variable names.

Calendars

Use ICU libraries that deal with all subtleties!