It's possible to add other firmwares as well with tagged names (`FWTAG=<mytag>`), e.g. here we're compiling another image for generic Proxmark3 devices:
Default compiler is gcc but you can use clang for the non-ARM parts with e.g. `make client CC=clang CXX=clang++ LD=clang++`. Note that `CC`, `CXX` and `LD` must be provided as explicit arguments, they won't be overridden by environment variables.
Similarly, for ARM-side components, `CROSS_CFLAGS` and `CROSS_LDFLAGS` can be overridden by environment variables and `CROSS_CC`, `CROSS_LD` and `CROSS_OBJCOPY` can be provided as explicit arguments.
If your platform needs specific lib/include paths for the client, you can use `LDLIBS` and `INCLUDES_CLIENT`*as envvars*, e.g. `LDLIBS="-L/some/more/lib" INCLUDES_CLIENT="-I/some/more/include" make client ...`
It's also possible to skip parts even if libraries are present in the compilation environment:
*`make client SKIPQT=1` to skip GUI even if Qt is present
*`make client SKIPBT=1` to skip native Bluetooth support even if libbluetooth is present
By default, the client is using Readline, but this can be disabled:
*`make client SKIPREADLINE=1` to skip system Readline lib even if libreadline is present
When Readline is disabled, it is possible to use Linenoise instead. Note that Linenoise-ng contains `ConvertUTF.cpp` which is under a redistribution-only license, therefore think twice before including it in a release. To get Linenoise-ng, see `client/deps/get_linenoise.sh`.
If you're cross-compiling, these ones might be useful:
*`make client SKIPREVENGTEST=1` to skip compilation and execution of a consistency test for reveng, which can be problematic in case of cross-compilation
*`make client cpu_arch=generic` to skip Intel specialized hardnested components, which is required e.g. if cross-compilation host is Intel but not the target