scripts/build/kernel/linux.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Fri Aug 19 00:52:05 2011 +0200 (2011-08-19)
changeset 2614 814ea73df7e0
parent 2603 461b9c476104
child 2615 ba0fbc5f6570
permissions -rw-r--r--
scripts: simplify and fix the toolchain config script

The script that is installed, and which sole purpose is to dump
the .config that was used to build the toolchain, is pure insanity.

Let's make it much, much more simpler...

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
yann@1345
     1
# This file declares functions to install the kernel headers for linux
yann@1345
     2
# Copyright 2007 Yann E. MORIN
yann@1345
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@1345
     4
yann@1345
     5
CT_DoKernelTupleValues() {
yann@1345
     6
    if [ "${CT_ARCH_USE_MMU}" = "y" ]; then
yann@1345
     7
        CT_TARGET_KERNEL="linux"
yann@1345
     8
    else
thomas@1910
     9
    # Sometime, noMMU linux targets have a -uclinux tuple, while
thomas@1910
    10
    # sometime it's -linux. We currently have only one noMMU linux
thomas@1910
    11
    # target, and it uses -linux, so let's just use that. Time
thomas@1910
    12
    # to fix that later...
thomas@1910
    13
    #    CT_TARGET_KERNEL="uclinux"
thomas@1910
    14
        CT_TARGET_KERNEL="linux"
yann@1345
    15
    fi
yann@1345
    16
}
yann@1345
    17
yann@1345
    18
# Download the kernel
yann@1345
    19
do_kernel_get() {
yann@2264
    20
    local k_ver
yann@2603
    21
    local custom_name
yann@2603
    22
yann@2603
    23
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y"  ]; then
yann@2603
    24
        return 0
yann@2603
    25
    fi
yann@2603
    26
yann@2603
    27
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
yann@2603
    28
        # Wee need to know the custom tarball extension,
yann@2603
    29
        # so we can cerate a properly-named symlink, which
yann@2603
    30
        # we use later on in 'extract'
yann@2603
    31
        case "${CT_KERNEL_LINUX_CUSTOM_TARBALL}" in
yann@2603
    32
            *.tar.bz2)      custom_name="linux-custom.tar.bz2";;
yann@2603
    33
            *.tar.gz|*.tgz) custom_name="linux-custom.tar.gz";;
yann@2603
    34
            *.tar)          custom_name="linux-custom.tar";;
yann@2603
    35
            *)  CT_Abort "Unknown extension for custom linux tarball '${CT_KERNEL_LINUX_CUSTOM_TARBALL}'";;
yann@2603
    36
        esac
yann@2603
    37
        CT_DoExecLog DEBUG ln -sf "${CT_KERNEL_LINUX_CUSTOM_TARBALL}"  \
yann@2603
    38
                                  "${CT_SRC_DIR}/${custom_name}"
yann@2603
    39
    else # Not a custom tarball
yann@2264
    40
        case "${CT_KERNEL_VERSION}" in
yann@2567
    41
            2.6.*.*|3.*.*)
yann@2567
    42
                # 4-part versions (for 2.6 stables and long-terms), and
yann@2567
    43
                # 3-part versions (for 3.x.y stables and long-terms),
yann@2567
    44
                # we need to trash the last digit
yann@2264
    45
                k_ver="${CT_KERNEL_VERSION%.*}"
yann@2264
    46
                ;;
yann@2567
    47
            2.6.*|3.*)
yann@2567
    48
                # 3-part version (for 2.6.x initial releases), and 2-part
yann@2567
    49
                # versions (for 3.x initial releases), use all of it
yann@2264
    50
                k_ver="${CT_KERNEL_VERSION}"
yann@2264
    51
                ;;
yann@2264
    52
        esac
yann@2567
    53
        CT_GetFile "linux-${CT_KERNEL_VERSION}"                                             \
yann@2567
    54
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v2.6                    \
yann@2567
    55
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v3.0                    \
yann@2567
    56
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v2.6/longterm/v${k_ver} \
yann@2567
    57
                   http://ftp.{de.,eu.,}kernel.org/pub/linux/kernel/v3.0/longterm/v${k_ver}
yann@1345
    58
    fi
yann@1345
    59
}
yann@1345
    60
yann@1345
    61
# Extract kernel
yann@1345
    62
do_kernel_extract() {
yann@2603
    63
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y"  ]; then
yann@2603
    64
        return 0
yann@1345
    65
    fi
yann@2603
    66
    # This also handles the custom tarball
yann@2603
    67
    CT_Extract "linux-${CT_KERNEL_VERSION}"
yann@2603
    68
    CT_Patch "linux" "${CT_KERNEL_VERSION}"
yann@1345
    69
}
yann@1345
    70
yann@1345
    71
# Wrapper to the actual headers install method
yann@1345
    72
