From 266d0d67263346a67bdc959aeb9c845145b0cafa Mon Sep 17 00:00:00 2001 From: Michael Hope Date: Sun, 28 Jun 2015 16:27:46 +0200 Subject: [PATCH 1/5] tests: make the tests build incrementally. Re-work the Makefile rules so the binary targets include $OBJECT_DIR. This lets the tests build incrementally, which makes the iterating when building new tests much faster. Signed-off-by: Michael Hope --- src/test/Makefile | 57 +++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/test/Makefile b/src/test/Makefile index b573acf77e..a874c32578 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -61,16 +61,18 @@ TESTS = \ lowpass_unittest \ baro_unittest +TEST_BINARIES = $(TESTS:%=$(OBJECT_DIR)/%) + # All Google Test headers. Usually you shouldn't change this # definition. GTEST_HEADERS = $(GTEST_DIR)/inc/gtest/*.h # House-keeping build targets. -all : $(TESTS) +all : $(TEST_BINARIES) clean : - rm -rf $(TESTS) $(OBJECT_DIR) + rm -rf $(OBJECT_DIR) # Builds gtest.a and gtest_main.a. @@ -127,16 +129,16 @@ $(OBJECT_DIR)/battery_unittest.o : \ $(GTEST_HEADERS) @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/battery_unittest.cc -o $@ + $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $< -o $@ -battery_unittest : \ +$(OBJECT_DIR)/battery_unittest : \ $(OBJECT_DIR)/sensors/battery.o \ $(OBJECT_DIR)/common/maths.o \ $(OBJECT_DIR)/battery_unittest.o \ $(OBJECT_DIR)/gtest_main.a - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - + $(CXX) $(CXX_FLAGS) $^ -o $@ + $(OBJECT_DIR)/common/encoding.o : $(USER_DIR)/common/encoding.c $(USER_DIR)/common/encoding.h $(GTEST_HEADERS) @mkdir -p $(dir $@) $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/common/encoding.c -o $@ @@ -149,7 +151,7 @@ $(OBJECT_DIR)/encoding_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/encoding_unittest.cc -o $@ -encoding_unittest : \ +$(OBJECT_DIR)/encoding_unittest : \ $(OBJECT_DIR)/common/encoding.o \ $(OBJECT_DIR)/encoding_unittest.o \ $(OBJECT_DIR)/gtest_main.a @@ -172,7 +174,7 @@ $(OBJECT_DIR)/flight_imu_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_imu_unittest.cc -o $@ -flight_imu_unittest : \ +$(OBJECT_DIR)/flight_imu_unittest : \ $(OBJECT_DIR)/flight/imu.o \ $(OBJECT_DIR)/flight/altitudehold.o \ $(OBJECT_DIR)/flight_imu_unittest.o \ @@ -188,15 +190,13 @@ $(OBJECT_DIR)/maths_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/maths_unittest.cc -o $@ -maths_unittest : \ +$(OBJECT_DIR)/maths_unittest : \ $(OBJECT_DIR)/maths_unittest.o \ $(OBJECT_DIR)/common/maths.o \ $(OBJECT_DIR)/gtest_main.a $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - - $(OBJECT_DIR)/flight/altitudehold.o : \ $(USER_DIR)/flight/altitudehold.c \ $(USER_DIR)/flight/altitudehold.h \ @@ -213,7 +213,7 @@ $(OBJECT_DIR)/altitude_hold_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/altitude_hold_unittest.cc -o $@ -altitude_hold_unittest : \ +$(OBJECT_DIR)/altitude_hold_unittest : \ $(OBJECT_DIR)/flight/altitudehold.o \ $(OBJECT_DIR)/altitude_hold_unittest.o \ $(OBJECT_DIR)/gtest_main.a @@ -237,7 +237,7 @@ $(OBJECT_DIR)/gps_conversion_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/gps_conversion_unittest.cc -o $@ -gps_conversion_unittest : \ +$(OBJECT_DIR)/gps_conversion_unittest : \ $(OBJECT_DIR)/flight/gps_conversion.o \ $(OBJECT_DIR)/gps_conversion_unittest.o \ $(OBJECT_DIR)/gtest_main.a @@ -258,11 +258,11 @@ $(OBJECT_DIR)/telemetry_hott_unittest.o : \ $(TEST_DIR)/telemetry_hott_unittest.cc \ $(USER_DIR)/telemetry/hott.h \ $(GTEST_HEADERS) - + @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/telemetry_hott_unittest.cc -o $@ -telemetry_hott_unittest : \ +$(OBJECT_DIR)/telemetry_hott_unittest : \ $(OBJECT_DIR)/telemetry/hott.o \ $(OBJECT_DIR)/telemetry_hott_unittest.o \ $(OBJECT_DIR)/flight/gps_conversion.o \ @@ -288,7 +288,7 @@ $(OBJECT_DIR)/rc_controls_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/rc_controls_unittest.cc -o $@ -rc_controls_unittest : \ +$(OBJECT_DIR)/rc_controls_unittest : \ $(OBJECT_DIR)/common/maths.o \ $(OBJECT_DIR)/io/rc_controls.o \ $(OBJECT_DIR)/rc_controls_unittest.o \ @@ -301,7 +301,7 @@ $(OBJECT_DIR)/io/ledstrip.o : \ $(USER_DIR)/io/ledstrip.c \ $(USER_DIR)/io/ledstrip.h \ $(GTEST_HEADERS) - + @mkdir -p $(dir $@) $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/io/ledstrip.c -o $@ @@ -313,7 +313,7 @@ $(OBJECT_DIR)/ledstrip_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/ledstrip_unittest.cc -o $@ -ledstrip_unittest : \ +$(OBJECT_DIR)/ledstrip_unittest : \ $(OBJECT_DIR)/io/ledstrip.o \ $(OBJECT_DIR)/ledstrip_unittest.o \ $(OBJECT_DIR)/gtest_main.a @@ -338,7 +338,7 @@ $(OBJECT_DIR)/ws2811_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/ws2811_unittest.cc -o $@ -ws2811_unittest : \ +$(OBJECT_DIR)/ws2811_unittest : \ $(OBJECT_DIR)/drivers/light_ws2811strip.o \ $(OBJECT_DIR)/ws2811_unittest.o \ $(OBJECT_DIR)/gtest_main.a @@ -362,7 +362,7 @@ $(OBJECT_DIR)/lowpass_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/lowpass_unittest.cc -o $@ -lowpass_unittest : \ +$(OBJECT_DIR)/lowpass_unittest : \ $(OBJECT_DIR)/flight/lowpass.o \ $(OBJECT_DIR)/lowpass_unittest.o \ $(OBJECT_DIR)/gtest_main.a @@ -385,7 +385,7 @@ $(OBJECT_DIR)/flight_mixer_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_mixer_unittest.cc -o $@ -flight_mixer_unittest : \ +$(OBJECT_DIR)/flight_mixer_unittest : \ $(OBJECT_DIR)/flight/mixer.o \ $(OBJECT_DIR)/flight_mixer_unittest.o \ $(OBJECT_DIR)/common/maths.o \ @@ -409,7 +409,7 @@ $(OBJECT_DIR)/flight_failsafe_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_failsafe_unittest.cc -o $@ -flight_failsafe_unittest : \ +$(OBJECT_DIR)/flight_failsafe_unittest : \ $(OBJECT_DIR)/flight/failsafe.o \ $(OBJECT_DIR)/flight_failsafe_unittest.o \ $(OBJECT_DIR)/common/maths.o \ @@ -433,7 +433,7 @@ $(OBJECT_DIR)/io_serial_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/io_serial_unittest.cc -o $@ -io_serial_unittest : \ +$(OBJECT_DIR)/io_serial_unittest : \ $(OBJECT_DIR)/io/serial.o \ $(OBJECT_DIR)/io_serial_unittest.o \ $(OBJECT_DIR)/gtest_main.a @@ -456,7 +456,7 @@ $(OBJECT_DIR)/rx_rx_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/rx_rx_unittest.cc -o $@ -rx_rx_unittest : \ +$(OBJECT_DIR)/rx_rx_unittest : \ $(OBJECT_DIR)/rx/rx.o \ $(OBJECT_DIR)/rx_rx_unittest.o \ $(OBJECT_DIR)/common/maths.o \ @@ -480,15 +480,14 @@ $(OBJECT_DIR)/baro_unittest.o : \ @mkdir -p $(dir $@) $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/baro_unittest.cc -o $@ -baro_unittest : \ +$(OBJECT_DIR)/baro_unittest : \ $(OBJECT_DIR)/drivers/barometer_ms5611.o \ $(OBJECT_DIR)/baro_unittest.o \ $(OBJECT_DIR)/gtest_main.a $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ -test: $(TESTS) - set -e && for test in $(TESTS) ; do \ - $(OBJECT_DIR)/$$test; \ - done +test: $(TESTS:%=test-%) +test-%: $(OBJECT_DIR)/% + $< From 31f13e3d9c7ee3389a2515746bc241fb145a3c2e Mon Sep 17 00:00:00 2001 From: Michael Hope Date: Sun, 28 Jun 2015 16:53:41 +0200 Subject: [PATCH 2/5] tests: simplify the build config by building as a library. Build Cleanflight into a library instead of explicitly calling out the object file and any dependencies. Signed-off-by: Michael Hope --- src/test/Makefile | 207 +++++++++------------------------------------- 1 file changed, 41 insertions(+), 166 deletions(-) diff --git a/src/test/Makefile b/src/test/Makefile index a874c32578..935d472ae9 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -110,18 +110,34 @@ TEST_INCLUDE_DIRS := $(TEST_DIR) \ TEST_CFLAGS = $(addprefix -I,$(TEST_INCLUDE_DIRS)) -$(OBJECT_DIR)/common/maths.o : \ - $(USER_DIR)/common/maths.c \ - $(USER_DIR)/common/maths.h \ - $(GTEST_HEADERS) +LIBCLEANFLIGHT_SRC = \ + common/encoding.c \ + common/maths.c \ + drivers/barometer_ms5611.c \ + drivers/light_ws2811strip.c \ + flight/altitudehold.c \ + flight/failsafe.c \ + flight/gps_conversion.c \ + flight/imu.c \ + flight/lowpass.c \ + flight/mixer.c \ + io/ledstrip.c \ + io/rc_controls.c \ + io/serial.c \ + rx/rx.c \ + sensors/battery.c \ + telemetry/hott.c - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/common/maths.c -o $@ +LIBCLEANFLIGHT_OBJ = $(LIBCLEANFLIGHT_SRC:%.c=$(OBJECT_DIR)/%.o) +LIBS = $(OBJECT_DIR)/libcleanflight.a $(OBJECT_DIR)/gtest_main.a -$(OBJECT_DIR)/sensors/battery.o : $(USER_DIR)/sensors/battery.c $(USER_DIR)/sensors/battery.h $(GTEST_HEADERS) - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/sensors/battery.c -o $@ +$(OBJECT_DIR)/libcleanflight.a: $(LIBCLEANFLIGHT_OBJ) + $(AR) $(ARFLAGS) $@ $^ + +$(OBJECT_DIR)/%.o: $(USER_DIR)/%.c + mkdir -p $(@D) + $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $< -o $@ $(OBJECT_DIR)/battery_unittest.o : \ $(TEST_DIR)/battery_unittest.cc \ @@ -132,17 +148,11 @@ $(OBJECT_DIR)/battery_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $< -o $@ $(OBJECT_DIR)/battery_unittest : \ - $(OBJECT_DIR)/sensors/battery.o \ - $(OBJECT_DIR)/common/maths.o \ $(OBJECT_DIR)/battery_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $@ -$(OBJECT_DIR)/common/encoding.o : $(USER_DIR)/common/encoding.c $(USER_DIR)/common/encoding.h $(GTEST_HEADERS) - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/common/encoding.c -o $@ - $(OBJECT_DIR)/encoding_unittest.o : \ $(TEST_DIR)/encoding_unittest.cc \ $(USER_DIR)/common/encoding.h \ @@ -152,20 +162,11 @@ $(OBJECT_DIR)/encoding_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/encoding_unittest.cc -o $@ $(OBJECT_DIR)/encoding_unittest : \ - $(OBJECT_DIR)/common/encoding.o \ $(OBJECT_DIR)/encoding_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ -$(OBJECT_DIR)/flight/imu.o : \ - $(USER_DIR)/flight/imu.c \ - $(USER_DIR)/flight/imu.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/flight/imu.c -o $@ - $(OBJECT_DIR)/flight_imu_unittest.o : \ $(TEST_DIR)/flight_imu_unittest.cc \ $(USER_DIR)/flight/imu.h \ @@ -175,11 +176,8 @@ $(OBJECT_DIR)/flight_imu_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_imu_unittest.cc -o $@ $(OBJECT_DIR)/flight_imu_unittest : \ - $(OBJECT_DIR)/flight/imu.o \ - $(OBJECT_DIR)/flight/altitudehold.o \ $(OBJECT_DIR)/flight_imu_unittest.o \ - $(OBJECT_DIR)/common/maths.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ @@ -192,19 +190,10 @@ $(OBJECT_DIR)/maths_unittest.o : \ $(OBJECT_DIR)/maths_unittest : \ $(OBJECT_DIR)/maths_unittest.o \ - $(OBJECT_DIR)/common/maths.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ -$(OBJECT_DIR)/flight/altitudehold.o : \ - $(USER_DIR)/flight/altitudehold.c \ - $(USER_DIR)/flight/altitudehold.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/flight/altitudehold.c -o $@ - $(OBJECT_DIR)/altitude_hold_unittest.o : \ $(TEST_DIR)/altitude_hold_unittest.cc \ $(USER_DIR)/flight/altitudehold.h \ @@ -214,21 +203,11 @@ $(OBJECT_DIR)/altitude_hold_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/altitude_hold_unittest.cc -o $@ $(OBJECT_DIR)/altitude_hold_unittest : \ - $(OBJECT_DIR)/flight/altitudehold.o \ $(OBJECT_DIR)/altitude_hold_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/flight/gps_conversion.o : \ - $(USER_DIR)/flight/gps_conversion.c \ - $(USER_DIR)/flight/gps_conversion.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/flight/gps_conversion.c -o $@ - $(OBJECT_DIR)/gps_conversion_unittest.o : \ $(TEST_DIR)/gps_conversion_unittest.cc \ $(USER_DIR)/flight/gps_conversion.h \ @@ -238,22 +217,11 @@ $(OBJECT_DIR)/gps_conversion_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/gps_conversion_unittest.cc -o $@ $(OBJECT_DIR)/gps_conversion_unittest : \ - $(OBJECT_DIR)/flight/gps_conversion.o \ $(OBJECT_DIR)/gps_conversion_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - - -$(OBJECT_DIR)/telemetry/hott.o : \ - $(USER_DIR)/telemetry/hott.c \ - $(USER_DIR)/telemetry/hott.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/telemetry/hott.c -o $@ - $(OBJECT_DIR)/telemetry_hott_unittest.o : \ $(TEST_DIR)/telemetry_hott_unittest.cc \ $(USER_DIR)/telemetry/hott.h \ @@ -263,23 +231,11 @@ $(OBJECT_DIR)/telemetry_hott_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/telemetry_hott_unittest.cc -o $@ $(OBJECT_DIR)/telemetry_hott_unittest : \ - $(OBJECT_DIR)/telemetry/hott.o \ $(OBJECT_DIR)/telemetry_hott_unittest.o \ - $(OBJECT_DIR)/flight/gps_conversion.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - - -$(OBJECT_DIR)/io/rc_controls.o : \ - $(USER_DIR)/io/rc_controls.c \ - $(USER_DIR)/io/rc_controls.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/io/rc_controls.c -o $@ - $(OBJECT_DIR)/rc_controls_unittest.o : \ $(TEST_DIR)/rc_controls_unittest.cc \ $(USER_DIR)/io/rc_controls.h \ @@ -289,22 +245,11 @@ $(OBJECT_DIR)/rc_controls_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/rc_controls_unittest.cc -o $@ $(OBJECT_DIR)/rc_controls_unittest : \ - $(OBJECT_DIR)/common/maths.o \ - $(OBJECT_DIR)/io/rc_controls.o \ $(OBJECT_DIR)/rc_controls_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/io/ledstrip.o : \ - $(USER_DIR)/io/ledstrip.c \ - $(USER_DIR)/io/ledstrip.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/io/ledstrip.c -o $@ - $(OBJECT_DIR)/ledstrip_unittest.o : \ $(TEST_DIR)/ledstrip_unittest.cc \ $(USER_DIR)/io/ledstrip.h \ @@ -314,22 +259,11 @@ $(OBJECT_DIR)/ledstrip_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/ledstrip_unittest.cc -o $@ $(OBJECT_DIR)/ledstrip_unittest : \ - $(OBJECT_DIR)/io/ledstrip.o \ $(OBJECT_DIR)/ledstrip_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - - -$(OBJECT_DIR)/drivers/light_ws2811strip.o : \ - $(USER_DIR)/drivers/light_ws2811strip.c \ - $(USER_DIR)/drivers/light_ws2811strip.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/drivers/light_ws2811strip.c -o $@ - $(OBJECT_DIR)/ws2811_unittest.o : \ $(TEST_DIR)/ws2811_unittest.cc \ $(USER_DIR)/drivers/light_ws2811strip.h \ @@ -339,21 +273,11 @@ $(OBJECT_DIR)/ws2811_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/ws2811_unittest.cc -o $@ $(OBJECT_DIR)/ws2811_unittest : \ - $(OBJECT_DIR)/drivers/light_ws2811strip.o \ $(OBJECT_DIR)/ws2811_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/flight/lowpass.o : \ - $(USER_DIR)/flight/lowpass.c \ - $(USER_DIR)/flight/lowpass.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/flight/lowpass.c -o $@ - $(OBJECT_DIR)/lowpass_unittest.o : \ $(TEST_DIR)/lowpass_unittest.cc \ $(USER_DIR)/flight/lowpass.h \ @@ -363,20 +287,11 @@ $(OBJECT_DIR)/lowpass_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/lowpass_unittest.cc -o $@ $(OBJECT_DIR)/lowpass_unittest : \ - $(OBJECT_DIR)/flight/lowpass.o \ $(OBJECT_DIR)/lowpass_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ -$(OBJECT_DIR)/flight/mixer.o : \ - $(USER_DIR)/flight/mixer.c \ - $(USER_DIR)/flight/mixer.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/flight/mixer.c -o $@ - $(OBJECT_DIR)/flight_mixer_unittest.o : \ $(TEST_DIR)/flight_mixer_unittest.cc \ $(USER_DIR)/flight/mixer.h \ @@ -386,21 +301,11 @@ $(OBJECT_DIR)/flight_mixer_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_mixer_unittest.cc -o $@ $(OBJECT_DIR)/flight_mixer_unittest : \ - $(OBJECT_DIR)/flight/mixer.o \ $(OBJECT_DIR)/flight_mixer_unittest.o \ - $(OBJECT_DIR)/common/maths.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ -$(OBJECT_DIR)/flight/failsafe.o : \ - $(USER_DIR)/flight/failsafe.c \ - $(USER_DIR)/flight/failsafe.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/flight/failsafe.c -o $@ - $(OBJECT_DIR)/flight_failsafe_unittest.o : \ $(TEST_DIR)/flight_failsafe_unittest.cc \ $(USER_DIR)/flight/failsafe.h \ @@ -410,21 +315,11 @@ $(OBJECT_DIR)/flight_failsafe_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_failsafe_unittest.cc -o $@ $(OBJECT_DIR)/flight_failsafe_unittest : \ - $(OBJECT_DIR)/flight/failsafe.o \ $(OBJECT_DIR)/flight_failsafe_unittest.o \ - $(OBJECT_DIR)/common/maths.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ -$(OBJECT_DIR)/io/serial.o : \ - $(USER_DIR)/io/serial.c \ - $(USER_DIR)/io/serial.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/io/serial.c -o $@ - $(OBJECT_DIR)/io_serial_unittest.o : \ $(TEST_DIR)/io_serial_unittest.cc \ $(USER_DIR)/io/serial.h \ @@ -434,20 +329,11 @@ $(OBJECT_DIR)/io_serial_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/io_serial_unittest.cc -o $@ $(OBJECT_DIR)/io_serial_unittest : \ - $(OBJECT_DIR)/io/serial.o \ $(OBJECT_DIR)/io_serial_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ -$(OBJECT_DIR)/rx/rx.o : \ - $(USER_DIR)/rx/rx.c \ - $(USER_DIR)/rx/rx.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/rx/rx.c -o $@ - $(OBJECT_DIR)/rx_rx_unittest.o : \ $(TEST_DIR)/rx_rx_unittest.cc \ $(USER_DIR)/rx/rx.h \ @@ -457,21 +343,11 @@ $(OBJECT_DIR)/rx_rx_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/rx_rx_unittest.cc -o $@ $(OBJECT_DIR)/rx_rx_unittest : \ - $(OBJECT_DIR)/rx/rx.o \ $(OBJECT_DIR)/rx_rx_unittest.o \ - $(OBJECT_DIR)/common/maths.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ -$(OBJECT_DIR)/drivers/barometer_ms5611.o : \ - $(USER_DIR)/drivers/barometer_ms5611.c \ - $(USER_DIR)/drivers/barometer_ms5611.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $(USER_DIR)/drivers/barometer_ms5611.c -o $@ - $(OBJECT_DIR)/baro_unittest.o : \ $(TEST_DIR)/baro_unittest.cc \ $(USER_DIR)/drivers/barometer_ms5611.h \ @@ -481,9 +357,8 @@ $(OBJECT_DIR)/baro_unittest.o : \ $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/baro_unittest.cc -o $@ $(OBJECT_DIR)/baro_unittest : \ - $(OBJECT_DIR)/drivers/barometer_ms5611.o \ $(OBJECT_DIR)/baro_unittest.o \ - $(OBJECT_DIR)/gtest_main.a + $(LIBS) $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ From b8a9df2aa447c36ccc7f58666d695f9341fe6a88 Mon Sep 17 00:00:00 2001 From: Michael Hope Date: Sun, 28 Jun 2015 17:00:32 +0200 Subject: [PATCH 3/5] tests: automatically build dependencies. Signed-off-by: Michael Hope --- src/test/Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/test/Makefile b/src/test/Makefile index 935d472ae9..041e56b211 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -31,7 +31,8 @@ COMMON_FLAGS = \ -ggdb3 \ -O0 \ -DUNIT_TEST \ - -isystem $(GTEST_DIR)/inc + -isystem $(GTEST_DIR)/inc \ + -MMD -MP # Flags passed to the C compiler. C_FLAGS = $(COMMON_FLAGS) \ @@ -130,6 +131,9 @@ LIBCLEANFLIGHT_SRC = \ LIBCLEANFLIGHT_OBJ = $(LIBCLEANFLIGHT_SRC:%.c=$(OBJECT_DIR)/%.o) +DEPS = $(LIBCLEANFLIGHT_OBJ:%.o=%.d) \ + $(TEST_BINARIES:%=%.d) + LIBS = $(OBJECT_DIR)/libcleanflight.a $(OBJECT_DIR)/gtest_main.a $(OBJECT_DIR)/libcleanflight.a: $(LIBCLEANFLIGHT_OBJ) @@ -366,3 +370,5 @@ test: $(TESTS:%=test-%) test-%: $(OBJECT_DIR)/% $< + +-include $(DEPS) From cf8d0cf572db7460c5a0122f77a1e67efc679a0a Mon Sep 17 00:00:00 2001 From: Michael Hope Date: Sun, 28 Jun 2015 17:14:09 +0200 Subject: [PATCH 4/5] tests: change the explicit rules for implicit. Now that the other rules are refactored, use a generic rule for all tests instead of having a copy-and-paste section for each. Signed-off-by: Michael Hope --- src/test/Makefile | 227 +--------------------------------------------- 1 file changed, 5 insertions(+), 222 deletions(-) diff --git a/src/test/Makefile b/src/test/Makefile index 041e56b211..fcb6aa7456 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -139,232 +139,15 @@ LIBS = $(OBJECT_DIR)/libcleanflight.a $(OBJECT_DIR)/gtest_main.a $(OBJECT_DIR)/libcleanflight.a: $(LIBCLEANFLIGHT_OBJ) $(AR) $(ARFLAGS) $@ $^ +# Build a module from the flight software. $(OBJECT_DIR)/%.o: $(USER_DIR)/%.c mkdir -p $(@D) $(CC) $(C_FLAGS) $(TEST_CFLAGS) -c $< -o $@ -$(OBJECT_DIR)/battery_unittest.o : \ - $(TEST_DIR)/battery_unittest.cc \ - $(USER_DIR)/sensors/battery.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $< -o $@ - -$(OBJECT_DIR)/battery_unittest : \ - $(OBJECT_DIR)/battery_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $@ - -$(OBJECT_DIR)/encoding_unittest.o : \ - $(TEST_DIR)/encoding_unittest.cc \ - $(USER_DIR)/common/encoding.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/encoding_unittest.cc -o $@ - -$(OBJECT_DIR)/encoding_unittest : \ - $(OBJECT_DIR)/encoding_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/flight_imu_unittest.o : \ - $(TEST_DIR)/flight_imu_unittest.cc \ - $(USER_DIR)/flight/imu.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_imu_unittest.cc -o $@ - -$(OBJECT_DIR)/flight_imu_unittest : \ - $(OBJECT_DIR)/flight_imu_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/maths_unittest.o : \ - $(TEST_DIR)/maths_unittest.cc \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/maths_unittest.cc -o $@ - -$(OBJECT_DIR)/maths_unittest : \ - $(OBJECT_DIR)/maths_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/altitude_hold_unittest.o : \ - $(TEST_DIR)/altitude_hold_unittest.cc \ - $(USER_DIR)/flight/altitudehold.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/altitude_hold_unittest.cc -o $@ - -$(OBJECT_DIR)/altitude_hold_unittest : \ - $(OBJECT_DIR)/altitude_hold_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/gps_conversion_unittest.o : \ - $(TEST_DIR)/gps_conversion_unittest.cc \ - $(USER_DIR)/flight/gps_conversion.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/gps_conversion_unittest.cc -o $@ - -$(OBJECT_DIR)/gps_conversion_unittest : \ - $(OBJECT_DIR)/gps_conversion_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/telemetry_hott_unittest.o : \ - $(TEST_DIR)/telemetry_hott_unittest.cc \ - $(USER_DIR)/telemetry/hott.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/telemetry_hott_unittest.cc -o $@ - -$(OBJECT_DIR)/telemetry_hott_unittest : \ - $(OBJECT_DIR)/telemetry_hott_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/rc_controls_unittest.o : \ - $(TEST_DIR)/rc_controls_unittest.cc \ - $(USER_DIR)/io/rc_controls.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/rc_controls_unittest.cc -o $@ - -$(OBJECT_DIR)/rc_controls_unittest : \ - $(OBJECT_DIR)/rc_controls_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/ledstrip_unittest.o : \ - $(TEST_DIR)/ledstrip_unittest.cc \ - $(USER_DIR)/io/ledstrip.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/ledstrip_unittest.cc -o $@ - -$(OBJECT_DIR)/ledstrip_unittest : \ - $(OBJECT_DIR)/ledstrip_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/ws2811_unittest.o : \ - $(TEST_DIR)/ws2811_unittest.cc \ - $(USER_DIR)/drivers/light_ws2811strip.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/ws2811_unittest.cc -o $@ - -$(OBJECT_DIR)/ws2811_unittest : \ - $(OBJECT_DIR)/ws2811_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/lowpass_unittest.o : \ - $(TEST_DIR)/lowpass_unittest.cc \ - $(USER_DIR)/flight/lowpass.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/lowpass_unittest.cc -o $@ - -$(OBJECT_DIR)/lowpass_unittest : \ - $(OBJECT_DIR)/lowpass_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/flight_mixer_unittest.o : \ - $(TEST_DIR)/flight_mixer_unittest.cc \ - $(USER_DIR)/flight/mixer.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_mixer_unittest.cc -o $@ - -$(OBJECT_DIR)/flight_mixer_unittest : \ - $(OBJECT_DIR)/flight_mixer_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/flight_failsafe_unittest.o : \ - $(TEST_DIR)/flight_failsafe_unittest.cc \ - $(USER_DIR)/flight/failsafe.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/flight_failsafe_unittest.cc -o $@ - -$(OBJECT_DIR)/flight_failsafe_unittest : \ - $(OBJECT_DIR)/flight_failsafe_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/io_serial_unittest.o : \ - $(TEST_DIR)/io_serial_unittest.cc \ - $(USER_DIR)/io/serial.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/io_serial_unittest.cc -o $@ - -$(OBJECT_DIR)/io_serial_unittest : \ - $(OBJECT_DIR)/io_serial_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/rx_rx_unittest.o : \ - $(TEST_DIR)/rx_rx_unittest.cc \ - $(USER_DIR)/rx/rx.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/rx_rx_unittest.cc -o $@ - -$(OBJECT_DIR)/rx_rx_unittest : \ - $(OBJECT_DIR)/rx_rx_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ - -$(OBJECT_DIR)/baro_unittest.o : \ - $(TEST_DIR)/baro_unittest.cc \ - $(USER_DIR)/drivers/barometer_ms5611.h \ - $(GTEST_HEADERS) - - @mkdir -p $(dir $@) - $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -c $(TEST_DIR)/baro_unittest.cc -o $@ - -$(OBJECT_DIR)/baro_unittest : \ - $(OBJECT_DIR)/baro_unittest.o \ - $(LIBS) - - $(CXX) $(CXX_FLAGS) $^ -o $(OBJECT_DIR)/$@ +# Build the unit test executable. +$(OBJECT_DIR)/%: $(TEST_DIR)/%.cc $(LIBS) + @mkdir -p $(@D) + $(CXX) $(CXX_FLAGS) $(TEST_CFLAGS) -o $@ $< $(LIBS) test: $(TESTS:%=test-%) From 6b35964c34d90b4d2e9cedbc6eecfa96da3acc5d Mon Sep 17 00:00:00 2001 From: Michael Hope Date: Sun, 28 Jun 2015 17:17:33 +0200 Subject: [PATCH 5/5] tests: automatically collect the list of tests. Use a wildcard instead of an explicit list. Signed-off-by: Michael Hope --- src/test/Makefile | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/src/test/Makefile b/src/test/Makefile index fcb6aa7456..8fb459a3fe 100644 --- a/src/test/Makefile +++ b/src/test/Makefile @@ -42,26 +42,9 @@ C_FLAGS = $(COMMON_FLAGS) \ CXX_FLAGS = $(COMMON_FLAGS) \ -std=gnu++11 -# All tests produced by this Makefile. Remember to add new tests you -# created to the list. -TESTS = \ - battery_unittest \ - flight_imu_unittest \ - flight_mixer_unittest \ - flight_failsafe_unittest \ - altitude_hold_unittest \ - maths_unittest \ - gps_conversion_unittest \ - telemetry_hott_unittest \ - rc_controls_unittest \ - rx_rx_unittest \ - ledstrip_unittest \ - ws2811_unittest \ - encoding_unittest \ - io_serial_unittest \ - lowpass_unittest \ - baro_unittest - +# Gather up all of the tests. +TEST_SRC = $(sort $(wildcard $(TEST_DIR)/*.cc)) +TESTS = $(TEST_SRC:$(TEST_DIR)/%.cc=%) TEST_BINARIES = $(TESTS:%=$(OBJECT_DIR)/%) # All Google Test headers. Usually you shouldn't change this