52
52
53
53
UNAME_S := $(shell uname -s)
54
54
CLANG_TIDY = $(SJCLANG ) /clang-tidy
55
+ CLANG_TIDY_RUNNER = $(SJCLANG ) /../share/clang/run-clang-tidy.py
55
56
56
57
# Internal build directories
57
58
BUILD_DIR = build
@@ -109,7 +110,7 @@ DISABLED_WARNINGS = -Wno-main -Wno-variadic-macros
109
110
# stdlib=libc++ : tell clang to ignore GCC standard libs
110
111
INCLUDES = -I"$(CURRENT_DIRECTORY ) /" \
111
112
-I"$(LIB_DIR ) /" \
112
- -idirafter "$(LIB_DIR ) /L0_LowLevel/SystemFiles" \
113
+ -I "$(LIB_DIR ) /L0_LowLevel/SystemFiles" \
113
114
-idirafter"$(LIB_DIR ) /third_party/" \
114
115
-idirafter"$(LIB_DIR ) /third_party/printf" \
115
116
-idirafter"$(LIB_DIR ) /third_party/FreeRTOS/Source" \
@@ -214,6 +215,7 @@ LINT_FILES = $(shell find $(FIRMWARE) \
214
215
-name "* .cpp" | \
215
216
$(FILE_EXCLUDES ) \
216
217
2> /dev/null)
218
+ LINT_FILES_PHONY = $(LINT_FILES:=.lint )
217
219
# Remove all test files from SOURCE_FILES
218
220
SOURCES = $(filter-out $(SOURCE_TESTS ) , $(SOURCE_FILES ) )
219
221
ifeq ($(MAKECMDGOALS ) , test)
@@ -283,13 +285,13 @@ help:
283
285
@echo " multi-debug - run multiarch gdb with current projects .elf file"
284
286
@echo
285
287
288
+ # Shows the help menu without any targets specified
286
289
default : help
287
- # Just shows the help menu
288
290
bootloader : build
289
291
# Build recipe
290
292
application : build
291
- build : $(DBC_DIR ) $(OBJ_DIR ) $(BIN_DIR ) $(SIZE ) $(LIST ) $(HEX ) $(BINARY )
292
- # Complete rebuild and flash installation#
293
+ build : $(DBC_DIR ) $(OBJ_DIR ) $(BIN_DIR ) $(LIST ) $(HEX ) $(BINARY ) $(SIZE )
294
+ # Complete rebuild and flash installation
293
295
cleaninstall : clean build flash
294
296
# Debug recipe to show internal list contents
295
297
show-lists :
@@ -314,102 +316,82 @@ show-lists:
314
316
@echo " =========== OMIT_LIBRARIES =============="
315
317
@echo $(OMIT_LIBRARIES )
316
318
319
+ # shell echo must be used to ensure that the \x1B makes it into the variable
320
+ # simply doing YELLOW=\x1B[33;1m works on Linux but the forward slash is omitted
321
+ # on mac.
322
+ YELLOW =$(shell echo "\x1B[33;1m")
323
+ RESET =$(shell echo "\x1B[0m")
324
+ GREEN =$(shell echo "\x1B[32;1m")
325
+
317
326
$(HEX ) : $(EXECUTABLE )
318
- @echo ' '
319
- @echo ' Invoking: Cross ARM GNU Create Flash Image'
327
+ @printf ' $(YELLOW)Generating Hex Image $(RESET) : $@ '
320
328
@$(OBJCOPY ) -O ihex " $<" " $@ "
321
- @echo ' Finished building: $@'
322
- @echo ' '
329
+ @printf ' $(GREEN)Hex Generated!$(RESET)\n'
323
330
324
331
$(BINARY ) : $(EXECUTABLE )
325
- @echo ' '
326
- @echo ' Invoking: Cross ARM GNU Create Flash Binary Image'
332
+ @printf ' $(YELLOW)Generating Binary Image $(RESET): $@ '
327
333
@$(OBJCOPY ) -O binary " $<" " $@ "
328
- @echo ' Finished building: $@'
329
- @echo ' '
334
+ @printf ' $(GREEN)Binary Generated!$(RESET)\n'
330
335
331
336
$(SIZE ) : $(EXECUTABLE )
332
337
@echo ' '
333
- @echo ' Invoking: Cross ARM GNU Print Size '
338
+ @echo ' Showing Image Size Information: '
334
339
@$(SIZEC ) --format=berkeley " $<"
335
- @echo ' Finished building: $@'
336
340
@echo ' '
337
341
338
- # --line-numbers --disassemble --source
339
342
$(LIST ) : $(EXECUTABLE )
340
- @echo ' '
341
- @echo ' Invoking: Cross ARM GNU Create Assembly Listing'
343
+ @printf ' $(YELLOW)Generating Disassembly$(RESET) : $@ '
342
344
@$(OBJDUMP ) --disassemble --all-headers --source --demangle --wide " $<" > " $@ "
343
- @echo ' Finished building: $@'
344
- @echo ' '
345
+ @printf ' $(GREEN)Disassembly Generated!$(RESET)\n'
345
346
346
347
$(EXECUTABLE ) : $(OBJECT_FILES )
347
- @echo ' Invoking: Cross ARM C++ Linker '
348
+ @printf ' $(YELLOW)Linking Executable $(RESET) : $@ '
348
349
@mkdir -p " $( dir $@ ) "
349
350
@$(CPPC ) $(LINKFLAGS ) -o " $@ " $(OBJECT_FILES )
350
- @echo ' Finished building target: $@ '
351
+ @printf ' $(GREEN)Executable Generated!$(RESET)\n '
351
352
352
353
$(OBJ_DIR ) /% .o : % .cpp
353
- @echo ' Building file: $<'
354
- @echo ' Invoking: Cross ARM C++ Compiler'
354
+ @printf ' $(YELLOW)Building file (C++) $(RESET): $< '
355
355
@mkdir -p " $( dir $@ ) "
356
356
@$(CPPC ) $(CPPFLAGS ) -std=c++17 -MF" $( @:%.o=%.d) " -MT" $( @) " -o " $@ " " $<"
357
- @echo ' Finished building: $<'
358
- @echo ' '
357
+ @printf ' $(GREEN)DONE!$(RESET)\n'
359
358
360
359
$(OBJ_DIR ) /% .o : % .c
361
- @echo ' Building file: $<'
362
- @echo ' Invoking: Cross ARM C Compiler'
360
+ @printf ' $(YELLOW)Building file ( C ) $(RESET): $< '
363
361
@mkdir -p " $( dir $@ ) "
364
362
@$(CC ) $(CFLAGS ) -std=gnu11 -MF" $( @:%.o=%.d) " -MT" $( @) " -o " $@ " " $<"
365
- @echo ' Finished building: $<'
366
- @echo ' '
363
+ @printf ' $(GREEN)DONE!$(RESET)\n'
367
364
368
365
$(OBJ_DIR ) /% .o : % .s
369
- @echo ' Building Assembly file: $<'
370
- @echo ' Invoking: Cross ARM C Compiler'
366
+ @printf ' $(YELLOW)Building file (Asm) $(RESET): $< '
371
367
@mkdir -p " $( dir $@ ) "
372
368
@$(CC ) $(CFLAGS ) -MF" $( @:%.o=%.d) " -MT" $( @) " -o " $@ " " $<"
373
- @echo ' Finished building: $<'
374
- @echo ' '
369
+ @printf ' $(GREEN)DONE!$(RESET)\n'
375
370
376
371
$(OBJ_DIR ) /% .o : % .S
377
- @echo ' Building Assembly file: $<'
378
- @echo ' Invoking: Cross ARM C Compiler'
372
+ @printf ' $(YELLOW)Building file (Asm) $(RESET): $< '
379
373
@mkdir -p " $( dir $@ ) "
380
374
@$(CC ) $(CFLAGS ) -MF" $( @:%.o=%.d) " -MT" $( @) " -o " $@ " " $<"
381
- @echo ' Finished building: $<'
382
- @echo ' '
375
+ @printf ' $(GREEN)DONE!$(RESET)\n'
383
376
384
377
$(OBJ_DIR ) /% .o : $(LIB_DIR ) /% .cpp
385
- @echo ' Building C++ file: $<'
386
- @echo ' Invoking: Cross ARM C++ Compiler'
378
+ @printf ' $(YELLOW)Building file (C++) $(RESET): $< '
387
379
@mkdir -p " $( dir $@ ) "
388
380
@$(CPPC ) $(CPPFLAGS ) -std=c++17 -MF" $( @:%.o=%.d) " -MT" $( @) " -o " $@ " " $<"
389
- @echo ' Finished building: $<'
390
- @echo ' '
381
+ @printf ' $(GREEN)DONE!$(RESET)\n'
391
382
392
383
$(OBJ_DIR ) /% .o : $(LIB_DIR ) /% .c
393
- @echo ' Building C file: $<'
394
- @echo ' Invoking: Cross ARM C Compiler'
384
+ @printf ' $(YELLOW)Building file ( C ) $(RESET): $< '
395
385
@mkdir -p " $( dir $@ ) "
396
386
@$(CC ) $(CFLAGS ) -std=gnu11 -MF" $( @:%.o=%.d) " -MT" $( @) " -o " $@ " " $<"
397
- @echo ' Finished building: $<'
398
- @echo ' '
387
+ @printf ' $(GREEN)DONE!$(RESET)\n'
399
388
400
389
$(DBC_BUILD ) :
401
390
python2.7 " $( LIB_DIR) /$( DBC_DIR) /dbc_parse.py" -i " $( LIB_DIR) /$( DBC_DIR) /243.dbc" -s $(ENTITY ) > $(DBC_BUILD )
402
391
403
- $(DBC_DIR ) :
404
- mkdir -p $(DBC_DIR )
405
-
406
- $(OBJ_DIR ) :
407
- @echo ' Creating Objects Folder: $<'
408
- mkdir -p $(OBJ_DIR )
409
-
410
- $(BIN_DIR ) :
411
- @echo ' Creating Binary Folder: $<'
412
- mkdir -p $(BIN_DIR )
392
+ $(OBJ_DIR ) $(BIN_DIR ) $(DBC_DIR ) :
393
+ @echo ' Creating Folder: $@'
394
+ mkdir -p " $@ "
413
395
414
396
clean :
415
397
rm -fR $(BUILD_DIR )
@@ -427,7 +409,6 @@ telemetry:
427
409
test : $(COVERAGE ) $(TEST_EXEC )
428
410
429
411
run-test : $(COVERAGE )
430
- # Set LD_LIBRARY_PATH to the clang
431
412
$(TEST_EXEC ) $(TEST_ARGS )
432
413
gcovr --root=" $( FIRMWARE) /" --keep --object-directory=" $( BUILD_DIR) /" \
433
414
-e " $( LIB_DIR) /newlib" \
@@ -440,36 +421,43 @@ $(COVERAGE):
440
421
mkdir -p $(COVERAGE )
441
422
442
423
$(TEST_EXEC ) : $(TEST_FRAMEWORK ) $(OBJECT_FILES )
424
+ @printf ' $(YELLOW)Linking Test Executable $(RESET) : $@ '
443
425
@mkdir -p " $( dir $@ ) "
444
- @echo ' Finished building target: $@'
445
426
@$(CPPC ) -fprofile-arcs -fPIC -fexceptions -fno-inline \
446
427
-fno-inline-small-functions -fno-default-inline \
447
428
-fkeep-inline-functions -fno-elide-constructors \
448
429
-ftest-coverage -O0 -fsanitize=address \
449
430
-std=c++17 -stdlib=libc++ -lc++ -lc++abi \
450
431
-o $(TEST_EXEC) $(OBJECT_FILES)
432
+ @printf '$(GREEN)Test Executable Generated!$(RESET)\n'
451
433
452
434
% .hpp.gch : % .hpp
453
- @echo ' Precompiling HPP file: $<'
454
- @echo ' Invoking: C Compiler'
435
+ @printf ' $(YELLOW)Precompiling file (h++) $(RESET): $< '
455
436
@mkdir -p " $( dir $@ ) "
456
437
@$(CPPC ) $(CFLAGS ) -std=c++17 -stdlib=libc++ -MF" $( @:%.o=%.d) " -MT" $( @) " \
457
438
-o " $@ " $(LIB_DIR ) /L5_Testing/testing_frameworks.hpp
458
- @echo ' Finished building: $<'
459
- @echo ' '
439
+ @printf ' $(GREEN)DONE!$(RESET)\n'
460
440
461
441
lint :
462
442
@python2.7 $(TOOLS ) /cpplint/cpplint.py $(LINT_FILES )
463
443
464
- tidy :
465
- @$(CLANG_TIDY ) -extra-arg=-std=c++17 $(LINT_FILES ) -- -std=c++17 \
466
- $(INCLUDES ) -D CLANG_TIDY=1 -D HOST_TEST=1
444
+ tidy : $(LINT_FILES_PHONY )
445
+ @printf ' $(GREEN)Tidy Evaluation Complete. Everything clear!$(RESET)\n'
446
+
447
+ % .lint : %
448
+ @printf ' $(YELLOW)Evaluating file: $(RESET)$< '
449
+ @$(CLANG_TIDY ) $(if $(or $(findstring .hpp,$< ) , $(findstring .cpp,$< ) ) , \
450
+ -extra-arg=" -std=c++17" ) " $<" -- \
451
+ -D CLANG_TIDY=1 -D HOST_TEST=1 \
452
+ -isystem" $( SJCLANG) /../include/c++/v1/" \
453
+ -stdlib=libc++ $(INCLUDES ) 2> /dev/null
454
+ @printf ' $(GREEN)DONE!$(RESET)\n'
467
455
468
456
presubmit :
469
457
@$(TOOLS ) /presubmit.sh
470
458
471
459
openocd :
472
- openocd -f $(TOOLS ) /OpenOCD /sjtwo.cfg
460
+ openocd -f $(FIRMWARE ) /debug /sjtwo.cfg
473
461
474
462
debug :
475
463
arm-none-eabi-gdb -ex " target remote :3333" $(EXECUTABLE )
0 commit comments