do_kernel_headers() {
yann@1345
    73
    CT_DoStep INFO "Installing kernel headers"
yann@1345
    74
yann@2603
    75
    if [ "${CT_KERNEL_LINUX_USE_CUSTOM_HEADERS}" = "y" ]; then
yann@2603
    76
        do_kernel_custom
yann@2603
    77
    else
yann@1989
    78
        do_kernel_install
yann@1345
    79
    fi
yann@1345
    80
yann@1345
    81
    CT_EndStep
yann@1345
    82
}
yann@1345
    83
yann@1345
    84
# Install kernel headers using headers_install from kernel sources.
yann@1345
    85
do_kernel_install() {
yann@1990
    86
    local kernel_path
yann@1990
    87
yann@1345
    88
    CT_DoLog DEBUG "Using kernel's headers_install"
yann@1345
    89
yann@1345
    90
    mkdir -p "${CT_BUILD_DIR}/build-kernel-headers"
yann@1345
    91
yann@1990
    92
    kernel_path="${CT_SRC_DIR}/linux-${CT_KERNEL_VERSION}"
yann@1990
    93
    if [ "${CT_KERNEL_LINUX_CUSTOM}" = "y" ]; then
yann@1990
    94
        kernel_path="${CT_SRC_DIR}/linux-custom"
yann@1990
    95
    fi
yann@1345
    96
    V_OPT="V=${CT_KERNEL_LINUX_VERBOSE_LEVEL}"
yann@1345
    97
yann@1345
    98
    CT_DoLog EXTRA "Installing kernel headers"
yann@1345
    99
    CT_DoExecLog ALL                                    \
yann@1990
   100
    make -C "${kernel_path}"                            \
yann@1990
   101
         O="${CT_BUILD_DIR}/build-kernel-headers"       \
yann@1746
   102
         ARCH=${CT_ARCH}                                \
yann@1345
   103
         INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"       \
yann@1345
   104
         ${V_OPT}                                       \
yann@1345
   105
         headers_install
yann@1345
   106
yann@1345
   107
    if [ "${CT_KERNEL_LINUX_INSTALL_CHECK}" = "y" ]; then
yann@1345
   108
        CT_DoLog EXTRA "Checking installed headers"
yann@1345
   109
        CT_DoExecLog ALL                                    \
yann@1990
   110
        make -C "${kernel_path}"                            \
yann@1990
   111
             O="${CT_BUILD_DIR}/build-kernel-headers"       \
yann@1746
   112
             ARCH=${CT_ARCH}                                \
yann@1345
   113
             INSTALL_HDR_PATH="${CT_SYSROOT_DIR}/usr"       \
yann@1345
   114
             ${V_OPT}                                       \
yann@1345
   115
             headers_check
yann@1345
   116
    fi
bryanhundven@2228
   117
bryanhundven@2228
   118
    # Cleanup
bryanhundven@2228
   119
    find "${CT_SYSROOT_DIR}" -type f                        \
bryanhundven@2228
   120
                             \(    -name '.install'         \
bryanhundven@2228
   121
                                -o -name '..install.cmd'    \
bryanhundven@2228
   122
                                -o -name '.check'           \
bryanhundven@2228
   123
                                -o -name '..check.cmd'      \
bryanhundven@2228
   124
                             \)                             \
bryanhundven@2228
   125
                             -exec rm {} \;
yann@1345
   126
}
yann@1345
   127
yann@1345
   128
# Use custom headers (most probably by using make headers_install in a
yann@1345
   129
# modified (read: customised) kernel tree, or using pre-2.6.18 headers, such
yann@1345
   130
# as 2.4). In this case, simply copy the headers in place
yann@1345
   131
do_kernel_custom() {
yann@1345
   132
    local tar_opt
yann@1345
   133
yann@1345
   134
    CT_DoLog EXTRA "Installing custom kernel headers"
yann@1345
   135
yann@1345
   136
    mkdir -p "${CT_SYSROOT_DIR}/usr"
yann@1345
   137
    cd "${CT_SYSROOT_DIR}/usr"
yann@1345
   138
    if [ "${CT_KERNEL_LINUX_CUSTOM_IS_TARBALL}" = "y" ]; then
yann@1345
   139
        case "${CT_KERNEL_LINUX_CUSTOM_PATH}" in
yann@1345
   140
            *.tar)      ;;
yann@1345
   141
            *.tgz)      tar_opt=--gzip;;
yann@1345
   142
            *.tar.gz)   tar_opt=--gzip;;
yann@1345
   143
            *.tar.bz2)  tar_opt=--bzip2;;
yann@1345
   144
        esac
yann@1345
   145
        CT_DoExecLog ALL tar x ${tar_opt} -vf ${CT_KERNEL_LINUX_CUSTOM_PATH}
yann@1345
   146
    else
yann@1345
   147
        CT_DoExecLog ALL cp -rv "${CT_KERNEL_LINUX_CUSTOM_PATH}/include" .
yann@1345
   148
    fi
yann@1345
   149
}