m5: Expose m5 pseudo-instructions to C/C++ via a static library
authorJames Clarkson <james.clarkson@arm.com>
Tue, 9 Oct 2012 11:58:25 +0000 (12:58 +0100)
committerJames Clarkson <james.clarkson@arm.com>
Tue, 9 Oct 2012 11:58:25 +0000 (12:58 +0100)
Updated the util/m5/Makefile.arm so that m5op_arm.S is used to create
a static library - libm5.a. Allowing users to insert m5
psuedo-instructions into their applications for fine-grained
checkpointing, switching cpus or dumping statistics. e.g.

#include <m5op.h>

void foo(){
...
m5_reset_stats(<delay>,<period>)
m5_work_begin(<workid>,<threadid>);
...
m5_work_end(<workid>,<threadid>);
m5_dump_stats(<delay>,<period>);
}

util/m5/Makefile.arm
util/m5/Makefile.thumb
util/m5/m5op.h

index 0e05b028ac338b5d0acee3550a0a0e67d0988e09..a90dc101103fc05340618ed5f170f22628cd9629 100644 (file)
@@ -46,6 +46,7 @@ endif
 CC=$(CROSS_COMPILE)gcc
 AS=$(CROSS_COMPILE)as
 LD=$(CROSS_COMPILE)ld
+AR=$(CROSS_COMPILE)ar
 
 JC=javac
 JH=javah
@@ -54,11 +55,13 @@ JR=jar
 #JDK_PATH=/path/to/jdk/version_number
 
 CFLAGS=-O2 -I $(JDK_PATH)/include/ -I $(JDK_PATH)/include/linux
+LDFLAGS=-L. -lm5
 
-OBJS=m5.o m5op_arm.o
+LIB_OBJS=m5op_arm.o
+OBJS=m5.o
 JNI_OBJS=m5op_arm.o jni_gem5Op.o
 
-all: m5
+all: libm5.a m5
 
 %.o: %.S
        $(CC) $(CFLAGS) -o $@ -c $<
@@ -67,7 +70,10 @@ all: m5
        $(CC)  $(CFLAGS) -o $@ -c $<
 
 m5: $(OBJS)
-       $(CC) -o $@ $(OBJS)
+       $(CC) -o $@ $(OBJS) $(LDFLAGS)
+
+libm5.a: $(LIB_OBJS)
+       $(AR) rcs $@ $<
 
 gem5OpJni: gem5OpJni.jar $(JNI_OBJS)
        $(CC) --shared -o lib$@.so $(JNI_OBJS)
@@ -78,4 +84,4 @@ gem5OpJni.jar:
        $(JR) cvf $@ jni/*.class
 
 clean:
-       rm -f *.o m5 libgemOpJni.so gem5OpJni.jar jni/*.class
+       rm -f *.o m5 libgemOpJni.so gem5OpJni.jar jni/*.class libm5.a
index 9848f5d93e95f80069ea697e64a5eb0300aa1e94..5e34e77afcc17a592d54c923ce5cb78000d1d7f7 100644 (file)
@@ -47,12 +47,17 @@ endif
 CC=$(CROSS_COMPILE)gcc
 AS=$(CROSS_COMPILE)as
 LD=$(CROSS_COMPILE)ld
+AR=$(CROSS_COMPILE)ar
 
 #CFLAGS=-O2 -march=armv7 -mthumb 
 CFLAGS=-O2 -mthumb 
-OBJS=m5.o m5op_arm.o
+LDFLAGS=-L. -lm5
 
-all: m5
+OBJS=m5.o
+LIB_OBJS=m5op_arm.o
+
+
+all: libm5.a m5
 
 %.o: %.S
        $(CC) $(CFLAGS) -o $@ -c $<
@@ -61,7 +66,11 @@ all: m5
        $(CC)  $(CFLAGS) -o $@ -c $<
 
 m5: $(OBJS)
-       $(CC) -o $@ -march=armv7 -mthumb $(OBJS)
+       $(CC) -o $@ -march=armv7 -mthumb $(OBJS) $(LDFLAGS)
+
+libm5.a: $(LIB_OBJS)
+       $(AR) rcs $@ $<
+
 
 clean:
-       rm -f *.o m5
+       rm -f *.o m5 libm5.a
index 4e1d0b638e424e15c38c90f04e0d210be23277e5..9e693258ec335deb5bb0e2557c39591964d21ceb 100644 (file)
 #ifndef __M5OP_H__
 #define __M5OP_H__
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <stdint.h>
 
 void arm(uint64_t address);
@@ -79,4 +83,7 @@ uint64_t m5a_getid(void);
 #define M5_AN_FL_LINK   0x10
 #define M5_AN_FL_RESET  0x20
 
+#ifdef __cplusplus
+}
+#endif
 #endif // __M5OP_H__