1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
BUILD_DIR = ../../build
INCLUDE_DIRS = -I "../../" -I "./src/"
BUILD_DIR_FAKE = $(BUILD_DIR)/weak_linking
CC = gcc
WEAK_FLAGS=-Wall -DFFF_GCC_FUNCTION_ATTRIBUTES="__attribute__((weak))"
$(BUILD_DIR_FAKE)/%.o: test/%.c
@echo "Compiling "$@
$(CC) $(WEAK_FLAGS) $(INCLUDE_DIRS) -g -O0 -c $< -o $@
FAKE_OBJECTS = $(BUILD_DIR_FAKE)/display.fake.o $(BUILD_DIR_FAKE)/sensor.fake.o $(BUILD_DIR_FAKE)/sensor.fake.o $(BUILD_DIR_FAKE)/error.fake.o $(BUILD_DIR_FAKE)/bus.fake.o $(BUILD_DIR_FAKE)/test_common.o
TEST_BINARIES = $(BUILD_DIR_FAKE)/test_main $(BUILD_DIR_FAKE)/test_display $(BUILD_DIR_FAKE)/test_sensor
mkdir:
mkdir -p $(BUILD_DIR_FAKE)/
clean:
rm -rf $(BUILD_DIR_FAKE)/
$(BUILD_DIR_FAKE)/libfakes.a: $(FAKE_OBJECTS)
ar r $@ $^
# First case where we need __weak__ linking:
# - If we have the build objects (for some reason) in order where the fake object comes first.
$(BUILD_DIR_FAKE)/test_display: ./test/display.test.c $(BUILD_DIR_FAKE)/libfakes.a ./src/display.c
$(CC) $(WEAK_FLAGS) $(INCLUDE_DIRS) -o $@ $^
# Second case where we need weak linking:
# - If we use an object from the fake object -> gcc linker will include it.
$(BUILD_DIR_FAKE)/test_sensor: ./test/sensor.test.c ./src/sensor.c $(BUILD_DIR_FAKE)/libfakes.a
$(CC) $(WEAK_FLAGS) $(INCLUDE_DIRS) -o $@ $^
# Third case where we need weak linking:
# - We want to fake one function but not all.
$(BUILD_DIR_FAKE)/test_main: ./test/main.test.c ./src/main.c $(BUILD_DIR_FAKE)/libfakes.a
$(CC) $(WEAK_FLAGS) $(INCLUDE_DIRS) -o $@ $^
all: mkdir $(TEST_BINARIES)
|