Makefile 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521
  1. ifdef BUILDDIR
  2. # bit of a hack, but we want to make sure BUILDDIR directory structure
  3. # is correct before any commands
  4. $(if $(findstring n,$(MAKEFLAGS)),, $(shell mkdir -p \
  5. $(BUILDDIR)/ \
  6. $(BUILDDIR)/bd \
  7. $(BUILDDIR)/runners \
  8. $(BUILDDIR)/tests \
  9. $(BUILDDIR)/benches))
  10. endif
  11. BUILDDIR ?= .
  12. # overridable target/src/tools/flags/etc
  13. ifneq ($(wildcard test.c main.c),)
  14. TARGET ?= $(BUILDDIR)/lfs
  15. else
  16. TARGET ?= $(BUILDDIR)/liblfs.a
  17. endif
  18. CC ?= gcc
  19. AR ?= ar
  20. SIZE ?= size
  21. CTAGS ?= ctags
  22. NM ?= nm
  23. OBJDUMP ?= objdump
  24. VALGRIND ?= valgrind
  25. GDB ?= gdb
  26. PERF ?= perf
  27. SRC ?= $(filter-out $(wildcard *.*.c),$(wildcard *.c))
  28. OBJ := $(SRC:%.c=$(BUILDDIR)/%.o)
  29. DEP := $(SRC:%.c=$(BUILDDIR)/%.d)
  30. ASM := $(SRC:%.c=$(BUILDDIR)/%.s)
  31. CI := $(SRC:%.c=$(BUILDDIR)/%.ci)
  32. GCDA := $(SRC:%.c=$(BUILDDIR)/%.t.a.gcda)
  33. TESTS ?= $(wildcard tests/*.toml)
  34. TEST_SRC ?= $(SRC) \
  35. $(filter-out $(wildcard bd/*.*.c),$(wildcard bd/*.c)) \
  36. runners/test_runner.c
  37. TEST_RUNNER ?= $(BUILDDIR)/runners/test_runner
  38. TEST_TC := $(TESTS:%.toml=$(BUILDDIR)/%.t.c) \
  39. $(TEST_SRC:%.c=$(BUILDDIR)/%.t.c)
  40. TEST_TAC := $(TEST_TC:%.t.c=%.t.a.c)
  41. TEST_OBJ := $(TEST_TAC:%.t.a.c=%.t.a.o)
  42. TEST_DEP := $(TEST_TAC:%.t.a.c=%.t.a.d)
  43. TEST_CI := $(TEST_TAC:%.t.a.c=%.t.a.ci)
  44. TEST_GCNO := $(TEST_TAC:%.t.a.c=%.t.a.gcno)
  45. TEST_GCDA := $(TEST_TAC:%.t.a.c=%.t.a.gcda)
  46. TEST_PERF := $(TEST_RUNNER:%=%.perf)
  47. TEST_TRACE := $(TEST_RUNNER:%=%.trace)
  48. BENCHES ?= $(wildcard benches/*.toml)
  49. BENCH_SRC ?= $(SRC) \
  50. $(filter-out $(wildcard bd/*.*.c),$(wildcard bd/*.c)) \
  51. runners/bench_runner.c
  52. BENCH_RUNNER ?= $(BUILDDIR)/runners/bench_runner
  53. BENCH_BC := $(BENCHES:%.toml=$(BUILDDIR)/%.b.c) \
  54. $(BENCH_SRC:%.c=$(BUILDDIR)/%.b.c)
  55. BENCH_BAC := $(BENCH_BC:%.b.c=%.b.a.c)
  56. BENCH_OBJ := $(BENCH_BAC:%.b.a.c=%.b.a.o)
  57. BENCH_DEP := $(BENCH_BAC:%.b.a.c=%.b.a.d)
  58. BENCH_CI := $(BENCH_BAC:%.b.a.c=%.b.a.ci)
  59. BENCH_GCNO := $(BENCH_BAC:%.b.a.c=%.b.a.gcno)
  60. BENCH_GCDA := $(BENCH_BAC:%.b.a.c=%.b.a.gcda)
  61. BENCH_PERF := $(BENCH_RUNNER:%=%.perf)
  62. BENCH_TRACE := $(BENCH_RUNNER:%=%.trace)
  63. CFLAGS += -fcallgraph-info=su
  64. CFLAGS += -g3
  65. CFLAGS += -I.
  66. CFLAGS += -std=c99 -Wall -Wextra -pedantic
  67. CFLAGS += -ftrack-macro-expansion=0
  68. ifdef DEBUG
  69. CFLAGS += -O0
  70. else
  71. CFLAGS += -Os
  72. endif
  73. ifdef TRACE
  74. CFLAGS += -DLFS_YES_TRACE
  75. endif
  76. ifdef YES_COV
  77. CFLAGS += --coverage
  78. endif
  79. ifdef YES_PERF
  80. CFLAGS += -fno-omit-frame-pointer
  81. endif
  82. ifdef YES_PERFBD
  83. CFLAGS += -fno-omit-frame-pointer
  84. endif
  85. ifdef VERBOSE
  86. CODEFLAGS += -v
  87. DATAFLAGS += -v
  88. STACKFLAGS += -v
  89. STRUCTSFLAGS += -v
  90. COVFLAGS += -v
  91. PERFFLAGS += -v
  92. PERFBDFLAGS += -v
  93. endif
  94. # forward -j flag
  95. PERFFLAGS += $(filter -j%,$(MAKEFLAGS))
  96. PERFBDFLAGS += $(filter -j%,$(MAKEFLAGS))
  97. ifneq ($(NM),nm)
  98. CODEFLAGS += --nm-path="$(NM)"
  99. DATAFLAGS += --nm-path="$(NM)"
  100. endif
  101. ifneq ($(OBJDUMP),objdump)
  102. CODEFLAGS += --objdump-path="$(OBJDUMP)"
  103. DATAFLAGS += --objdump-path="$(OBJDUMP)"
  104. STRUCTSFLAGS += --objdump-path="$(OBJDUMP)"
  105. PERFFLAGS += --objdump-path="$(OBJDUMP)"
  106. PERFBDFLAGS += --objdump-path="$(OBJDUMP)"
  107. endif
  108. ifneq ($(PERF),perf)
  109. PERFFLAGS += --perf-path="$(PERF)"
  110. endif
  111. TESTFLAGS += -b
  112. BENCHFLAGS += -b
  113. # forward -j flag
  114. TESTFLAGS += $(filter -j%,$(MAKEFLAGS))
  115. BENCHFLAGS += $(filter -j%,$(MAKEFLAGS))
  116. ifdef YES_PERF
  117. TESTFLAGS += -p $(TEST_PERF)
  118. BENCHFLAGS += -p $(BENCH_PERF)
  119. endif
  120. ifdef YES_PERFBD
  121. TESTFLAGS += -t $(TEST_TRACE) --trace-backtrace --trace-freq=100
  122. endif
  123. ifndef NO_PERFBD
  124. BENCHFLAGS += -t $(BENCH_TRACE) --trace-backtrace --trace-freq=100
  125. endif
  126. ifdef VERBOSE
  127. TESTFLAGS += -v
  128. TESTCFLAGS += -v
  129. BENCHFLAGS += -v
  130. BENCHCFLAGS += -v
  131. endif
  132. ifdef EXEC
  133. TESTFLAGS += --exec="$(EXEC)"
  134. BENCHFLAGS += --exec="$(EXEC)"
  135. endif
  136. ifneq ($(GDB),gdb)
  137. TESTFLAGS += --gdb-path="$(GDB)"
  138. BENCHFLAGS += --gdb-path="$(GDB)"
  139. endif
  140. ifneq ($(VALGRIND),valgrind)
  141. TESTFLAGS += --valgrind-path="$(VALGRIND)"
  142. BENCHFLAGS += --valgrind-path="$(VALGRIND)"
  143. endif
  144. ifneq ($(PERF),perf)
  145. TESTFLAGS += --perf-path="$(PERF)"
  146. BENCHFLAGS += --perf-path="$(PERF)"
  147. endif
  148. # commands
  149. ## Build littlefs
  150. .PHONY: all build
  151. all build: $(TARGET)
  152. ## Build assembly files
  153. .PHONY: asm
  154. asm: $(ASM)
  155. ## Find the total size
  156. .PHONY: size
  157. size: $(OBJ)
  158. $(SIZE) -t $^
  159. ## Generate a ctags file
  160. .PHONY: tags
  161. tags:
  162. $(CTAGS) --totals --c-types=+p $(shell find -H -name '*.h') $(SRC)
  163. ## Show this help text
  164. .PHONY: help
  165. help:
  166. @$(strip awk '/^## / { \
  167. sub(/^## /,""); \
  168. getline rule; \
  169. while (rule ~ /^(#|\.PHONY|ifdef|ifndef)/) getline rule; \
  170. gsub(/:.*/, "", rule); \
  171. printf " "" %-25s %s\n", rule, $$0 \
  172. }' $(MAKEFILE_LIST))
  173. ## Find the per-function code size
  174. .PHONY: code
  175. code: CODEFLAGS+=-S
  176. code: $(OBJ) $(BUILDDIR)/lfs.code.csv
  177. ./scripts/code.py $(OBJ) $(CODEFLAGS)
  178. ## Compare per-function code size
  179. .PHONY: code-diff
  180. code-diff: $(OBJ)
  181. ./scripts/code.py $^ $(CODEFLAGS) -d $(BUILDDIR)/lfs.code.csv
  182. ## Find the per-function data size
  183. .PHONY: data
  184. data: DATAFLAGS+=-S
  185. data: $(OBJ) $(BUILDDIR)/lfs.data.csv
  186. ./scripts/data.py $(OBJ) $(DATAFLAGS)
  187. ## Compare per-function data size
  188. .PHONY: data-diff
  189. data-diff: $(OBJ)
  190. ./scripts/data.py $^ $(DATAFLAGS) -d $(BUILDDIR)/lfs.data.csv
  191. ## Find the per-function stack usage
  192. .PHONY: stack
  193. stack: STACKFLAGS+=-S
  194. stack: $(CI) $(BUILDDIR)/lfs.stack.csv
  195. ./scripts/stack.py $(CI) $(STACKFLAGS)
  196. ## Compare per-function stack usage
  197. .PHONY: stack-diff
  198. stack-diff: $(CI)
  199. ./scripts/stack.py $^ $(STACKFLAGS) -d $(BUILDDIR)/lfs.stack.csv
  200. ## Find function sizes
  201. .PHONY: funcs
  202. funcs: SUMMARYFLAGS+=-S
  203. funcs: \
  204. $(BUILDDIR)/lfs.code.csv \
  205. $(BUILDDIR)/lfs.data.csv \
  206. $(BUILDDIR)/lfs.stack.csv
  207. $(strip ./scripts/summary.py $^ \
  208. -bfunction \
  209. -fcode=code_size \
  210. -fdata=data_size \
  211. -fstack=stack_limit --max=stack \
  212. $(SUMMARYFLAGS))
  213. ## Compare function sizes
  214. .PHONY: funcs-diff
  215. funcs-diff: SHELL=/bin/bash
  216. funcs-diff: $(OBJ) $(CI)
  217. $(strip ./scripts/summary.py \
  218. <(./scripts/code.py $(OBJ) -q $(CODEFLAGS) -o-) \
  219. <(./scripts/data.py $(OBJ) -q $(DATAFLAGS) -o-) \
  220. <(./scripts/stack.py $(CI) -q $(STACKFLAGS) -o-) \
  221. -bfunction \
  222. -fcode=code_size \
  223. -fdata=data_size \
  224. -fstack=stack_limit --max=stack \
  225. $(SUMMARYFLAGS) -d <(./scripts/summary.py \
  226. $(BUILDDIR)/lfs.code.csv \
  227. $(BUILDDIR)/lfs.data.csv \
  228. $(BUILDDIR)/lfs.stack.csv \
  229. -q $(SUMMARYFLAGS) -o-))
  230. ## Find struct sizes
  231. .PHONY: structs
  232. structs: STRUCTSFLAGS+=-S
  233. structs: $(OBJ) $(BUILDDIR)/lfs.structs.csv
  234. ./scripts/structs.py $(OBJ) $(STRUCTSFLAGS)
  235. ## Compare struct sizes
  236. .PHONY: structs-diff
  237. structs-diff: $(OBJ)
  238. ./scripts/structs.py $^ $(STRUCTSFLAGS) -d $(BUILDDIR)/lfs.structs.csv
  239. ## Find the line/branch coverage after a test run
  240. .PHONY: cov
  241. cov: COVFLAGS+=-s
  242. cov: $(GCDA) $(BUILDDIR)/lfs.cov.csv
  243. $(strip ./scripts/cov.py $(GCDA) \
  244. $(patsubst %,-F%,$(SRC)) \
  245. $(COVFLAGS))
  246. ## Compare line/branch coverage
  247. .PHONY: cov-diff
  248. cov-diff: $(GCDA)
  249. $(strip ./scripts/cov.py $^ \
  250. $(patsubst %,-F%,$(SRC)) \
  251. $(COVFLAGS) -d $(BUILDDIR)/lfs.cov.csv)
  252. ## Find the perf results after bench run with YES_PERF
  253. .PHONY: perf
  254. perf: PERFFLAGS+=-S
  255. perf: $(BENCH_PERF) $(BUILDDIR)/lfs.perf.csv
  256. $(strip ./scripts/perf.py $(BENCH_PERF) \
  257. $(patsubst %,-F%,$(SRC)) \
  258. $(PERFFLAGS))
  259. ## Compare perf results
  260. .PHONY: perf-diff
  261. perf-diff: $(BENCH_PERF)
  262. $(strip ./scripts/perf.py $^ \
  263. $(patsubst %,-F%,$(SRC)) \
  264. $(PERFFLAGS) -d $(BUILDDIR)/lfs.perf.csv)
  265. ## Find the perfbd results after a bench run
  266. .PHONY: perfbd
  267. perfbd: PERFBDFLAGS+=-S
  268. perfbd: $(BENCH_TRACE) $(BUILDDIR)/lfs.perfbd.csv
  269. $(strip ./scripts/perfbd.py $(BENCH_RUNNER) $(BENCH_TRACE) \
  270. $(patsubst %,-F%,$(SRC)) \
  271. $(PERFBDFLAGS))
  272. ## Compare perfbd results
  273. .PHONY: perfbd-diff
  274. perfbd-diff: $(BENCH_TRACE)
  275. $(strip ./scripts/perfbd.py $(BENCH_RUNNER) $^ \
  276. $(patsubst %,-F%,$(SRC)) \
  277. $(PERFBDFLAGS) -d $(BUILDDIR)/lfs.perfbd.csv)
  278. ## Find a summary of compile-time sizes
  279. .PHONY: summary sizes
  280. summary sizes: \
  281. $(BUILDDIR)/lfs.code.csv \
  282. $(BUILDDIR)/lfs.data.csv \
  283. $(BUILDDIR)/lfs.stack.csv \
  284. $(BUILDDIR)/lfs.structs.csv
  285. $(strip ./scripts/summary.py $^ \
  286. -fcode=code_size \
  287. -fdata=data_size \
  288. -fstack=stack_limit --max=stack \
  289. -fstructs=struct_size \
  290. -Y $(SUMMARYFLAGS))
  291. ## Compare compile-time sizes
  292. .PHONY: summary-diff sizes-diff
  293. summary-diff sizes-diff: SHELL=/bin/bash
  294. summary-diff sizes-diff: $(OBJ) $(CI)
  295. $(strip ./scripts/summary.py \
  296. <(./scripts/code.py $(OBJ) -q $(CODEFLAGS) -o-) \
  297. <(./scripts/data.py $(OBJ) -q $(DATAFLAGS) -o-) \
  298. <(./scripts/stack.py $(CI) -q $(STACKFLAGS) -o-) \
  299. <(./scripts/structs.py $(OBJ) -q $(STRUCTSFLAGS) -o-) \
  300. -fcode=code_size \
  301. -fdata=data_size \
  302. -fstack=stack_limit --max=stack \
  303. -fstructs=struct_size \
  304. -Y $(SUMMARYFLAGS) -d <(./scripts/summary.py \
  305. $(BUILDDIR)/lfs.code.csv \
  306. $(BUILDDIR)/lfs.data.csv \
  307. $(BUILDDIR)/lfs.stack.csv \
  308. $(BUILDDIR)/lfs.structs.csv \
  309. -q $(SUMMARYFLAGS) -o-))
  310. ## Build the test-runner
  311. .PHONY: test-runner build-test
  312. ifndef NO_COV
  313. test-runner build-test: CFLAGS+=--coverage
  314. endif
  315. ifdef YES_PERF
  316. test-runner build-test: CFLAGS+=-fno-omit-frame-pointer
  317. endif
  318. ifdef YES_PERFBD
  319. test-runner build-test: CFLAGS+=-fno-omit-frame-pointer
  320. endif
  321. # note we remove some binary dependent files during compilation,
  322. # otherwise it's way to easy to end up with outdated results
  323. test-runner build-test: $(TEST_RUNNER)
  324. ifndef NO_COV
  325. rm -f $(TEST_GCDA)
  326. endif
  327. ifdef YES_PERF
  328. rm -f $(TEST_PERF)
  329. endif
  330. ifdef YES_PERFBD
  331. rm -f $(TEST_TRACE)
  332. endif
  333. ## Run the tests, -j enables parallel tests
  334. .PHONY: test
  335. test: test-runner
  336. ./scripts/test.py $(TEST_RUNNER) $(TESTFLAGS)
  337. ## List the tests
  338. .PHONY: test-list
  339. test-list: test-runner
  340. ./scripts/test.py $(TEST_RUNNER) $(TESTFLAGS) -l
  341. ## Build the bench-runner
  342. .PHONY: bench-runner build-bench
  343. ifdef YES_COV
  344. bench-runner build-bench: CFLAGS+=--coverage
  345. endif
  346. ifdef YES_PERF
  347. bench-runner build-bench: CFLAGS+=-fno-omit-frame-pointer
  348. endif
  349. ifndef NO_PERFBD
  350. bench-runner build-bench: CFLAGS+=-fno-omit-frame-pointer
  351. endif
  352. # note we remove some binary dependent files during compilation,
  353. # otherwise it's way to easy to end up with outdated results
  354. bench-runner build-bench: $(BENCH_RUNNER)
  355. ifdef YES_COV
  356. rm -f $(BENCH_GCDA)
  357. endif
  358. ifdef YES_PERF
  359. rm -f $(BENCH_PERF)
  360. endif
  361. ifndef NO_PERFBD
  362. rm -f $(BENCH_TRACE)
  363. endif
  364. ## Run the benchmarks, -j enables parallel benchmarks
  365. .PHONY: bench
  366. bench: bench-runner
  367. ./scripts/bench.py $(BENCH_RUNNER) $(BENCHFLAGS)
  368. ## List the benchmarks
  369. .PHONY: bench-list
  370. bench-list: bench-runner
  371. ./scripts/bench.py $(BENCH_RUNNER) $(BENCHFLAGS) -l
  372. # rules
  373. -include $(DEP)
  374. -include $(TEST_DEP)
  375. .SUFFIXES:
  376. .SECONDARY:
  377. $(BUILDDIR)/lfs: $(OBJ)
  378. $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@
  379. $(BUILDDIR)/liblfs.a: $(OBJ)
  380. $(AR) rcs $@ $^
  381. $(BUILDDIR)/lfs.code.csv: $(OBJ)
  382. ./scripts/code.py $^ -q $(CODEFLAGS) -o $@
  383. $(BUILDDIR)/lfs.data.csv: $(OBJ)
  384. ./scripts/data.py $^ -q $(DATAFLAGS) -o $@
  385. $(BUILDDIR)/lfs.stack.csv: $(CI)
  386. ./scripts/stack.py $^ -q $(STACKFLAGS) -o $@
  387. $(BUILDDIR)/lfs.structs.csv: $(OBJ)
  388. ./scripts/structs.py $^ -q $(STRUCTSFLAGS) -o $@
  389. $(BUILDDIR)/lfs.cov.csv: $(GCDA)
  390. $(strip ./scripts/cov.py $^ \
  391. $(patsubst %,-F%,$(SRC)) \
  392. -q $(COVFLAGS) -o $@)
  393. $(BUILDDIR)/lfs.perf.csv: $(BENCH_PERF)
  394. $(strip ./scripts/perf.py $^ \
  395. $(patsubst %,-F%,$(SRC)) \
  396. -q $(PERFFLAGS) -o $@)
  397. $(BUILDDIR)/lfs.perfbd.csv: $(BENCH_TRACE)
  398. $(strip ./scripts/perfbd.py $(BENCH_RUNNER) $^ \
  399. $(patsubst %,-F%,$(SRC)) \
  400. -q $(PERFBDFLAGS) -o $@)
  401. $(BUILDDIR)/runners/test_runner: $(TEST_OBJ)
  402. $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@
  403. $(BUILDDIR)/runners/bench_runner: $(BENCH_OBJ)
  404. $(CC) $(CFLAGS) $^ $(LFLAGS) -o $@
  405. # our main build rule generates .o, .d, and .ci files, the latter
  406. # used for stack analysis
  407. $(BUILDDIR)/%.o $(BUILDDIR)/%.ci: %.c
  408. $(CC) -c -MMD $(CFLAGS) $< -o $(BUILDDIR)/$*.o
  409. $(BUILDDIR)/%.s: %.c
  410. $(CC) -S $(CFLAGS) $< -o $@
  411. $(BUILDDIR)/%.a.c: %.c
  412. ./scripts/prettyasserts.py -p LFS_ASSERT $< -o $@
  413. $(BUILDDIR)/%.a.c: $(BUILDDIR)/%.c
  414. ./scripts/prettyasserts.py -p LFS_ASSERT $< -o $@
  415. $(BUILDDIR)/%.t.c: %.toml
  416. ./scripts/test.py -c $< $(TESTCFLAGS) -o $@
  417. $(BUILDDIR)/%.t.c: %.c $(TESTS)
  418. ./scripts/test.py -c $(TESTS) -s $< $(TESTCFLAGS) -o $@
  419. $(BUILDDIR)/%.b.c: %.toml
  420. ./scripts/bench.py -c $< $(BENCHCFLAGS) -o $@
  421. $(BUILDDIR)/%.b.c: %.c $(BENCHES)
  422. ./scripts/bench.py -c $(BENCHES) -s $< $(BENCHCFLAGS) -o $@
  423. ## Clean everything
  424. .PHONY: clean
  425. clean:
  426. rm -f $(BUILDDIR)/lfs
  427. rm -f $(BUILDDIR)/liblfs.a
  428. $(strip rm -f \
  429. $(BUILDDIR)/lfs.code.csv \
  430. $(BUILDDIR)/lfs.data.csv \
  431. $(BUILDDIR)/lfs.stack.csv \
  432. $(BUILDDIR)/lfs.structs.csv \
  433. $(BUILDDIR)/lfs.cov.csv \
  434. $(BUILDDIR)/lfs.perf.csv \
  435. $(BUILDDIR)/lfs.perfbd.csv)
  436. rm -f $(OBJ)
  437. rm -f $(DEP)
  438. rm -f $(ASM)
  439. rm -f $(CI)
  440. rm -f $(TEST_RUNNER)
  441. rm -f $(TEST_TC)
  442. rm -f $(TEST_TAC)
  443. rm -f $(TEST_OBJ)
  444. rm -f $(TEST_DEP)
  445. rm -f $(TEST_CI)
  446. rm -f $(TEST_GCNO)
  447. rm -f $(TEST_GCDA)
  448. rm -f $(TEST_PERF)
  449. rm -f $(TEST_TRACE)
  450. rm -f $(BENCH_RUNNER)
  451. rm -f $(BENCH_BC)
  452. rm -f $(BENCH_BAC)
  453. rm -f $(BENCH_OBJ)
  454. rm -f $(BENCH_DEP)
  455. rm -f $(BENCH_CI)
  456. rm -f $(BENCH_GCNO)
  457. rm -f $(BENCH_GCDA)
  458. rm -f $(BENCH_PERF)
  459. rm -f $(BENCH_TRACE)