# Makefile vs CMake ## Client The client can be compiled both with the historical Makefile and with a newer CMakeLists.txt. At the moment both are maintained because they don't perfectly overlap yet. * *in_common*: src in /common * *in_deps*: src in /client/deps * *opt*: optional dependency * *pc*: use pkg-config * *sys*: system library | Feature | Makefile | CMake | Remarks | |-----|---|---|---| | verbose | `V=1` | `VERBOSE=1` | | | debug build | `DEBUG=1` | `-DCMAKE_BUILD_TYPE=Debug` | client only | | warnings management | yes (1) | **no** | (1) cf Makefile.defs | | extra GCC warnings | GCCEXTRA=1 | **no** | | | extra Clang warnings | CLANGEXTRA=1 | **no** | only on host | | AddressSanitize | SANITIZE=1 | **no** | only on host | | compilation | in place | in build dir | | | user `CFLAGS`/`LDFLAGS` | envvars honored (1) | envvars honored (2) | (1) also `LDLIBS` and `INCLUDES_CLIENT` for more tuning (2) only at first cmake call | | Mingw gnu printf | `_ISOC99_SOURCE` | `_ISOC99_SOURCE` | and in cbor.h: `__attribute__((format (__MINGW_PRINTF_FORMAT, 2, 3)))`| | C++ | c++11 | gnu++14 | | | dep amiibo | in_deps | in_deps | | | dep atomic | sys, for RPiZ | sys, for RPiZ | `-Wl,--as-needed -latomic -Wl,--no-as-needed` unless OSX | | atomic detection | **none** | **none** | | | dep bluez | opt, sys | opt, sys | | | bluez detection | pc | pkg_search_module | | | `SKIPBT` | yes | yes | | | dep bzip2 | sys | sys | | | bzip2 detection | **none** | find_package, Cross:gitclone | | | dep cliparser | in_deps | in_deps | | | dep hardnested | in_deps | in_deps | | | hardn arch autodetect | `uname -m` =? 86 or amd64; `$(CC) -E -mavx512f`? +`AVX512` | `CMAKE_SYSTEM_PROCESSOR` =? x86 or x86_64 or i686 or AMD64 (1) | (1) currently it always includes AVX512 on Intel arch | | `cpu_arch` | yes | **no/auto?** | e.g. `cpu_arch=generic` for cross-compilation | dep jansson | sys / in_deps | sys / in_deps | | | jansson detection | pc | pc/find* | | | `SKIPJANSSONSYSTEM` | yes | yes | | | dep lua | sys / in_deps(1) | **in_deps only**(2) | (1) manual def of `LUAPLATFORM` for mingw/macosx/linux (2) manual, different?, for Android too | | lua detection | pc | **none** | | | `SKIPLUASYSTEM` | yes | **no** | | | lualibs/pm3_cmd.lua | yes | add_custom_command **but unused** | | | lualibs/mfc_default_keys.lua | yes | add_custom_command **but unused** | | | dep lz4 | | | (in_common) not yet used, future. See `get_lz4.sh` for upstream fetch & patch | | dep libm | sys | sys | | | libm detection | **none** | **none** (1) | (1) cf https://cmake.org/pipermail/cmake/2019-March/069168.html ? | | dep mbedtls | in_common | in_common | no sys lib: missing support for CMAC in def conf (btw no .pc available) | | dep python3 | opt, sys, <3.8 & 3.8 | opt, sys, <3.8 & 3.8 | | | python3 detection | pc | pkg_search_module | | | `SKIPPYTHON` | yes | yes | | | dep pthread | sys | sys | | | pthread detection | **none** | **none** (1) | (1) cf https://stackoverflow.com/questions/1620918/cmake-and-libpthread ? | | `SKIPPTHREAD` | yes | yes | e.g. for termux | | dep Qt | opt, sys, Qt5 & Qt4 | opt, sys, Qt5 | | | Qt detection | pc(qt5)/pc(qt4)/`QTDIR`(1) (2) | find_package(qt5) (3) | (1) if `QTDIR`: hardcode path (2) OSX: pkg-config hook for Brew (3) OSX: add search path| | `SKIPQT` | yes | yes | | | dep readline | sys | sys | | | readline detection | **none** (1) | find*(2), Cross:getzip | (1) OSX: hardcoded path (2) additional paths for OSX | | `SKIPREADLINE` | yes | yes | CLI not fully functional without Readline | | dep reveng | in_deps | in_deps | | | `SKIPREVENGTEST` | yes(1) | **no**(2) | (1) e.g. if cross-compilation (2) tests aren't compiled/ran with cmake | | dep tinycbor | in_deps | in_deps | | | dep whereami | sys / in_deps | sys / in_deps | | | whereami detection | **search /usr/include/whereami.h** | find* | no .pc available | | `SKIPWHEREAMISYSTEM` | yes | yes | | | version | mkversion | mkversion | | | install | yes (1) | **no** | (1) supports `DESTDIR`, `PREFIX`, `UDEV_PREFIX`. Installs resources as well, `INSTALL*RELPATH` | | deb | no | partial? | | | tarbin | yes, unused? | no | | | Android cross- | **no** | yes | | | SWIG Lua+Python embedded | **no** | *ongoing* | cf libpm3_experiments branch | | libpm3 with SWIG Lua+Python| **no** | *ongoing* | cf libpm3_experiments branch | ## Tools `makefile` only at the moment `SKIPGPU` ## ARM `makefile` only at the moment `PLATFORM`, `PLATFORM_EXTRAS`, `DESTDIR`, `PREFIX`, `FWTAG` ## Global `makefile` only at the moment