]> rtime.felk.cvut.cz Git - omk.git/blob - rules/linux/kernelcfg2mk
Adaptation for AQuoSA
[omk.git] / rules / linux / kernelcfg2mk
1 #!/bin/bash
2
3 if [ "$OMK_VERBOSE" == "1" ]; then
4   CMD_ECHO=echo
5 else
6   CMD_ECHO=true
7 fi
8
9 if [ $# -lt 1 ] ; then
10   echo "kernelcfg2mk: requires linux kernel directory as the first argument"
11   exit 2
12 fi
13
14 LINUX_DIR="$1"
15
16 if [ $# -gt 1 ] ; then
17   KERN_MODULES_DIR="$2"
18 fi
19
20 if [ ! -e $LINUX_DIR/.config ] ; then
21   echo "kernelcfg2mk: the provided location does not point to configured kernel sources"
22   echo "        check directory $LINUX_DIR"
23   exit 2
24 fi
25
26 if [ ! -e $LINUX_DIR/.config ] ; then
27   echo "kernelcfg2mk: the provided location does not point to configured kernel sources"
28   echo "        check directory $LINUX_DIR"
29   exit 2
30 fi
31
32 if [ -z "$KERN_BUILD_DIR" ]  ; then
33   KERN_BUILD_DIR=`pwd`
34 fi
35
36 if [ -z "$KERN_MODULES_DIR" ]  ; then
37   KERN_MODULES_DIR=`pwd`
38 fi
39
40
41 if [ -z "$MAKE" ]  ; then
42   MAKE="make"
43 fi
44
45
46 KERN_TEST_DIR="$KERN_BUILD_DIR/kern-test-mk"
47
48 mkdir -p $KERN_TEST_DIR
49
50 $CMD_ECHO MAKERULES_DIR='$MAKERULES_DIR'
51 $CMD_ECHO LINUX_DIR='$LINUX_DIR'
52 $CMD_ECHO KERN_BUILD_DIR='$KERN_BUILD_DIR'
53 $CMD_ECHO KERN_MODULES_DIR='$KERN_MODULES_DIR'
54 $CMD_ECHO KERN_TEST_DIR='$KERN_TEST_DIR'
55
56 RETVAL="0"
57
58 LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/version.h | \
59                sed 's/[^"]*"\(.*\)\{1\}"/\1/')
60 if [ -z "$LINUX_VERSION" ] ; then
61   LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/utsrelease.h | \
62                  sed 's/[^"]*"\(.*\)\{1\}"/\1/')
63 fi
64
65 LINUX_VERSION_MAJOR=$(echo ${LINUX_VERSION} | cut -d. -f1)
66 LINUX_VERSION_MINOR=$(echo ${LINUX_VERSION} | cut -d. -f2)
67
68 $CMD_ECHO Detected LINUX_VERSION=$LINUX_VERSION
69 $CMD_ECHO Detected LINUX_VERSION_MAJOR=$LINUX_VERSION_MAJOR
70 $CMD_ECHO Detected LINUX_VERSION_MINOR=$LINUX_VERSION_MINOR
71
72
73 case $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR in
74
75
76 #=====================================================================
77 # test for 2.4.x kernels
78     2.[01234])
79
80         rm -f ${KERN_BUILD_DIR}/kernel.mk
81         rm -rf ${KERN_TEST_DIR}
82         mkdir ${KERN_TEST_DIR}
83         if [ $? -ne 0 ] ; then
84                 echo "Cannot create Linux kernel test build directory \"${KERN_TEST_DIR}\""
85                 exit 3
86         fi
87         cd ${KERN_TEST_DIR}
88
89         $CMD_ECHO Writing `pwd`/Makefile
90         cat >${KERN_TEST_DIR}/Makefile <<EOF
91 include $LINUX_DIR/include/config/auto.conf
92
93 MODPOST_OPTS =                                   \\
94  \$(if \$(CONFIG_MODVERSIONS),-m)                  \\
95  \$(if \$(CONFIG_MODULE_SRCVERSION_ALL),-a,)       \\
96  \$(if \$(KBUILD_EXTMOD),-i,-o) \$(kernelsymfile)   \\
97  \$(if \$(KBUILD_EXTMOD),-I \$(modulesymfile))      \\
98  \$(if \$(KBUILD_EXTRA_SYMBOLS), \$(patsubst %, -e %,\$(EXTRA_SYMBOLS))) \\
99  \$(if \$(KBUILD_EXTMOD),-o \$(modulesymfile))      \\
100  \$(if \$(CONFIG_DEBUG_SECTION_MISMATCH),,-S)      \\
101  \$(if \$(CONFIG_MARKERS),-K \$(kernelmarkersfile)) \\
102  \$(if \$(CONFIG_MARKERS),-M \$(markersfile))    \\
103  \$(if \$(KBUILD_EXTMOD)\$(KBUILD_MODPOST_WARN),-w) \\
104  \$(if \$(cross_build),-c)
105
106 .PHONY: modules
107 modules:
108         if [ "$OMK_VERBOSE" = "1" ]; then env; fi
109         @echo LINUX_ARCH="\$(ARCH)" >>flags
110         @echo LINUX_LDFLAGS="" >>flags
111         @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>flags
112         @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>flags
113         @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>flags
114         @$CMD_ECHO LINUX_AFLAGS="\$(AFLAGS)"
115         @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags
116         @$CMD_ECHO LINUX_CFLAGS="\$(CFLAGS)"
117         @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags
118         @echo LINUX_MODFLAGS="\$(MODFLAGS)"
119         @echo LINUX_CC="\$(CC)" >>flags
120         @echo LINUX_LD="\$(LD) \$(LDFLAGS)" >>flags
121         @echo LINUX_AS="\$(AS)" >>flags
122         @echo LINUX_AR="\$(AR)" >>flags
123         @echo LINUX_MODULE_EXT=".o" >>flags
124         @echo MODPOST_OPTS="\$(MODPOST_OPTS)" >>flags
125
126 EOF
127
128         $CMD_ECHO ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
129         ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
130         if [ $? == 0 ] ; then
131                 cp -v flags ${KERN_MODULES_DIR}/kernel.mk       
132                 if [ ! $? == 0 ] ; then
133                         RETVAL="2"
134                 fi
135         else
136                 RETVAL="1"
137         fi
138
139         cd ${KERN_BUILD_DIR}
140         if [ "$OMK_VERBOSE" != "1" ]; then rm -rf ${KERN_TEST_DIR}; fi
141         ;;
142
143 #=====================================================================
144 # test for 2.6.x kernels
145
146     2.6)
147
148         rm -f ${KERN_BUILD_DIR}/kernel.mk
149         rm -rf ${KERN_TEST_DIR}
150         mkdir ${KERN_TEST_DIR}
151         if [ $? -ne 0 ] ; then
152                 echo "Cannot create Linux kernel test build directory \"${KERN_TEST_DIR}\""
153                 exit 3
154         fi
155         cd ${KERN_TEST_DIR}
156
157         $CMD_ECHO Writing `pwd`/Makefile
158         cat >${KERN_TEST_DIR}/Makefile <<EOF
159 include $LINUX_DIR/include/config/auto.conf
160
161 MODPOST_OPTS =                                   \\
162  \$(if \$(CONFIG_MODVERSIONS),-m)                  \\
163  \$(if \$(CONFIG_MODULE_SRCVERSION_ALL),-a,)       \\
164  \$(if \$(KBUILD_EXTMOD),-i,-o) \$(kernelsymfile)   \\
165  \$(if \$(KBUILD_EXTMOD),-I \$(modulesymfile))      \\
166  \$(if \$(KBUILD_EXTRA_SYMBOLS), \$(patsubst %, -e %,\$(EXTRA_SYMBOLS))) \\
167  \$(if \$(KBUILD_EXTMOD),-o \$(modulesymfile))      \\
168  \$(if \$(CONFIG_DEBUG_SECTION_MISMATCH),,-S)      \\
169  \$(if \$(CONFIG_MARKERS),-K \$(kernelmarkersfile)) \\
170  \$(if \$(CONFIG_MARKERS),-M \$(markersfile))    \\
171  \$(if \$(KBUILD_EXTMOD)\$(KBUILD_MODPOST_WARN),-w) \\
172  \$(if \$(cross_build),-c)
173
174 obj-m += fake.o
175
176 \$(obj)/fake.c: flags
177         touch \$(obj)/fake.c
178
179 ifeq (\$(KBUILD_SRC),)
180   OMK_LINUX_SRC = \$(LINUXDIR)
181 else
182   OMK_LINUX_SRC = \$(KBUILD_SRC)
183 endif
184 #\$(warning Test \$OMK_LINUX_SRC)
185
186 .PHONY: flags
187 flags:
188         if [ "$OMK_VERBOSE" = "1" ]; then echo "Environment:" && env; fi
189         @echo LINUX_SRC="\$(OMK_LINUX_SRC)" >>\$(obj)/flags
190         @echo LINUX_ARCH="\$(ARCH)" >>\$(obj)/flags
191         @echo LINUX_BUILDHOST="\$(KBUILD_BUILDHOST)" >>\$(obj)/flags
192         @echo LINUX_LDFLAGS="" >>\$(obj)/flags
193         @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>\$(obj)/flags
194         @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>\$(obj)/flags
195         @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>\$(obj)/flags
196         @$CMD_ECHO CPPFLAGS="\$(CPPFLAGS)"
197         @$CMD_ECHO KBUILD_CPPFLAGS="\$(KBUILD_CPPFLAGS)"
198         @$CMD_ECHO AFLAGS="\$(AFLAGS)"
199         @$CMD_ECHO CFLAGS="\$(CFLAGS)"
200         @$CMD_ECHO KBUILD_CFLAGS="\$(KBUILD_CFLAGS)"
201         @$CMD_ECHO LINUXINCLUDE="\$(LINUXINCLUDE)"
202         @$CMD_ECHO CFLAGS_MODULE="\$(CFLAGS_MODULE)"
203 ifdef KBUILD_CFLAGS
204         @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)" | sed 's#-\(I\|include\) \?\(include\|arch\)#-\1 "\$(OMK_LINUX_SRC)/\2"#g'>>\$(obj)/flags
205         @echo LINUX_CPPFLAGS+="\$(LINUXINCLUDE)" | sed 's#-\(I\|include\) \?\(include\|arch\)#-\1 "\$(OMK_LINUX_SRC)/\2"#g'>>\$(obj)/flags
206         @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
207         @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
208 else
209         @echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
210         @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
211         @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
212 endif
213         @echo LINUX_CFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags
214         @echo LINUX_CC="\$(CC)" >>\$(obj)/flags
215         @echo LINUX_LD="\$(LD) \$(LDFLAGS) \$(LDFLAGS_MODULE)" | sed 's#\(\<arch/[^ ]*\.o\>\)#"\$(OMK_LINUX_SRC)/\1"#g' >>\$(obj)/flags
216         @echo LINUX_AS="\$(AS)" >>\$(obj)/flags
217         @echo LINUX_AR="\$(AR)" >>\$(obj)/flags
218         @echo LINUX_MODULE_EXT=".ko" >>\$(obj)/flags
219         @echo LINUX_QUOTE_MODNAME=\$(if \$(findstring KBUILD_STR,\$(basename_flags)),y,) >>\$(obj)/flags
220         @echo LINUX_CONFIG_MODVERSIONS=\$(CONFIG_MODVERSIONS) >>\$(obj)/flags
221         @echo LINUX_CONFIG_MODULE_SRCVERSION_ALL=\$(CONFIG_MODULE_SRCVERSION_ALL) >>\$(obj)/flags
222         @echo LINUX_CONFIG_DEBUG_SECTION_MISMATCH=\$(CONFIG_DEBUG_SECTION_MISMATCH) >>\$(obj)/flags
223         @echo LINUX_CONFIG_MARKERS=\$(CONFIG_MARKERS) >>\$(obj)/flags
224         @echo LINUX_KBUILD_EXTMOD=\$(KBUILD_EXTMOD) >>\$(obj)/flags
225         @echo LINUX_KBUILD_EXTRA_SYMBOLS=\$(KBUILD_EXTRA_SYMBOLS) >>\$(obj)/flags
226         @echo LINUX_KBUILD_MODPOST_WARN=\$(KBUILD_MODPOST_WARN) >>\$(obj)/flags
227         @echo LINUX_CROSS_BUILD=\$(cross_build) >>\$(obj)/flags
228         @echo MODPOST_OPTS="\$(MODPOST_OPTS)" >> \$(obj)/flags
229
230 EOF
231
232 #       ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR} KBUILD_VERBOSE=1 modules
233         ${MAKE} -C ${LINUX_DIR} M=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR}/modver KBUILD_VERBOSE=$OMK_VERBOSE modules
234         #if [ $? == 0 ] ; then
235                 cp -v flags ${KERN_MODULES_DIR}/kernel.mk       
236                 if [ ! $? == 0 ] ; then
237                         RETVAL="2"
238                 fi
239         #else
240         #       RETVAL="1"
241         #fi
242
243         cd ${KERN_BUILD_DIR}
244         if [ "$OMK_VERBOSE" != "1" ]; then rm -rf ${KERN_TEST_DIR}; fi
245         ;;
246
247 #=====================================================================
248
249     *)
250         echo "Unsupported Linux version $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR"
251     ;;
252 esac
253
254
255 exit ${RETVAL}