Adds a C++ stream test and test/ C++ make rules
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 7 Mar 2013 21:24:00 +0000 (13:24 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 7 Mar 2013 21:24:00 +0000 (13:24 -0800)
The stream test is very basic; it was what I used in the previous
commit.

The test infrastructure can now handle C++ files - just drop them in the
tests/ directory and they should make just like the .c files.

GNUmakefile
tests/Makefrag
tests/cpp_streams.cc [new file with mode: 0644]

index 39ffd74..0c67d05 100644 (file)
@@ -95,6 +95,7 @@ endif
 
 # Default programs for compilation
 USER_CFLAGS += -O2 -std=gnu99
+USER_CXXFLAGS += -O2
 ifeq ($(COMPILER),IVY)
 KERN_CFLAGS += --deputy \
                --no-rc-sharc \
@@ -110,6 +111,7 @@ else
 CC         := $(GCCPREFIX)gcc 
 endif
 
+CPP        := $(GCCPREFIX)g++
 AS         := $(GCCPREFIX)as
 AR         := $(GCCPREFIX)ar
 LD         := $(GCCPREFIX)ld
@@ -164,7 +166,8 @@ GCC_ROOT := $(shell which $(GCCPREFIX)gcc | xargs dirname)/../
 tests/: tests
 tests: install-libs
        @$(MAKE) -j $(MAKE_JOBS) realtests
-realtests: $(TESTS_EXECS)
+
+realtests: $(TESTS_EXECS_C) $(TESTS_EXECS_CPP)
 # No longer automatically copying to the FS dir (deprecated)
 #      @mkdir -p fs/$(TARGET_ARCH)/tests
 #      cp -R $(OBJDIR)/$(TESTS_DIR)/* $(TOP_DIR)/fs/$(TARGET_ARCH)/tests
index 22dcbb5..f8e1e53 100644 (file)
@@ -3,24 +3,29 @@ TESTS_DIR = tests
 OBJDIRS += $(TESTS_DIR)
 
 TESTS_CFLAGS += $(USER_CFLAGS) -g
-
-ALL_TEST_FILES = $(shell ls $(TESTS_DIR)/*.c)
+TESTS_CXXFLAGS += $(USER_CXXFLAGS) -g
 
 TESTS_LDLIBS := -lpthread
 
-TESTS_SRCS := $(ALL_TEST_FILES)
+TESTS_SRCS_C = $(shell ls $(TESTS_DIR)/*.c)
+TESTS_SRCS_CPP = $(shell ls $(TESTS_DIR)/*.cc)
+
+TESTS_LDDEPENDS_C := $(TESTS_DIR)/%.c 
+TESTS_LDDEPENDS_CPP := $(TESTS_DIR)/%.cc
 
-TESTS_LDDEPENDS := $(TESTS_DIR)/%.c 
+TESTS_EXECS_C  = $(patsubst $(TESTS_DIR)/%.c, \
+                            $(OBJDIR)/$(TESTS_DIR)/%, \
+                            $(TESTS_SRCS_C))
 
-TESTS_EXECS  = $(patsubst $(TESTS_DIR)/%.c, \
-                           $(OBJDIR)/$(TESTS_DIR)/%, \
-                           $(TESTS_SRCS))
+TESTS_EXECS_CPP  = $(patsubst $(TESTS_DIR)/%.cc, \
+                            $(OBJDIR)/$(TESTS_DIR)/%, \
+                            $(TESTS_SRCS_CPP))
 
 include $(TESTS_DIR)/c3po/Makefrag
 include $(TESTS_DIR)/openmp/Makefrag
 
 STATIC := $(findstring static,$(TESTS_CFLAGS))
-$(OBJDIR)/$(TESTS_DIR)/%: $(TESTS_LDDEPENDS)
+$(OBJDIR)/$(TESTS_DIR)/%: $(TESTS_LDDEPENDS_C)
        @echo + cc [TESTS] $<
        @mkdir -p $(@D)
        $(V)$(CC) $(TESTS_CFLAGS) -o $@ $(TESTS_LDFLAGS) \
@@ -30,9 +35,17 @@ $(OBJDIR)/$(TESTS_DIR)/%: $(TESTS_LDDEPENDS)
                $(NM) -n $@ > $@.sym; \
        fi
 
-install-tests: $(TESTS_EXECS)
+# Note that we don't disassemble CPPs by default, even if they aren't static.
+# The files are pretty large regardless (9MB for a simple stream test asm).
+$(OBJDIR)/$(TESTS_DIR)/%: $(TESTS_LDDEPENDS_CPP)
+       @echo + cc [TESTS] $<
+       @mkdir -p $(@D)
+       $(V)$(CPP) $(TESTS_CXXFLAGS) -o $@ $(TESTS_LDFLAGS) \
+                 $< $(TESTS_LDLIBS)
+
+install-tests: $(TESTS_EXECS_C) $(TESTS_EXECS_CPP) 
        @echo + install [TESTS] $(FIRST_INITRAMFS_PATH)/bin/
-       $(V)for i in "$(TESTS_EXECS)"; \
+       $(V)for i in "$(TESTS_EXECS) $(TESTS_EXECS_CPP)"; \
        do \
          cp $$i $(FIRST_INITRAMFS_PATH)/bin/; \
        done;
diff --git a/tests/cpp_streams.cc b/tests/cpp_streams.cc
new file mode 100644 (file)
index 0000000..1e9f30a
--- /dev/null
@@ -0,0 +1,26 @@
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <errno.h>
+
+using namespace std;
+
+int main() {
+       string line;
+       ifstream myfile;
+       errno = 0;
+       myfile.open("hello.txt", ifstream::in);
+       if (errno)
+               perror("Unable to open (hello.txt):");
+       if (myfile.is_open()) {
+               while (myfile.good()) {
+                 getline(myfile, line);
+                 cout << line << endl;
+               }
+               myfile.close();
+               cout << "Stream test passed" << endl;
+       } else {
+               cout << "Unable to open file"; 
+       }
+       return 0;
+}