summaryrefslogtreecommitdiff
path: root/test/Makefile
blob: 0d0e20338635b1619b75ced0a1897beb73e049c8 (plain)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
OBJECTS = typeinfo.o exception.o dynamic_cast.o terminate.o guard.o

TEST_OBJECTS = test_typeinfo.o test.o test_exception.o new.o test_guard.o

# Needed for building the shared library
CXXFLAGS = -fPIC
# Needed for GCC atomic ops to work on x86.
CXXFLAGS += -march=native
# This library implements exception handling, so make sure that the compiler
# emits the correct code
CXXFLAGS += -fexceptions 

# Useful flags for debugging
CXXFLAGS += -Wall -pedantic -g 

# silence warnings about LL suffix (only works with clang / recent GCC):
#CXXFLAGS += -std=c++0x

# Find the unwind.h header installed from ports
CPPFLAGS += -I/usr/local/include
LDFLAGS  += -L/usr/local/lib -L. -lpthread -fexceptions





all: test libcxxabi.so.1

PRODUCTS = test libcxxabi.so.1 system_test

test: $(TEST_OBJECTS) libcxxabi.so.1
	@echo 
	@gcc $(CPPFLAGS) $(LDFLAGS) -lcxxabi -o test $(TEST_OBJECTS)

# Fudge the dynamic library search path to include the current directory so
# that we can run the tests without having to install the .so
runtest: test
	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ./test

# Run the test program in the debugger
debug: test
	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) gdb ./test

# Run the test program with valgrind.  Make sure that the output from this has
# no memory leaks
valgrind: test
	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) valgrind --leak-check=full ./test

# Compile another version of the test program linked against libstdc++, run it,
# and ensure that both versions pass the same number of tests.  Bugs in the
# unwinding can cause some test not to be executed - this is a quick way of
# testing that the correct number pass.
compare: test
	@$(CXX) $(CXXFLAGS) $(LDFLAGS) $(TEST_OBJECTS) -lstdc++ -o system_test
	@./system_test 2>&1 | tail -1 > system_test.out
	@echo Comparing libcxxabi and libstdc++ versions...
	@LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ./test 2>&1 | tail -1 | diff system_test.out -


libcxxabi.so.1: $(OBJECTS)
	@echo Linking $@...
	@gcc -fexception -shared $(OBJECTS) $(LDFLAGS) -o libcxxabi.so.1 #-lunwind

.cc.o:
	@echo Compiling $<...
	@echo $(CXXFLAGS)
	@$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< 

clean:
	@echo Cleaning...
	@rm -f $(OBJECTS) $(PRODUCTS) $(TEST_OBJECTS) vgcore* *.core