File: Makefile

package info (click to toggle)
fff 1.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,968 kB
  • sloc: cpp: 18,525; ansic: 6,971; ruby: 534; makefile: 223; sh: 17
file content (39 lines) | stat: -rw-r--r-- 1,546 bytes parent folder | download
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)