Browse Source

Add static analysis capability using cppcheck.

static-analysis
Christoph Scholtes 1 year ago
parent
commit
d80ae6aec3
3 changed files with 58 additions and 8 deletions
  1. +1
    -0
      Dockerfile
  2. +34
    -3
      Makefile
  3. +23
    -5
      README.md

+ 1
- 0
Dockerfile View File

@@ -31,5 +31,6 @@ COPY MacOSX11.1.sdk.tar.* /home/build/rack-plugin-toolchain/
RUN JOBS=$JOBS make toolchain-mac
RUN JOBS=$JOBS make toolchain-win
RUN JOBS=$JOBS make toolchain-lin
RUN JOBS=$JOBS make toolchain-cppcheck

RUN rm MacOSX11.1.sdk.tar.*

+ 34
- 3
Makefile View File

@@ -17,7 +17,7 @@ export JOBS_CT_NG :=
endif

RACK_SDK_VERSION := 2.4.1
DOCKER_IMAGE_VERSION := 13
DOCKER_IMAGE_VERSION := 14


all: toolchain-all rack-sdk-all
@@ -26,7 +26,7 @@ all: toolchain-all rack-sdk-all
# Toolchain build


toolchain-all: toolchain-lin toolchain-win toolchain-mac
toolchain-all: toolchain-lin toolchain-win toolchain-mac toolchain-cppcheck


crosstool-ng := $(LOCAL_DIR)/bin/ct-ng
@@ -108,6 +108,24 @@ $(toolchain-mac):
rm -rf osxcross


CPPCHECK_VERSION := 2.13.0
toolchain-cppcheck := $(LOCAL_DIR)/cppcheck/bin/cppcheck
toolchain-cppcheck: $(toolchain-cppcheck)
$(toolchain-cppcheck):
wget --continue "https://github.com/danmar/cppcheck/archive/refs/tags/$(CPPCHECK_VERSION).tar.gz"
tar xvf $(CPPCHECK_VERSION).tar.gz
cd cppcheck-$(CPPCHECK_VERSION) && mkdir build
cd cppcheck-$(CPPCHECK_VERSION)/build \
&& cmake .. \
-DUSE_MATCHCOMPILER=ON \
-DUSE_THREADS=ON \
-DCMAKE_INSTALL_PREFIX=$(LOCAL_DIR)/cppcheck \
&& cmake --build . -j \
&& cmake --install .
rm $(CPPCHECK_VERSION).tar.gz
rm -rf cppcheck-$(CPPCHECK_VERSION)


toolchain-clean:
rm -rf local osxcross .build build.log .config

@@ -228,6 +246,16 @@ plugin-build-clean:
rm -rf $(PLUGIN_BUILD_DIR)


# Static Analysis

static-analysis-cppcheck: export PATH := $(LOCAL_DIR)/cppcheck/bin:$(PATH)
static-analysis-cppcheck: toolchain-cppcheck
cd $(PLUGIN_DIR) && cppcheck src/ -isrc/dep --std=c++11 -j $(shell nproc) -q --error-exitcode=1 2>&1 | tee cppcheck-results.log


plugin-analyze: static-analysis-cppcheck


# Docker helpers


@@ -334,6 +362,9 @@ docker-plugin-build-lin-x64:
mkdir -p $(PLUGIN_BUILD_DIR)
$(DOCKER_RUN) -c "$(MAKE) plugin-build-lin-x64 $(MFLAGS)"

docker-plugin-analyze:
$(DOCKER_RUN) -c "$(MAKE) plugin-analyze $(MFLAGS)"


.NOTPARALLEL:
.PHONY: all plugin-build
.PHONY: all plugin-build plugin-analyze

+ 23
- 5
README.md View File

@@ -2,6 +2,8 @@

**Cross-compile** VCV Rack plugins for all supported platforms with a single command on any GNU/Linux-based distribution.

**Analyze** plugin source code using open source static analysis tools (for example: cppcheck).

## Supported platforms and architectures

The following platforms and architectures are supported by the VCV Rack Plugin Toolchain:
@@ -57,6 +59,14 @@ make -j$(nproc) plugin-build PLUGIN_DIR=...

Built plugin packages are placed in the `plugin-build/` directory.

Analyze your plugin source code.

```bash
make -j$(nproc) plugin-analyze PLUGIN_DIR=...
```

Analysis results will be captured in a results file in the plugin source directory.

### Docker toolchain build

*Works on any operating system with [Docker](https://www.docker.com/) installed.*
@@ -72,26 +82,34 @@ make docker-build

*Optional*: Pass number of jobs to use to for the tool chain build with the `JOBS` environment variable.
```bash
JOBS=8 make docker-build
JOBS=$(nproc) make docker-build
```
(`-j8` will not work due to the different build systems used in the toolchain build process.)
(Just passing `-j$(nproc)` directly will not work due to the different build systems used in the toolchain build process.)

Build your plugin.


```bash
make -j8 docker-plugin-build PLUGIN_DIR=...
make -j$(nproc) docker-plugin-build PLUGIN_DIR=...
```
You may replace 8 with your desired number of parallel jobs, such as your number of logical cores.

Built plugin packages are placed in the `plugin-build/` directory.

Analyze plugin source code.

```bash
make -j$(nproc) docker-plugin-analyze PLUGIN_DIR=...
```

Analysis results will be captured in a results file in the plugin source directory.

#### Notes for building and using the Docker-based toolchain on macOS

- Ensure that Docker Desktop has sufficient amount of resources (RAM, disk space) allocated to build the toolchain!
- You may have to add `MAKE=make` to the build command::

```bash
MAKE=make make -j8 docker-plugin-build PLUGIN_DIR=...
MAKE=make make -j$(nproc) docker-plugin-build PLUGIN_DIR=...
```

### Rack SDK management


Loading…
Cancel
Save