summaryrefslogtreecommitdiff
path: root/test/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'test/Makefile')
-rw-r--r--test/Makefile71
1 files changed, 71 insertions, 0 deletions
diff --git a/test/Makefile b/test/Makefile
new file mode 100644
index 0000000..0d0e203
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,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