]> rtime.felk.cvut.cz Git - omk.git/commitdiff
Added test for cmetric
authorMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 25 Sep 2009 12:59:27 +0000 (14:59 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Fri, 25 Sep 2009 12:59:27 +0000 (14:59 +0200)
tests/cmetric/Makefile [new file with mode: 0644]
tests/cmetric/Makefile.omk [new file with mode: 0644]
tests/cmetric/correct_cmetric_config.h [new file with mode: 0644]
tests/cmetric/for_cmetric_config.c [new file with mode: 0644]
tests/cmetric/header.h [new file with mode: 0644]
tests/cmetric/runtest [new file with mode: 0755]
tests/cmetric/test.S [new file with mode: 0644]

diff --git a/tests/cmetric/Makefile b/tests/cmetric/Makefile
new file mode 100644 (file)
index 0000000..b22a357
--- /dev/null
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/tests/cmetric/Makefile.omk b/tests/cmetric/Makefile.omk
new file mode 100644 (file)
index 0000000..5f2f9bf
--- /dev/null
@@ -0,0 +1,9 @@
+# -*- makefile -*-
+
+NM=nm
+
+cmetric_include_HEADERS = test/cmetric_config.h
+cmetric_config_CMETRIC_SOURCES = for_cmetric_config.c
+
+bin_PROGRAMS = test
+test_SOURCES = test.S
diff --git a/tests/cmetric/correct_cmetric_config.h b/tests/cmetric/correct_cmetric_config.h
new file mode 100644 (file)
index 0000000..d9b9478
--- /dev/null
@@ -0,0 +1,13 @@
+/* Automatically generated from for_cmetric_config.o */
+/* Conditionals to control compilation */
+/* Defines from the values defined to symbols */
+#define FLAG_BAR_b 0x01
+#define FLAG_BAR_m 0x02
+#define FLAG_FOO_b 0x0
+#define FLAG_FOO_m 0x01
+#define o_blah_field1 0x0
+#define o_blah_field2 0x04
+#define o_blah_flags 0x08
+#define s_blah_field1 0x04
+#define s_blah_field2 0x01
+#define s_blah_flags 0x04
diff --git a/tests/cmetric/for_cmetric_config.c b/tests/cmetric/for_cmetric_config.c
new file mode 100644 (file)
index 0000000..aeab4b0
--- /dev/null
@@ -0,0 +1,62 @@
+/* Export of offset information to assembly source code */
+
+/* %N (for N a digit) means print operand N in usual manner.
+   %lN label name with no punctuation
+   %cN constant expression with no punctuation
+   %aN means expect operand N to be a memory address
+       (not a memory reference!) and print a reference
+       to that address.
+   %nN constant expression for minus the value with no other punctuation. 
+ */
+
+#include "header.h"
+
+#define NUM2ASM(sym,val) \
+    __asm__ ( \
+       ".set " #sym ",%c0\n" \
+       ".global " #sym "\n" \
+       ::"n"(val) \
+    )
+
+#define FIELD2ASM(strct, fld)                             \
+       NUM2ASM(_cmetric2def_o_##strct##_##fld,&((struct strct*)0L)->fld); \
+       NUM2ASM(_cmetric2def_s_##strct##_##fld,sizeof(((struct strct*)0L)->fld))
+
+#define MASKBIT2ASM(def_base) \
+       NUM2ASM(_cmetric2def_##def_base##_b,def_base##_b); \
+       NUM2ASM(_cmetric2def_##def_base##_m,def_base##_m)
+
+#define VALUE2ASM(value_name,value) \
+       NUM2ASM(_cmetric2def_##value_name,value)
+
+
+void pxmc_public2asm(void)
+{
+
+#ifdef CONFIG_TEST_OPTION1
+VALUE2ASM(CMETRIC_TEST_OPTION1,1);
+#endif
+#ifdef CONFIG_TEST_OPTION2
+VALUE2ASM(CMETRIC_TEST_OPTION2,1);
+#endif
+#ifdef CONFIG_TEST_OPTION3
+VALUE2ASM(CMETRIC_TEST_OPTION3,1);
+#endif
+#ifdef CONFIG_TEST_OPTION4
+VALUE2ASM(CMETRIC_TEST_OPTION4,1);
+#endif
+#ifdef CONFIG_TEST_OPTION5
+VALUE2ASM(CMETRIC_TEST_OPTION5,1);
+#endif
+#ifdef CONFIG_TEST_OPTION6
+VALUE2ASM(CMETRIC_TEST_OPTION6,1);
+#endif
+
+MASKBIT2ASM(FLAG_FOO);
+MASKBIT2ASM(FLAG_BAR);
+
+FIELD2ASM(blah, field1);
+FIELD2ASM(blah, field2);
+FIELD2ASM(blah, flags);
+
+}
diff --git a/tests/cmetric/header.h b/tests/cmetric/header.h
new file mode 100644 (file)
index 0000000..69994bc
--- /dev/null
@@ -0,0 +1,15 @@
+#ifndef HEADER_H
+#define HEADER_H
+
+#define FLAG_FOO_b 0
+#define FLAG_FOO_m (1<<FLAG_FOO_b)
+#define FLAG_BAR_b 1
+#define FLAG_BAR_m (1<<FLAG_BAR_b)
+
+struct blah {
+       int field1;
+       char field2;
+       int flags;
+};
+
+#endif
diff --git a/tests/cmetric/runtest b/tests/cmetric/runtest
new file mode 100755 (executable)
index 0000000..7222982
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+. ../functions.sh
+
+touch config.omk-default
+make || error "compilation error"
+cmp correct_cmetric_config.h _compiled/include/test/cmetric_config.h || \
+    error "produced file differs"
diff --git a/tests/cmetric/test.S b/tests/cmetric/test.S
new file mode 100644 (file)
index 0000000..8b75e7b
--- /dev/null
@@ -0,0 +1,9 @@
+#include <test/cmetric_config.h>
+
+/*
+ * In this file, we can use the symbols extracted from .o generated by
+ * a C compiler
+ */
+
+.global main
+main: