summary refs log tree commit diff
path: root/pkgs/os-specific/linux/kernel/builder.sh
blob: 84064134d01f128f13c6d529169c2ad807a3a01e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
source $stdenv/setup


configurePhase=configurePhase
configurePhase() {
    if test -n "$preConfigure"; then 
        eval "$preConfigure"; 
    fi

    export INSTALL_PATH=$out
    export INSTALL_MOD_PATH=$out


    # Get rid of any "localversion" files installed by patches.
    if test -z "$allowLocalVersion"; then
        rm -f localversion*
    fi

    # Set our own localversion, if specified.
    if test -n "$localVersion"; then
        echo "$localVersion" > localversion-nix
    fi


    # Create the config file.
    cp $config .config
    chmod u+w .config

    echo --extraConfig--;
    echo "${extraConfig}";

    echo "$extraConfig" | while read; do
	optionName=$( echo "$REPLY" | sed -e 's/[^A-Z_]//g' );
	echo --optionName--;
	echo "$REPLY";
	echo ${optionName};
	if [ -n "${optionName}" ]; then 
	    sed -e s/.'*'${optionName}.'*'/"$REPLY/" -i .config
	fi;
    done;

    echo "$extraConfig" >> .config

    #substituteInPlace scripts/kconfig/lxdialog/check-lxdialog.sh \
    #    --replace /usr /no-such-path

    # Necessary until NIXPKGS-38 is fixed:
    echo "#! $SHELL" > scripts/kconfig/lxdialog/check-lxdialog.sh
    chmod +x scripts/kconfig/lxdialog/check-lxdialog.sh
    
    make oldconfig \
        $makeFlags "${makeFlagsArray[@]}"

    echo --finalConfig--
    cat .config
}


installPhase=installPhase
installPhase() {

    ensureDir $out

    # New kernel versions have a combined tree for i386 and x86_64.
    archDir=$arch
    if test -e arch/x86 -a \( "$arch" = i386 -o "$arch" = x86_64 \); then
        archDir=x86
    fi

    # Copy the bzImage and System.map.
    cp System.map $out
    if test "$arch" = um; then
        ensureDir $out/bin
        cp linux $out/bin
    else
        cp arch/$archDir/boot/bzImage $out/vmlinuz
    fi

    # Install the modules in $out/lib/modules with matching paths
    # in modules.dep (i.e., refererring to $out/lib/modules, not
    # /lib/modules).  The depmod_opts= is to prevent the kernel
    # from passing `-b PATH' to depmod.
    export MODULE_DIR=$out/lib/modules/
    substituteInPlace Makefile --replace '-b $(INSTALL_MOD_PATH) -r' ''
    make modules_install \
        DEPMOD=$module_init_tools/sbin/depmod depmod_opts= \
        $makeFlags "${makeFlagsArray[@]}" \
        $installFlags "${installFlagsArray[@]}"

    # Strip the kernel modules.
    echo "Stripping kernel modules..."
    find $out -name "*.ko" -print0 | xargs -0 strip -S

    # move this to install later on
    # largely copied from early FC3 kernel spec files
    version=$(cd $out/lib/modules && ls -d *)

    # remove symlinks and create directories
    rm -f $out/lib/modules/$version/build
    rm -f $out/lib/modules/$version/source
    mkdir $out/lib/modules/$version/build

    # copy config
    cp .config $out/lib/modules/$version/build/.config

    if test "$arch" != um; then
        # copy all Makefiles and Kconfig files
        ln -s $out/lib/modules/$version/build $out/lib/modules/$version/source
        cp --parents `find  -type f -name Makefile -o -name "Kconfig*"` $out/lib/modules/$version/build
        cp Module.symvers $out/lib/modules/$version/build

        # weed out unneeded stuff
        rm -rf $out/lib/modules/$version/build/Documentation
        rm -rf $out/lib/modules/$version/build/scripts
        rm -rf $out/lib/modules/$version/build/include

        # copy architecture dependent files
        cp -a arch/$archDir/scripts $out/lib/modules/$version/build/ || true
        cp -a arch/$archDir/*lds $out/lib/modules/$version/build/ || true
        cp -a arch/$archDir/Makefile*.cpu $out/lib/modules/$version/build/arch/$archDir/ || true
        cp -a --parents arch/$archDir/kernel/asm-offsets.s $out/lib/modules/$version/build/arch/$archDir/kernel/ || true

        # copy scripts
        rm -f scripts/*.o
        rm -f scripts/*/*.o
        cp -a scripts $out/lib/modules/$version/build

        # copy include files
        includeDir=$out/lib/modules/$version/build/include
        mkdir -p $includeDir
        (cd include && cp -a acpi config linux math-emu media net pcmcia rxrpc scsi sound video asm-generic asm asm-$archDir $includeDir)
	(cd arch/$archDir/include && cp -a * $includeDir || true)
	(cd arch/$archDir/include && cp -a asm/* $includeDir/asm/ || true)
	(cd arch/$archDir/include/asm/mach-generic && cp -a * $includeDir/ || true)
    fi
}


genericBuild