Skip to content

Commit 1ea9674

Browse files
authored
Merge pull request #171 from billhails/free-variables
Added a minlam_freeVars utility visitor
2 parents 270936d + e5af6b7 commit 1ea9674

7 files changed

Lines changed: 1014 additions & 11 deletions

File tree

Makefile

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
.PHONY: all clean realclean deps profile leak-check check-grammar \
22
list-cores test indent indent-src indent-generated docs \
33
install-sqlite3 coverage extracov view-coverage \
4+
coverage-target \
5+
help \
46
establish-baseline test-refactoring update-baseline clean-baseline \
57
scratch
68

@@ -330,9 +332,81 @@ indent-generated: .typedefs .indent.pro
330332
list-cores:
331333
@ls -rt1 /var/lib/apport/coredump/* | tail -1
332334

335+
help:
336+
@echo "CEKF Make targets"
337+
@echo ""
338+
@echo "Coverage"
339+
@echo " make coverage"
340+
@echo " Run full coverage workflow (build + test suite + report generation)."
341+
@echo ""
342+
@echo " make coverage-target COVERAGE_TARGET=tests/test_minlam_freeVars [COVERAGE_FILE=src/minlam_freeVars.c]"
343+
@echo " Run focused coverage on one executable target."
344+
@echo " Uses gcov when compiler is GCC, llvm-cov gcov when compiler is Clang."
345+
@echo ""
346+
@echo " make view-coverage"
347+
@echo " Open HTML coverage report when generated."
348+
@echo ""
349+
@echo "Coverage variables"
350+
@echo " CCC=<compiler> e.g. clang (default) or gcc"
351+
@echo " COVERAGE_TARGET=<bin> e.g. tests/test_minlam_freeVars"
352+
@echo " COVERAGE_FILE=<src> e.g. src/minlam_freeVars.c"
353+
@echo " LLVM_COV=<path> Override llvm-cov binary"
354+
@echo " GCOV=<path> Override gcov binary"
355+
333356
coverage:
334357
./tools/coverage.sh
335358

359+
coverage-target:
360+
@if [ -z "$(COVERAGE_TARGET)" ]; then \
361+
echo "Usage: make coverage-target COVERAGE_TARGET=tests/test_minlam_freeVars [COVERAGE_FILE=src/minlam_freeVars.c]"; \
362+
exit 1; \
363+
fi
364+
find obj -name '*.gcda' -delete
365+
find obj -name '*.gcno' -delete
366+
$(MAKE) -B MODE=coverage $(COVERAGE_TARGET)
367+
./$(COVERAGE_TARGET)
368+
mkdir -p gcov_output
369+
@COV_GCOV_CMD=""; \
370+
COMPILER_BASENAME="$$(basename "$(CCC)")"; \
371+
case "$$COMPILER_BASENAME" in \
372+
gcc*|*-gcc|g++*|*-g++) \
373+
if [ -n "$$GCOV" ]; then \
374+
COV_GCOV_CMD="$$GCOV"; \
375+
elif command -v gcov >/dev/null 2>&1; then \
376+
COV_GCOV_CMD="gcov"; \
377+
else \
378+
echo "ERROR: gcov not found. Set GCOV=<path-to-gcov>."; \
379+
exit 1; \
380+
fi; \
381+
;; \
382+
*) \
383+
if [ -n "$$LLVM_COV" ]; then \
384+
COV_GCOV_CMD="$$LLVM_COV gcov"; \
385+
elif command -v llvm-cov-18 >/dev/null 2>&1; then \
386+
COV_GCOV_CMD="llvm-cov-18 gcov"; \
387+
elif command -v llvm-cov >/dev/null 2>&1; then \
388+
COV_GCOV_CMD="llvm-cov gcov"; \
389+
else \
390+
echo "ERROR: llvm-cov not found. Set LLVM_COV=<path-to-llvm-cov>."; \
391+
exit 1; \
392+
fi; \
393+
;; \
394+
esac; \
395+
if [ -n "$(COVERAGE_FILE)" ]; then \
396+
gcda="obj/$$(basename $(COVERAGE_FILE) .c).gcda"; \
397+
if [ ! -f "$$gcda" ]; then \
398+
echo "ERROR: $$gcda not found. Run target may not have touched $(COVERAGE_FILE)."; \
399+
exit 1; \
400+
fi; \
401+
echo "Generating focused coverage for $(COVERAGE_FILE)"; \
402+
eval "$$COV_GCOV_CMD -b \"$$gcda\""; \
403+
else \
404+
echo "Generating coverage for all touched gcda files"; \
405+
for f in obj/*.gcda; do eval "$$COV_GCOV_CMD -b \"$$f\" >/dev/null"; done; \
406+
echo "Done. Set COVERAGE_FILE=src/<file>.c for focused output."; \
407+
fi; \
408+
mv ./*.gcov gcov_output/ 2>/dev/null || true
409+
336410
extracov: $(TEST_TARGETS) $(TARGET) $(UNIDIR)/unicode.db
337411
./$(TARGET) --include=fn --dump-anf --dump-ast --dump-bytecode --dump-inline --dump-lambda --dump-tpmc=NOT tests/fn/test_macros.fn 2>&1 > /dev/null
338412

docs/generated/utils.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ FileId --stIno--> inode
1212
FileId --fileName--> SCharVec
1313
SymbolList --symbol--> HashSymbol
1414
SymbolList --next--> SymbolList
15+
SymbolEnv --parent--> SymbolEnv
16+
SymbolEnv --bindings--> SymbolSet
1517
SCharVec["(SCharVec)"] --entries--> schar
1618
WCharVec["(WCharVec)"] --entries--> character
1719
StringArray["StringArray[]"] --entries--> string

0 commit comments

Comments
 (0)