Makefile 2.53 KB
Newer Older
Oscar Olsson's avatar
Oscar Olsson committed
1
## Macros
2

Oscar Olsson's avatar
Oscar Olsson committed
3
4
# Use LLVM clang if it's found.
CC = $(shell hash clang 2>/dev/null && echo clang || echo gcc)
5
CFLAGS = -g -Wall -Werror -O3  -I. -Itest -DLABCOMM_ENCODER_LINEAR_SEARCH
6
LDFLAGS = -L.
7
LDLIBS_TEST = -Tlabcomm.linkscript  -lcunit -llabcomm
Oscar Olsson's avatar
Oscar Olsson committed
8

9
OBJS= labcomm.o labcomm_dynamic_buffer_writer.o labcomm_fd_reader.o labcomm_fd_writer.o labcomm_mem_reader.o labcomm_mem_writer.o
Oscar Olsson's avatar
Oscar Olsson committed
10
11
12
LABCOMMC_PATH=../../compiler
LABCOMMC_JAR=$(LABCOMMC_PATH)/labComm.jar

13
TESTS=test_labcomm_basic_type_encoding test_labcomm test_labcomm_errors
Oscar Olsson's avatar
Oscar Olsson committed
14
15
16
17
TEST_DIR=test
TESTDATA_DIR=$(TEST_DIR)/testdata
TEST_GEN_DIR=$(TESTDATA_DIR)/gen

18
19
VPATH=$(TEST_DIR)

Oscar Olsson's avatar
Oscar Olsson committed
20
21
CREATED_DIRS=$(TEST_DIR) $(TESTDATA_DIR) $(TEST_GEN_DIR)

22
# Enable experimental objects by invoking make like `make LABCOMM_EXPERIMENTAL=true`
23
ifeq ($(LABCOMM_EXPERIMENTAL),true)
Oscar Olsson's avatar
Oscar Olsson committed
24
25
26
27
28
29
30
31
32
33
34
35
36
37
	OBJS += experimental/udp_hack.o experimental/ethaddr.o \
		experimental/labcomm_thr_reader_writer.o \
		experimental/ThrottleDrv/ethernet_drv.o \
		experimental/ThrottleDrv/throttle_drv.o \
		experimental/labcomm_udp_reader_writer.o
endif

## Targets

.PHONY: all run-test clean distclean

all: liblabcomm.a test/test_labcomm_errors

liblabcomm.a: $(OBJS)
Sven Robertz's avatar
Sven Robertz committed
38
	ar -r liblabcomm.a $^
Sven Robertz's avatar
Sven Robertz committed
39

Oscar Olsson's avatar
Oscar Olsson committed
40

Sven Robertz's avatar
Sven Robertz committed
41
42
43
labcomm.o : labcomm.c labcomm.h  labcomm_private.h

labcomm_fd_reader_writer.o : labcomm_fd_reader_writer.c  labcomm_fd_reader_writer.h  labcomm.h  labcomm_private.h
44

45
#$(TEST_DIR)/labcomm_mem_reader.o: labcomm_fd_reader_writer.c labcomm_fd_reader_writer.h
Oscar Olsson's avatar
Oscar Olsson committed
46

47
#$(TEST_DIR)/labcomm_mem_writer.o: labcomm_mem_writer.c labcomm_mem_writer.h cppmacros.h
Oscar Olsson's avatar
Oscar Olsson committed
48

49
ethaddr.o: ethaddr.c
Sven Robertz's avatar
Sven Robertz committed
50

Oscar Olsson's avatar
Oscar Olsson committed
51
52
53
$(CREATED_DIRS):
	mkdir -p $@

54
## NB! the tests need CUnit to be installed
55
56
57
58
run-test: $(TESTS:%=run-test-%)

run-test-%: $(TEST_DIR)/% | $(TEST_DIR)
	$<
Oscar Olsson's avatar
Oscar Olsson committed
59

60
61
$(TEST_DIR)/%.o: $(TEST_DIR)/%.c
	$(CC) $(CFLAGS) -o $@ -c $<
Oscar Olsson's avatar
Oscar Olsson committed
62

63
$(TEST_DIR)/%: $(TEST_DIR)/%.o liblabcomm.a
64
	$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) $(LDLIBS_TEST)
Oscar Olsson's avatar
Oscar Olsson committed
65

66
67
68
69
$(TEST_GEN_DIR)/%.c $(TEST_GEN_DIR)/%.h: $(TESTDATA_DIR)/%.lc \
					 $(LABCOMMC_JAR) | $(TEST_GEN_DIR)
	java -jar $(LABCOMMC_JAR) \
		--c=$(patsubst %.h,%.c,$@) --h=$(patsubst %.c,%.h,$@) $<
Oscar Olsson's avatar
Oscar Olsson committed
70
71
72
73
74
75
76

$(LABCOMMC_JAR):
	@echo "======Building LabComm compiler======"
	cd $(LABCOMMC_PATH); ant jar
	@echo "======End building LabComm compiler======"

%.o: %.c %.h
Sven Robertz's avatar
Sven Robertz committed
77

Sven Robertz's avatar
Sven Robertz committed
78
clean:
Oscar Olsson's avatar
Oscar Olsson committed
79
80
81
82
83
	$(RM) *.o
	$(RM) experimental/*.o experimental/ThrottleDrv/*.o
	$(RM) test/*.o
	$(RM) test/*.gch
	$(RM) test/test_labcomm_errors
84
	$(RM) test/testdata/gen/*.[cho]
Oscar Olsson's avatar
Oscar Olsson committed
85
	$(RM) $(TEST_DIR)/test_labcomm
Sven Robertz's avatar
Sven Robertz committed
86
87

distclean: clean
Oscar Olsson's avatar
Oscar Olsson committed
88
	$(RM) liblabcomm.a
89
90
91

# Extra dependencies
$(TEST_DIR)/test_labcomm:  $(TEST_GEN_DIR)/test_sample.o
92
$(TEST_DIR)/test_labcomm_private.o: labcomm_private.h