]> rtime.felk.cvut.cz Git - lincan.git/blobdiff - omk/rules/linux/kernelcfg2mk
Introduced basic set of OMK rules for Linux userspace and modules build.
[lincan.git] / omk / rules / linux / kernelcfg2mk
diff --git a/omk/rules/linux/kernelcfg2mk b/omk/rules/linux/kernelcfg2mk
new file mode 100755 (executable)
index 0000000..c18a497
--- /dev/null
@@ -0,0 +1,213 @@
+#!/bin/bash
+
+if [ $# -lt 1 ] ; then
+  echo "kernelcfg2mk: requires linux kernel directory as the first argument"
+  exit 2
+fi
+
+LINUX_DIR="$1"
+
+if [ $# -gt 1 ] ; then
+  KERN_MODULES_DIR="$2"
+fi
+
+if [ ! -e $LINUX_DIR/.config ] ; then
+  echo "kernelcfg2mk: the provided locations doesnot point to configured kernel sources"
+  echo "        check directory $LINUX_DIR"
+  exit 2
+fi
+
+if [ ! -e $LINUX_DIR/.config ] ; then
+  echo "kernelcfg2mk: the provided locations doesnot point to configured kernel sources"
+  echo "        check directory $LINUX_DIR"
+  exit 2
+fi
+
+if [ -z "$KERN_BUILD_DIR" ]  ; then
+  KERN_BUILD_DIR=`pwd`
+fi
+
+if [ -z "$KERN_MODULES_DIR" ]  ; then
+  KERN_MODULES_DIR=`pwd`
+fi
+
+
+if [ -z "$MAKE" ]  ; then
+  MAKE="make"
+fi
+
+
+KERN_TEST_DIR="$KERN_BUILD_DIR/kern-test-mk"
+
+mkdir -p $KERN_TEST_DIR
+
+#echo MAKERULES_DIR $MAKERULES_DIR
+#echo LINUX_DIR $LINUX_DIR
+#echo KERN_BUILD_DIR $KERN_BUILD_DIR
+#echo KERN_MODULES_DIR $KERN_MODULES_DIR
+
+RETVAL="0"
+
+LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/version.h | \
+               sed 's/[^"]*"\(.*\)\{1\}"/\1/')
+if [ -z "$LINUX_VERSION" ] ; then
+  LINUX_VERSION=$(grep UTS_RELEASE ${LINUX_DIR}/include/linux/utsrelease.h | \
+                 sed 's/[^"]*"\(.*\)\{1\}"/\1/')
+fi
+
+LINUX_VERSION_MAJOR=$(echo ${LINUX_VERSION} | cut -d. -f1)
+LINUX_VERSION_MINOR=$(echo ${LINUX_VERSION} | cut -d. -f2)
+
+#echo $LINUX_VERSION
+#echo $LINUX_VERSION_MAJOR
+#echo $LINUX_VERSION_MINOR
+
+
+case $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR in
+
+
+#=====================================================================
+# test for 2.4.x kernels
+    2.[01234])
+
+       rm -f ${KERN_BUILD_DIR}/kernel.mk
+       rm -rf ${KERN_TEST_DIR}
+       mkdir ${KERN_TEST_DIR}
+       if [ $? -ne 0 ] ; then
+               echo "Cannot create Linux kernel test build directory \"${KERN_TEST_DIR}\""
+               exit 3
+       fi
+       cd ${KERN_TEST_DIR}
+
+       cat >${KERN_TEST_DIR}/Makefile <<EOF
+
+.PHONY: modules
+modules:
+       @echo LINUX_ARCH="\$(ARCH)" >>flags
+       @echo LINUX_LDFLAGS="" >>flags
+       @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>flags
+       @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>flags
+       @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>flags
+       @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags
+       @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>flags
+       @echo LINUX_MODFLAGS="\$(MODFLAGS)"
+       @echo LINUX_CC="\$(CC)" >>flags
+       @echo LINUX_LD="\$(LD) \$(LDFLAGS)" >>flags
+       @echo LINUX_AS="\$(AS)" >>flags
+       @echo LINUX_AR="\$(AR)" >>flags
+       @echo LINUX_MODULE_EXT=".o" >>flags
+
+EOF
+
+       #echo ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
+       ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} modules
+       if [ $? == 0 ] ; then
+               cp -v flags ${KERN_MODULES_DIR}/kernel.mk       
+               if [ ! $? == 0 ] ; then
+                       RETVAL="2"
+               fi
+       else
+               RETVAL="1"
+       fi
+
+       cd ${KERN_BUILD_DIR}
+       rm -rf ${KERN_TEST_DIR}
+       ;;
+
+#=====================================================================
+# test for 2.6.x kernels
+
+    2.6)
+
+       rm -f ${KERN_BUILD_DIR}/kernel.mk
+       rm -rf ${KERN_TEST_DIR}
+       mkdir ${KERN_TEST_DIR}
+       if [ $? -ne 0 ] ; then
+               echo "Cannot create Linux kernel test build directory \"${KERN_TEST_DIR}\""
+               exit 3
+       fi
+       cd ${KERN_TEST_DIR}
+
+       cat >${KERN_TEST_DIR}/Makefile <<EOF
+obj-m += fake.o
+
+\$(obj)/fake.c: flags
+       touch \$(obj)/fake.c
+
+ifeq (\$(KBUILD_SRC),)
+OMK_LINUX_SRC = \$(LINUXDIR)
+else
+OMK_LINUX_SRC = \$(KBUILD_SRC)
+endif
+#\$(warning Test \$OMK_LINUX_SRC)
+
+.PHONY: flags
+flags:
+       @echo LINUX_SRC="\$(OMK_LINUX_SRC)" >>\$(obj)/flags
+       @echo LINUX_ARCH="\$(ARCH)" >>\$(obj)/flags
+       @echo LINUX_BUILDHOST="\$(KBUILD_BUILDHOST)" >>\$(obj)/flags
+       @echo LINUX_LDFLAGS="" >>\$(obj)/flags
+       @echo LINUX_ARFLAGS="\$(ARFLAGS)" >>\$(obj)/flags
+       @echo LINUX_CROSS_COMPILE="\$(CROSS_COMPILE)" >>\$(obj)/flags
+       @echo LINUX_KERNELRELEASE="\$(KERNELRELEASE)" >>\$(obj)/flags
+ifdef KBUILD_CFLAGS
+       @echo LINUX_CPPFLAGS="\$(KBUILD_CPPFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>\$(obj)/flags
+       @echo LINUX_AFLAGS="\$(KBUILD_AFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
+       @echo LINUX_CFLAGS="\$(KBUILD_CFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
+else
+       @echo LINUX_CPPFLAGS="\$(CPPFLAGS)" | sed 's#Iinclude#I"\$(LINUXDIR)/include"#g'>>\$(obj)/flags
+       @echo LINUX_AFLAGS="\$(AFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
+       @echo LINUX_CFLAGS="\$(CFLAGS)" | sed 's#Iinclude#I"\$(OMK_LINUX_SRC)/include"#g'>>\$(obj)/flags
+endif
+       @echo LINUX_CFLAGS_MODULE="\$(CFLAGS_MODULE)" >>\$(obj)/flags
+       @echo LINUX_CC="\$(CC)" >>\$(obj)/flags
+       @echo LINUX_LD="\$(LD) \$(LDFLAGS) \$(LDFLAGS_MODULE)" | sed 's#\(\<arch/[^ ]*\.o\>\)#"\$(LINUXDIR)/\1"#g' >>\$(obj)/flags
+       @echo LINUX_AS="\$(AS)" >>\$(obj)/flags
+       @echo LINUX_AR="\$(AR)" >>\$(obj)/flags
+       @echo LINUX_MODULE_EXT=".ko" >>\$(obj)/flags
+       @echo LINUX_QUOTE_MODNAME=\$(if \$(findstring KBUILD_STR,\$(basename_flags)),y,) >>\$(obj)/flags
+       @echo LINUX_CONFIG_MODVERSIONS=\$(CONFIG_MODVERSIONS) >>\$(obj)/flags
+       @echo LINUX_CONFIG_MODULE_SRCVERSION_ALL=\$(CONFIG_MODULE_SRCVERSION_ALL) >>\$(obj)/flags
+       @echo LINUX_CONFIG_DEBUG_SECTION_MISMATCH=\$(CONFIG_DEBUG_SECTION_MISMATCH) >>\$(obj)/flags
+       @echo LINUX_CONFIG_MARKERS=\$(CONFIG_MARKERS) >>\$(obj)/flags
+       @echo LINUX_KBUILD_EXTMOD=\$(KBUILD_EXTMOD) >>\$(obj)/flags
+       @echo LINUX_KBUILD_EXTRA_SYMBOLS=\$(KBUILD_EXTRA_SYMBOLS) >>\$(obj)/flags
+       @echo LINUX_KBUILD_MODPOST_WARN=\$(KBUILD_MODPOST_WARN) >>\$(obj)/flags
+       @echo LINUX_CROSS_BUILD=\$(cross_build) >>\$(obj)/flags
+EOF
+
+       # modkern_cflags := $(CFLAGS_KERNEL) / $(CFLAGS_MODULE)
+
+       # _c_flags       = $(KBUILD_CFLAGS) $(ccflags-y) $(CFLAGS_$(basetarget).o)
+       # _a_flags       = $(KBUILD_AFLAGS) $(asflags-y) $(AFLAGS_$(basetarget).o)
+       # _cpp_flags     = $(KBUILD_CPPFLAGS) $(cppflags-y) $(CPPFLAGS_$(@F))
+
+       # export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
+       # export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE
+       # export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
+
+       #  -p V=1
+       #echo ${MAKE} -C ${LINUX_DIR} SUBDIRS=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR} modules
+       ${MAKE} -C ${LINUX_DIR} M=${KERN_TEST_DIR} LINUXDIR=${LINUX_DIR} MODVERDIR=${KERN_TEST_DIR}/modver modules
+       #if [ $? == 0 ] ; then
+               cp -v flags ${KERN_MODULES_DIR}/kernel.mk       
+               if [ ! $? == 0 ] ; then
+                       RETVAL="2"
+               fi
+       #else
+       #       RETVAL="1"
+       #fi
+
+       cd ${KERN_BUILD_DIR}
+       rm -rf ${KERN_TEST_DIR}
+       ;;
+
+#=====================================================================
+
+    *)
+       echo "Unsupported Linux version $LINUX_VERSION_MAJOR.$LINUX_VERSION_MINOR"
+    ;;
+esac
+
+
+exit ${RETVAL}