Last change
on this file since d5e5fd1 was d5e5fd1, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 7 years ago |
autogen2
|
-
Property mode
set to
100755
|
File size:
963 bytes
|
Line | |
---|
1 | #!/bin/sh
|
---|
2 |
|
---|
3 | filename="$1"
|
---|
4 | struct_name="$2"
|
---|
5 |
|
---|
6 | members=`cat $filename | sed -n -e "1,/typedef struct $struct_name {/d" -e "/} ${struct_name}_t;/,$$d" -e "s/.* \([^ ]\+\);/\1/p"`
|
---|
7 |
|
---|
8 | ustruct_name=`echo "$struct_name" | awk '{print toupper($0)}'`
|
---|
9 | dmembers=`echo "$members" | awk '{print "DEFINE_MEMBER(" $0 ", " toupper($0) ")" }'`
|
---|
10 |
|
---|
11 | if [ -z "${CC}" ]; then
|
---|
12 | CC=cc
|
---|
13 | fi
|
---|
14 |
|
---|
15 | if ( ${CC} --version | grep clang > /dev/null ) ; then
|
---|
16 | CFLAGS="${CFLAGS} -no-integrated-as"
|
---|
17 | fi
|
---|
18 |
|
---|
19 | echo "/* Autogenerated file, do not modify. */"
|
---|
20 | echo "#pragma once"
|
---|
21 |
|
---|
22 | ( ${CC} ${CFLAGS} -w -S -x c - -o - | sed -n 's/^.* #define \([^ ]\+\) [^0-9]*\([0-9]\+\) .*/#define \1 \2/p' ) <<- EOF
|
---|
23 |
|
---|
24 | #include "$filename"
|
---|
25 |
|
---|
26 | #define DEFINE_MEMBER(lc, uc) \
|
---|
27 | asm volatile ("/* #define ${ustruct_name}_OFFSET_"#uc" %0 */" :: "i" (__builtin_offsetof(struct $struct_name, lc))); \
|
---|
28 | asm volatile ("/* #define ${ustruct_name}_SIZE_"#uc" %0 */" :: "i" (sizeof((struct $struct_name){}.lc)));
|
---|
29 |
|
---|
30 | void autogen()
|
---|
31 | {
|
---|
32 | $dmembers
|
---|
33 | }
|
---|
34 |
|
---|
35 | EOF
|
---|
Note:
See
TracBrowser
for help on using the repository browser.