A couple of script changes after CI integration
- Renamed struct_.py -> structs.py again. - Removed lfs.csv, instead prefering script specific csv files. - Added *-diff make rules for quick comparison against a previous result, results are now implicitly written on each run. For example, `make code` creates lfs.code.csv and prints the summary, which can be followed by `make code-diff` to compare changes against the saved lfs.code.csv without overwriting. - Added nargs=? support for -s and -S, now uses a per-result _sort attribute to decide sort if fields are unspecified.
This commit is contained in:
@@ -91,13 +91,13 @@ CFLAGS += -fno-omit-frame-pointer
|
||||
endif
|
||||
|
||||
ifdef VERBOSE
|
||||
CODEFLAGS += -v
|
||||
DATAFLAGS += -v
|
||||
STACKFLAGS += -v
|
||||
STRUCTFLAGS += -v
|
||||
COVFLAGS += -v
|
||||
PERFFLAGS += -v
|
||||
PERFBDFLAGS += -v
|
||||
CODEFLAGS += -v
|
||||
DATAFLAGS += -v
|
||||
STACKFLAGS += -v
|
||||
STRUCTSFLAGS += -v
|
||||
COVFLAGS += -v
|
||||
PERFFLAGS += -v
|
||||
PERFBDFLAGS += -v
|
||||
endif
|
||||
# forward -j flag
|
||||
PERFFLAGS += $(filter -j%,$(MAKEFLAGS))
|
||||
@@ -107,11 +107,11 @@ CODEFLAGS += --nm-path="$(NM)"
|
||||
DATAFLAGS += --nm-path="$(NM)"
|
||||
endif
|
||||
ifneq ($(OBJDUMP),objdump)
|
||||
CODEFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
DATAFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
STRUCTFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
PERFFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
PERFBDFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
CODEFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
DATAFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
STRUCTSFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
PERFFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
PERFBDFLAGS += --objdump-path="$(OBJDUMP)"
|
||||
endif
|
||||
ifneq ($(PERF),perf)
|
||||
PERFFLAGS += --perf-path="$(PERF)"
|
||||
@@ -123,14 +123,14 @@ BENCHFLAGS += -b
|
||||
TESTFLAGS += $(filter -j%,$(MAKEFLAGS))
|
||||
BENCHFLAGS += $(filter -j%,$(MAKEFLAGS))
|
||||
ifdef YES_PERF
|
||||
TESTFLAGS += -p$(TEST_PERF)
|
||||
BENCHFLAGS += -p$(BENCH_PERF)
|
||||
TESTFLAGS += -p $(TEST_PERF)
|
||||
BENCHFLAGS += -p $(BENCH_PERF)
|
||||
endif
|
||||
ifdef YES_PERFBD
|
||||
TESTFLAGS += -t$(TEST_TRACE) --trace-backtrace --trace-freq=100
|
||||
TESTFLAGS += -t $(TEST_TRACE) --trace-backtrace --trace-freq=100
|
||||
endif
|
||||
ifndef NO_PERFBD
|
||||
BENCHFLAGS += -t$(BENCH_TRACE) --trace-backtrace --trace-freq=100
|
||||
BENCHFLAGS += -t $(BENCH_TRACE) --trace-backtrace --trace-freq=100
|
||||
endif
|
||||
ifdef VERBOSE
|
||||
TESTFLAGS += -v
|
||||
@@ -187,6 +187,161 @@ help:
|
||||
printf " "" %-25s %s\n", rule, $$0 \
|
||||
}' $(MAKEFILE_LIST))
|
||||
|
||||
## Find the per-function code size
|
||||
.PHONY: code
|
||||
code: CODEFLAGS+=-S
|
||||
code: $(OBJ) $(BUILDDIR)/lfs.code.csv
|
||||
./scripts/code.py $(OBJ) $(CODEFLAGS)
|
||||
|
||||
## Compare per-function code size
|
||||
.PHONY: code-diff
|
||||
code-diff: $(OBJ)
|
||||
./scripts/code.py $^ $(CODEFLAGS) -d $(BUILDDIR)/lfs.code.csv
|
||||
|
||||
## Find the per-function data size
|
||||
.PHONY: data
|
||||
data: DATAFLAGS+=-S
|
||||
data: $(OBJ) $(BUILDDIR)/lfs.data.csv
|
||||
./scripts/data.py $(OBJ) $(DATAFLAGS)
|
||||
|
||||
## Compare per-function data size
|
||||
.PHONY: data-diff
|
||||
data-diff: $(OBJ)
|
||||
./scripts/data.py $^ $(DATAFLAGS) -d $(BUILDDIR)/lfs.data.csv
|
||||
|
||||
## Find the per-function stack usage
|
||||
.PHONY: stack
|
||||
stack: STACKFLAGS+=-S
|
||||
stack: $(CI) $(BUILDDIR)/lfs.stack.csv
|
||||
./scripts/stack.py $(CI) $(STACKFLAGS)
|
||||
|
||||
## Compare per-function stack usage
|
||||
.PHONY: stack-diff
|
||||
stack-diff: $(CI)
|
||||
./scripts/stack.py $^ $(STACKFLAGS) -d $(BUILDDIR)/lfs.stack.csv
|
||||
|
||||
## Find function sizes
|
||||
.PHONY: funcs
|
||||
funcs: SUMMARYFLAGS+=-S
|
||||
funcs: \
|
||||
$(BUILDDIR)/lfs.code.csv \
|
||||
$(BUILDDIR)/lfs.data.csv \
|
||||
$(BUILDDIR)/lfs.stack.csv
|
||||
$(strip ./scripts/summary.py $^ \
|
||||
-bfunction \
|
||||
-fcode=code_size \
|
||||
-fdata=data_size \
|
||||
-fstack=stack_limit --max=stack \
|
||||
$(SUMMARYFLAGS))
|
||||
|
||||
## Compare function sizes
|
||||
.PHONY: funcs-diff
|
||||
funcs-diff: SHELL=/bin/bash
|
||||
funcs-diff: $(OBJ) $(CI)
|
||||
$(strip ./scripts/summary.py \
|
||||
<(./scripts/code.py $(OBJ) -q $(CODEFLAGS) -o-) \
|
||||
<(./scripts/data.py $(OBJ) -q $(DATAFLAGS) -o-) \
|
||||
<(./scripts/stack.py $(CI) -q $(STACKFLAGS) -o-) \
|
||||
-bfunction \
|
||||
-fcode=code_size \
|
||||
-fdata=data_size \
|
||||
-fstack=stack_limit --max=stack \
|
||||
$(SUMMARYFLAGS) -d <(./scripts/summary.py \
|
||||
$(BUILDDIR)/lfs.code.csv \
|
||||
$(BUILDDIR)/lfs.data.csv \
|
||||
$(BUILDDIR)/lfs.stack.csv \
|
||||
-q $(SUMMARYFLAGS) -o-))
|
||||
|
||||
## Find struct sizes
|
||||
.PHONY: structs
|
||||
structs: STRUCTSFLAGS+=-S
|
||||
structs: $(OBJ) $(BUILDDIR)/lfs.structs.csv
|
||||
./scripts/structs.py $(OBJ) $(STRUCTSFLAGS)
|
||||
|
||||
## Compare struct sizes
|
||||
.PHONY: structs-diff
|
||||
structs-diff: $(OBJ)
|
||||
./scripts/structs.py $^ $(STRUCTSFLAGS) -d $(BUILDDIR)/lfs.structs.csv
|
||||
|
||||
## Find the line/branch coverage after a test run
|
||||
.PHONY: cov
|
||||
cov: COVFLAGS+=-s
|
||||
cov: $(GCDA) $(BUILDDIR)/lfs.cov.csv
|
||||
$(strip ./scripts/cov.py $(GCDA) \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
$(COVFLAGS))
|
||||
|
||||
## Compare line/branch coverage
|
||||
.PHONY: cov-diff
|
||||
cov-diff: $(GCDA)
|
||||
$(strip ./scripts/cov.py $^ \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
$(COVFLAGS) -d $(BUILDDIR)/lfs.cov.csv)
|
||||
|
||||
## Find the perf results after bench run with YES_PERF
|
||||
.PHONY: perf
|
||||
perf: PERFFLAGS+=-S
|
||||
perf: $(BENCH_PERF) $(BUILDDIR)/lfs.perf.csv
|
||||
$(strip ./scripts/perf.py $(BENCH_PERF) \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
$(PERFFLAGS))
|
||||
|
||||
## Compare perf results
|
||||
.PHONY: perf-diff
|
||||
perf-diff: $(BENCH_PERF)
|
||||
$(strip ./scripts/perf.py $^ \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
$(PERFFLAGS) -d $(BUILDDIR)/lfs.perf.csv)
|
||||
|
||||
## Find the perfbd results after a bench run
|
||||
.PHONY: perfbd
|
||||
perfbd: PERFBDFLAGS+=-S
|
||||
perfbd: $(BENCH_TRACE) $(BUILDDIR)/lfs.perfbd.csv
|
||||
$(strip ./scripts/perfbd.py $(BENCH_RUNNER) $(BENCH_TRACE) \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
$(PERFBDFLAGS))
|
||||
|
||||
## Compare perfbd results
|
||||
.PHONY: perfbd-diff
|
||||
perfbd-diff: $(BENCH_TRACE)
|
||||
$(strip ./scripts/perfbd.py $(BENCH_RUNNER) $^ \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
$(PERFBDFLAGS) -d $(BUILDDIR)/lfs.perfbd.csv)
|
||||
|
||||
## Find a summary of compile-time sizes
|
||||
.PHONY: summary sizes
|
||||
summary sizes: \
|
||||
$(BUILDDIR)/lfs.code.csv \
|
||||
$(BUILDDIR)/lfs.data.csv \
|
||||
$(BUILDDIR)/lfs.stack.csv \
|
||||
$(BUILDDIR)/lfs.structs.csv
|
||||
$(strip ./scripts/summary.py $^ \
|
||||
-fcode=code_size \
|
||||
-fdata=data_size \
|
||||
-fstack=stack_limit --max=stack \
|
||||
-fstructs=struct_size \
|
||||
-Y $(SUMMARYFLAGS))
|
||||
|
||||
## Compare compile-time sizes
|
||||
.PHONY: summary-diff sizes-diff
|
||||
summary-diff sizes-diff: SHELL=/bin/bash
|
||||
summary-diff sizes-diff: $(OBJ) $(CI)
|
||||
$(strip ./scripts/summary.py \
|
||||
<(./scripts/code.py $(OBJ) -q $(CODEFLAGS) -o-) \
|
||||
<(./scripts/data.py $(OBJ) -q $(DATAFLAGS) -o-) \
|
||||
<(./scripts/stack.py $(CI) -q $(STACKFLAGS) -o-) \
|
||||
<(./scripts/structs.py $(OBJ) -q $(STRUCTSFLAGS) -o-) \
|
||||
-fcode=code_size \
|
||||
-fdata=data_size \
|
||||
-fstack=stack_limit --max=stack \
|
||||
-fstructs=struct_size \
|
||||
-Y $(SUMMARYFLAGS) -d <(./scripts/summary.py \
|
||||
$(BUILDDIR)/lfs.code.csv \
|
||||
$(BUILDDIR)/lfs.data.csv \
|
||||
$(BUILDDIR)/lfs.stack.csv \
|
||||
$(BUILDDIR)/lfs.structs.csv \
|
||||
-q $(SUMMARYFLAGS) -o-))
|
||||
|
||||
## Build the test-runner
|
||||
.PHONY: test-runner build-test
|
||||
ifndef NO_COV
|
||||
@@ -255,61 +410,6 @@ bench: bench-runner
|
||||
bench-list: bench-runner
|
||||
./scripts/bench.py $(BENCH_RUNNER) $(BENCHFLAGS) -l
|
||||
|
||||
## Find the per-function code size
|
||||
.PHONY: code
|
||||
code: $(OBJ)
|
||||
./scripts/code.py $^ -Ssize $(CODEFLAGS)
|
||||
|
||||
## Find the per-function data size
|
||||
.PHONY: data
|
||||
data: $(OBJ)
|
||||
./scripts/data.py $^ -Ssize $(DATAFLAGS)
|
||||
|
||||
## Find the per-function stack usage
|
||||
.PHONY: stack
|
||||
stack: $(CI)
|
||||
./scripts/stack.py $^ -Slimit -Sframe $(STACKFLAGS)
|
||||
|
||||
## Find the struct sizes
|
||||
.PHONY: struct
|
||||
struct: $(OBJ)
|
||||
./scripts/struct_.py $^ -Ssize $(STRUCTFLAGS)
|
||||
|
||||
## Find the line/branch coverage after a test run
|
||||
.PHONY: cov
|
||||
cov: $(GCDA)
|
||||
$(strip ./scripts/cov.py \
|
||||
$^ $(patsubst %,-F%,$(SRC)) \
|
||||
-slines -sbranches \
|
||||
$(COVFLAGS))
|
||||
|
||||
## Find the perf results after bench run with YES_PERF
|
||||
.PHONY: perf
|
||||
perf: $(BENCH_PERF)
|
||||
$(strip ./scripts/perf.py \
|
||||
$^ $(patsubst %,-F%,$(SRC)) \
|
||||
-Scycles \
|
||||
$(PERFFLAGS))
|
||||
|
||||
## Find the perfbd results after a bench run
|
||||
.PHONY: perfbd
|
||||
perfbd: $(BENCH_TRACE)
|
||||
$(strip ./scripts/perfbd.py \
|
||||
$(BENCH_RUNNER) $^ $(patsubst %,-F%,$(SRC)) \
|
||||
-Serased -Sproged -Sreaded \
|
||||
$(PERFBDFLAGS))
|
||||
|
||||
## Find a summary of compile-time sizes
|
||||
.PHONY: summary sizes
|
||||
summary sizes: $(BUILDDIR)/lfs.csv
|
||||
$(strip ./scripts/summary.py -Y $^ \
|
||||
-fcode=code_size \
|
||||
-fdata=data_size \
|
||||
-fstack=stack_limit \
|
||||
-fstruct=struct_size \
|
||||
--max=stack \
|
||||
$(SUMMARYFLAGS))
|
||||
|
||||
|
||||
# rules
|
||||
-include $(DEP)
|
||||
@@ -327,32 +427,29 @@ $(BUILDDIR)/lfs.code.csv: $(OBJ)
|
||||
./scripts/code.py $^ -q $(CODEFLAGS) -o $@
|
||||
|
||||
$(BUILDDIR)/lfs.data.csv: $(OBJ)
|
||||
./scripts/data.py $^ -q $(CODEFLAGS) -o $@
|
||||
./scripts/data.py $^ -q $(DATAFLAGS) -o $@
|
||||
|
||||
$(BUILDDIR)/lfs.stack.csv: $(CI)
|
||||
./scripts/stack.py $^ -q $(CODEFLAGS) -o $@
|
||||
./scripts/stack.py $^ -q $(STACKFLAGS) -o $@
|
||||
|
||||
$(BUILDDIR)/lfs.struct.csv: $(OBJ)
|
||||
./scripts/struct_.py $^ -q $(CODEFLAGS) -o $@
|
||||
$(BUILDDIR)/lfs.structs.csv: $(OBJ)
|
||||
./scripts/structs.py $^ -q $(STRUCTSFLAGS) -o $@
|
||||
|
||||
$(BUILDDIR)/lfs.cov.csv: $(GCDA)
|
||||
./scripts/cov.py $^ $(patsubst %,-F%,$(SRC)) -q $(COVFLAGS) -o $@
|
||||
$(strip ./scripts/cov.py $^ \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
-q $(COVFLAGS) -o $@)
|
||||
|
||||
$(BUILDDIR)/lfs.perf.csv: $(BENCH_PERF)
|
||||
./scripts/perf.py $^ $(patsubst %,-F%,$(SRC)) -q $(PERFFLAGS) -o $@
|
||||
$(strip ./scripts/perf.py $^ \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
-q $(PERFFLAGS) -o $@)
|
||||
|
||||
$(BUILDDIR)/lfs.perfbd.csv: $(BENCH_TRACE)
|
||||
$(strip ./scripts/perfbd.py \
|
||||
$(BENCH_RUNNER) $^ $(patsubst %,-F%,$(SRC)) \
|
||||
$(strip ./scripts/perfbd.py $(BENCH_RUNNER) $^ \
|
||||
$(patsubst %,-F%,$(SRC)) \
|
||||
-q $(PERFBDFLAGS) -o $@)
|
||||
|
||||
$(BUILDDIR)/lfs.csv: \
|
||||
$(BUILDDIR)/lfs.code.csv \
|
||||
$(BUILDDIR)/lfs.data.csv \
|
||||
$(BUILDDIR)/lfs.stack.csv \
|
||||
$(BUILDDIR)/lfs.struct.csv
|
||||
./scripts/summary.py $^ -q $(SUMMARYFLAGS) -o $@
|
||||
|
||||
$(BUILDDIR)/runners/test_runner: $(TEST_OBJ)
|
||||
$(CC) $(CFLAGS) $^ $(LFLAGS) -o $@
|
||||
|
||||
@@ -391,11 +488,10 @@ clean:
|
||||
rm -f $(BUILDDIR)/lfs
|
||||
rm -f $(BUILDDIR)/liblfs.a
|
||||
$(strip rm -f \
|
||||
$(BUILDDIR)/lfs.csv \
|
||||
$(BUILDDIR)/lfs.code.csv \
|
||||
$(BUILDDIR)/lfs.data.csv \
|
||||
$(BUILDDIR)/lfs.stack.csv \
|
||||
$(BUILDDIR)/lfs.struct.csv \
|
||||
$(BUILDDIR)/lfs.structs.csv \
|
||||
$(BUILDDIR)/lfs.cov.csv \
|
||||
$(BUILDDIR)/lfs.perf.csv \
|
||||
$(BUILDDIR)/lfs.perfbd.csv)
|
||||
|
||||
Reference in New Issue
Block a user