5 cat > 'correct_cmetric_config.h' <<EOF
6 /* Automatically generated from for_cmetric_config.o */
7 /* Conditionals to control compilation */
8 /* Defines from the values defined to symbols in hexadecimal format */
9 #define FLAG_BAR_b 0x01
10 #define FLAG_BAR_m 0x02
11 #define FLAG_FOO_b 0x0
12 #define FLAG_FOO_m 0x01
13 #define VALUE_HEX 0x07b
14 #define o_blah_field1 0x0
15 #define o_blah_field2 0x04
16 #define o_blah_flags 0x08
17 #define s_blah_field1 0x04
18 #define s_blah_field2 0x01
19 #define s_blah_flags 0x04
20 /* Defines from the values defined to symbols in decimal format */
22 #define VALUE_DEC_ZERO 0
24 cat > 'Makefile.omk' <<EOF
29 cmetric_include_HEADERS = test/cmetric_config.h
30 cmetric_config_CMETRIC_SOURCES = for_cmetric_config.c
35 cat > 'for_cmetric_config.c' <<EOF
36 /* Export of offset information to assembly source code */
38 /* %N (for N a digit) means print operand N in usual manner.
39 %lN label name with no punctuation
40 %cN constant expression with no punctuation
41 %aN means expect operand N to be a memory address
42 (not a memory reference!) and print a reference
44 %nN constant expression for minus the value with no other punctuation.
49 #define NUM2ASM(sym,val) \
51 ".set " #sym ",%c0\n" \
52 ".global " #sym "\n" \
56 #define FIELD2ASM(strct, fld) \
57 NUM2ASM(_cmetric2def_o_##strct##_##fld,&((struct strct*)0L)->fld); \
58 NUM2ASM(_cmetric2def_s_##strct##_##fld,sizeof(((struct strct*)0L)->fld))
60 #define MASKBIT2ASM(def_base) \
61 NUM2ASM(_cmetric2def_##def_base##_b,def_base##_b); \
62 NUM2ASM(_cmetric2def_##def_base##_m,def_base##_m)
64 #define VALUE2ASM(value_name,value) \
65 NUM2ASM(_cmetric2def_##value_name,value)
67 #define DEC_VALUE2ASM(value_name,value) \
68 NUM2ASM(_cmetric2defdec_##value_name,value)
70 void pxmc_public2asm(void)
73 #ifdef CONFIG_TEST_OPTION1
74 VALUE2ASM(CMETRIC_TEST_OPTION1,1);
76 #ifdef CONFIG_TEST_OPTION2
77 VALUE2ASM(CMETRIC_TEST_OPTION2,1);
79 #ifdef CONFIG_TEST_OPTION3
80 VALUE2ASM(CMETRIC_TEST_OPTION3,1);
82 #ifdef CONFIG_TEST_OPTION4
83 VALUE2ASM(CMETRIC_TEST_OPTION4,1);
85 #ifdef CONFIG_TEST_OPTION5
86 VALUE2ASM(CMETRIC_TEST_OPTION5,1);
88 #ifdef CONFIG_TEST_OPTION6
89 VALUE2ASM(CMETRIC_TEST_OPTION6,1);
92 VALUE2ASM(VALUE_HEX, 123);
93 DEC_VALUE2ASM(VALUE_DEC, 123);
94 DEC_VALUE2ASM(VALUE_DEC_ZERO, 0);
96 MASKBIT2ASM(FLAG_FOO);
97 MASKBIT2ASM(FLAG_BAR);
99 FIELD2ASM(blah, field1);
100 FIELD2ASM(blah, field2);
101 FIELD2ASM(blah, flags);
106 #include <test/cmetric_config.h>
109 * In this file, we can use the symbols extracted from .o generated by
116 cat > 'header.h' <<EOF
121 #define FLAG_FOO_m (1<<FLAG_FOO_b)
123 #define FLAG_BAR_m (1<<FLAG_BAR_b)
135 touch config.omk-default
138 WVFAIL make NM=false FAILMSG="cmetric error was not correctly detected"
139 WVPASS make FAILMSG="compilation error"
141 eval $(make omk-get-var VAR=COMPILED_DIR_NAME|grep ^COMPILED_DIR_NAME)
143 WVPASS diff -u correct_cmetric_config.h $COMPILED_DIR_NAME/include/test/cmetric_config.h