mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-01 02:09:57 +00:00
b0fe5ef8ba
* Initial commit of a fuzzer for Meshtastic. * Use a max of 5 for the phone queues * Only write files to the temp dir * Limitless queue + fuzzer = lots of ram :) * Use $PIO_ENV for path to program * spelling: s/is/to/ * Use loopCanSleep instead of a lock in Router * realHardware allows full use of a CPU core * Ignore checkov CKV_DOCKER_2 & CKV_DOCKER_3 * Add Atak seed * Fix lint issues in build.sh * Use exception to exit from portduino_main * Separate build & source files into $WORK & $SRC * Use an ephemeral port for the API server * Include CXXFLAGS in the link step * Read all shared libraries * Use a separate work directory for each sanitizer --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""PlatformIO build script (pre: runs before other Meshtastic scripts).
|
|
|
|
ClusterFuzzLite executes in a different container from the build. During the build,
|
|
attempt to link statically to as many dependencies as possible. For dependencies that
|
|
do not have static libraries, the shared library files are copied to the output
|
|
directory by the build.sh script.
|
|
"""
|
|
|
|
import glob
|
|
import os
|
|
import shlex
|
|
|
|
from SCons.Script import DefaultEnvironment, Literal
|
|
|
|
env = DefaultEnvironment()
|
|
|
|
cxxflags = shlex.split(os.getenv("CXXFLAGS"))
|
|
sanitizer_flags = shlex.split(os.getenv("SANITIZER_FLAGS"))
|
|
lib_fuzzing_engine = shlex.split(os.getenv("LIB_FUZZING_ENGINE"))
|
|
statics = glob.glob("/usr/lib/lib*.a") + glob.glob("/usr/lib/*/lib*.a")
|
|
no_static = set(("-ldl",))
|
|
|
|
|
|
def replaceStatic(lib):
|
|
"""Replace -l<libname> with the static .a file for the library."""
|
|
if not lib.startswith("-l") or lib in no_static:
|
|
return lib
|
|
static_name = f"/lib{lib[2:]}.a"
|
|
static = [s for s in statics if s.endswith(static_name)]
|
|
if len(static) == 1:
|
|
return static[0]
|
|
return lib
|
|
|
|
|
|
# Setup the environment for building with Clang and the OSS-Fuzz required build flags.
|
|
env.Append(
|
|
CFLAGS=os.getenv("CFLAGS"),
|
|
CXXFLAGS=cxxflags,
|
|
LIBSOURCE_DIRS=["/usr/lib/x86_64-linux-gnu"],
|
|
LINKFLAGS=cxxflags
|
|
+ sanitizer_flags
|
|
+ lib_fuzzing_engine
|
|
+ ["-stdlib=libc++", "-std=c++17"],
|
|
_LIBFLAGS=[replaceStatic(s) for s in shlex.split(os.getenv("STATIC_LIBS"))]
|
|
+ [
|
|
"/usr/lib/x86_64-linux-gnu/libunistring.a", # Needs to be at the end.
|
|
# Find the shared libraries in a subdirectory named lib
|
|
# within the same directory as the binary.
|
|
Literal("-Wl,-rpath,$ORIGIN/lib"),
|
|
"-Wl,-z,origin",
|
|
],
|
|
)
|