Change the cron script (btw. we are now triggered by systemd timers)
[can-benchmark.git] / kernelcfg2mk
1 #!/bin/bash
2
3 if [ $# -lt 1 ] ; then
4   echo "kernelcfg2mk: requires linux kernel directory as the first argument"
5   exit 2
6 fi
7
8 LINUX_DIR="$1"
9
10 if [ $# -gt 1 ] ; then
11   KERN_MODULES_DIR="$2"
12 fi
13
14 if [ ! -e $LINUX_DIR/.config ] ; then
15   echo "kernelcfg2mk: the provided locations doesnot point to configured kernel sources"
16   echo "        check directory $LINUX_DIR"
17   exit 2
18 fi
19
20 if [ ! -e $LINUX_DIR/.config ] ; then
21   echo "kernelcfg2mk: the provided locations doesnot point to configured kernel sources"
22   echo "        check directory $LINUX_DIR"
23   exit 2
24 fi
25
26 if [ -z "$KERN_BUILD_DIR" ]  ; then
27   KERN_BUILD_DIR=`pwd`
28 fi
29
30 if [ -z "$KERN_MODULES_DIR" ]  ; then
31   KERN_MODULES_DIR=`pwd`
32 fi
33
34
35 if [ -z "$MAKE" ]  ; then
36   MAKE="make"
37 fi
38
39
40 KERN_TEST_DIR="$KERN_BUILD_DIR/kern-test-mk"
41
42 mkdir -p $KERN_TEST_DIR
43
44 #echo MAKERULES_DIR $MAKERULES_DIR
45 #echo LINUX_DIR $LINUX_DIR
46 #echo KERN_BUILD_DIR $KERN_BUILD_DIR
47 #echo KERN_MODULES_DIR $KERN_MODULES_DIR
48
49 RETVAL="0"
50
51 LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/version.h | \
52                sed 's/[^"]*"\(.*\)\{1\}"/\1/')
53 if [ -z "$LINUX_VERSION" ] ; then
54   LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/utsrelease.h | \
55                  sed 's/[^"]*"\(.*\)\{1\}"/\1/')
56 fi
57
58 LINUX_VERSION_MAJOR=$(echo ${LINUX_VERSION} | cut -d. -f1)
59 LINUX_VERSION_MINOR=$(echo ${LINUX_VERSION} | cut -d. -f2)
60
61 #echo $LINUX_VERSION
62 #echo $LINUX_VERSION_MAJOR
63 #echo $LINUX_VERSION_MINOR
64
65
66 case $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR in
67
68
69 #=====================================================================
70 # test for 2.4.x kernels
71     2.[01234])
72
73         rm -f ${KERN_BUILD_DIR}/kernel.mk
74         rm -rf ${KERN_TEST_DIR}
75         mkdir ${KERN_TEST_DIR}
76         if [ $? -ne 0 ] ; then
77                 echo "Cannot create Linux kernel test build directory \"${KERN_TEST_DIR}\""
78                 exit 3
79         fi
80         cd ${KERN_TEST_DIR}
81
82         cat >${KERN_TEST_DIR}/Makefile <<EOF
83
84 .PHONY: modules
85 modules:
86         @echo LINUX_ARCH="\$(ARCH)" >>flags
87         @echo LINUX_LDFLAGS="" >>flags
88         @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>flags
89         @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>flags
90         @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>flags
91         @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags
92         @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags
93         @echo LINUX_MODFLAGS="\$(MODFLAGS)"
94         @echo LINUX_CC="\$(CC)" >>flags
95         @echo LINUX_LD="\$(LD) \$(LDFLAGS)" >>flags
96         @echo LINUX_AS="\$(AS)" >>flags
97         @echo LINUX_AR="\$(AR)" >>flags
98         @echo LINUX_MODULE_EXT=".o" >>flags
99
100 EOF
101
102         #echo ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
103         ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
104         if [ $? == 0 ] ; then
105                 cp -v flags ${KERN_MODULES_DIR}/kernel.mk       
106                 if [ ! $? == 0 ] ; then
107                         RETVAL="2"
108                 fi
109         else
110                 RETVAL="1"
111         fi
112
113         cd ${KERN_BUILD_DIR}
114         rm -rf ${KERN_TEST_DIR}
115         ;;
116
117 #=====================================================================
118 # test for 2.6.x kernels
119
120     2.6)
121
122         rm -f ${KERN_BUILD_DIR}/kernel.mk
123         rm -rf ${KERN_TEST_DIR}
124         mkdir ${KERN_TEST_DIR}
125         if [ $? -ne 0 ] ; then
126                 echo "Cannot create Linux kernel test build directory \"${KERN_TEST_DIR}\""
127                 exit 3
128         fi
129         cd ${KERN_TEST_DIR}
130
131         cat >${KERN_TEST_DIR}/Makefile <<EOF
132 obj-m += fake.o
133
134 \$(obj)/fake.c: flags
135         touch \$(obj)/fake.c
136
137 ifeq (\$(KBUILD_SRC),)
138 OMK_LINUX_SRC = \$(LINUXDIR)
139 else
140 OMK_LINUX_SRC = \$(KBUILD_SRC)
141 endif
142 #\$(warning Test \$OMK_LINUX_SRC)
143
144 .PHONY: flags
145 flags:
146         @echo LINUX_SRC="\$(OMK_LINUX_SRC)" >>\$(obj)/flags
147         @echo LINUX_ARCH="\$(ARCH)" >>\$(obj)/flags
148         @echo LINUX_BUILDHOST="\$(KBUILD_BUILDHOST)" >>\$(obj)/flags
149         @echo LINUX_LDFLAGS="" >>\$(obj)/flags
150         @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>\$(obj)/flags
151         @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>\$(obj)/flags
152         @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>\$(obj)/flags
153 ifdef KBUILD_CFLAGS
154         @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)\$(if \$(filter -I,\$(KBUILD_CPPFLAGS)),, \$(LINUXINCLUDE))" | sed 's#-I\(include\|arch\)#-I"\$(LINUXDIR)/\1"#g'>>\$(obj)/flags
155         @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
156         @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#-I\(include\|arch\)#-I"\$(OMK_LINUX_SRC)/\1"#g'>>\$(obj)/flags
157 else
158         @echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>\$(obj)/flags
159         @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
160         @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
161 endif
162         @echo LINUX_CFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags
163         @echo LINUX_CC="\$(CC)" >>\$(obj)/flags
164         @echo LINUX_LD="\$(LD) \$(LDFLAGS) \$(LDFLAGS_MODULE)" | sed 's#\(\<arch/[^ ]*\.o\>\)#"\$(LINUXDIR)/\1"#g' >>\$(obj)/flags
165         @echo LINUX_AS="\$(AS)" >>\$(obj)/flags
166         @echo LINUX_AR="\$(AR)" >>\$(obj)/flags
167         @echo LINUX_MODULE_EXT=".ko" >>\$(obj)/flags
168         @echo LINUX_QUOTE_MODNAME=\$(if \$(findstring KBUILD_STR,\$(basename_flags)),y,) >>\$(obj)/flags
169         @echo LINUX_CONFIG_MODVERSIONS=\$(CONFIG_MODVERSIONS) >>\$(obj)/flags
170         @echo LINUX_CONFIG_MODULE_SRCVERSION_ALL=\$(CONFIG_MODULE_SRCVERSION_ALL) >>\$(obj)/flags
171         @echo LINUX_CONFIG_DEBUG_SECTION_MISMATCH=\$(CONFIG_DEBUG_SECTION_MISMATCH) >>\$(obj)/flags
172         @echo LINUX_CONFIG_MARKERS=\$(CONFIG_MARKERS) >>\$(obj)/flags
173         @echo LINUX_KBUILD_EXTMOD=\$(KBUILD_EXTMOD) >>\$(obj)/flags
174         @echo LINUX_KBUILD_EXTRA_SYMBOLS=\$(KBUILD_EXTRA_SYMBOLS) >>\$(obj)/flags
175         @echo LINUX_KBUILD_MODPOST_WARN=\$(KBUILD_MODPOST_WARN) >>\$(obj)/flags
176         @echo LINUX_CROSS_BUILD=\$(cross_build) >>\$(obj)/flags
177 EOF
178
179         # modkern_cflags := $(CFLAGS_KERNEL) / $(CFLAGS_MODULE)
180
181         # _c_flags       = $(KBUILD_CFLAGS) $(ccflags-y) $(CFLAGS_$(basetarget).o)
182         # _a_flags       = $(KBUILD_AFLAGS) $(asflags-y) $(AFLAGS_$(basetarget).o)
183         # _cpp_flags     = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(@F))
184
185         # export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
186         # export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
187         # export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
188
189         #  -p V=1
190         #echo ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR} modules
191         ${MAKE} -C ${LINUX_DIR} M=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR}/modver modules
192         #if [ $? == 0 ] ; then
193                 cp -v flags ${KERN_MODULES_DIR}/kernel.mk       
194                 if [ ! $? == 0 ] ; then
195                         RETVAL="2"
196                 fi
197         #else
198         #       RETVAL="1"
199         #fi
200
201         cd ${KERN_BUILD_DIR}
202         rm -rf ${KERN_TEST_DIR}
203         ;;
204
205 #=====================================================================
206
207     *)
208         echo "Unsupported Linux version $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR"
209     ;;
210 esac
211
212
213 exit ${RETVAL}