Development tips

From miki
Revision as of 22:03, 2 March 2022 by Mip (talk | contribs) (→‎clang)
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,.

Calendars

Use ICU libraries that deal with all subtleties!