| TEST_OBJECTS = test_typeinfo.o test.o test_exception.o test_guard.o |
| |
| # 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 |
| |
| PRODUCTS = test libcxxabi.so.1 system_test |
| |
| test: $(TEST_OBJECTS) libcxxabi.so library |
| @gcc $(CPPFLAGS) $(LDFLAGS) -o test $(TEST_OBJECTS) -lcxxabi -ldl |
| |
| library: |
| @cd ../src && $(MAKE) |
| |
| libcxxabi.so: |
| @ln -sf ../src/libcxxabi.so.1 libcxxabi.so |
| |
| # 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 - |
| |
| |
| .cc.o: |
| @echo Compiling $<... |
| @$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $< |
| |
| clean: |
| @echo Cleaning... |
| @rm -f $(OBJECTS) $(PRODUCTS) $(TEST_OBJECTS) vgcore* *.core |