Mercurial > hg > aboriginal
annotate root-filesystem.sh @ 1786:0787ceb820bf draft 1.4.2
When x86-64 switched on NPTL in uClibc, distcc broke, and it turns out fully
native compiles under qemu never worked due to qemu not quite emulating
floating point right and confusing the perl build with zero not comparing equal
to zero.
As long as it's broken anyway, switch it over to musl and fix it up on that
side. It's no longer worth trying to fix anything broken in uClibc, the
project is dead. (I'm aware of uClibc-ng, and am treating it exactly the
same way I treated the ecommstation reboot of OS/2.)
author | Rob Landley <rob@landley.net> |
---|---|
date | Fri, 11 Sep 2015 13:25:14 -0500 |
parents | 7f1b9fb1099e |
children | f326dbd73bee |
rev | line source |
---|---|
177 | 1 #!/bin/bash |
43
6d16887ec084
Intermediate snapshot. Doesn't work yet.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
2 |
1116
2b68517f5b62
Break out simple-root-filesystem.sh and root-filesystem.sh (adding native-compiler.sh output), and use NO_NATIVE_COMPILER to determine which to use. Rename STATIC_CC_HOST to CROSS_HOST_ARCH.
Rob Landley <rob@landley.net>
parents:
1108
diff
changeset
|
3 # Build a basic busybox+uClibc root filesystem for a given target. |
888 | 4 |
1128
e5f9681a8b3c
Lots of comment updates. Add a NO_HOST_TOOLS=1 config option, and a few "time" calls to stages that didn't have them. Put native-compiler.sh after root-filesystem.sh in build so it's slightly easier to document.
Rob Landley <rob@landley.net>
parents:
1116
diff
changeset
|
5 # Requires a cross-compiler (or simple-cross-compiler) in the $PATH or in |
e5f9681a8b3c
Lots of comment updates. Add a NO_HOST_TOOLS=1 config option, and a few "time" calls to stages that didn't have them. Put native-compiler.sh after root-filesystem.sh in build so it's slightly easier to document.
Rob Landley <rob@landley.net>
parents:
1116
diff
changeset
|
6 # the build directory. In theory you can supply your own as long as the |
e5f9681a8b3c
Lots of comment updates. Add a NO_HOST_TOOLS=1 config option, and a few "time" calls to stages that didn't have them. Put native-compiler.sh after root-filesystem.sh in build so it's slightly easier to document.
Rob Landley <rob@landley.net>
parents:
1116
diff
changeset
|
7 # prefix- name is correct. |
e5f9681a8b3c
Lots of comment updates. Add a NO_HOST_TOOLS=1 config option, and a few "time" calls to stages that didn't have them. Put native-compiler.sh after root-filesystem.sh in build so it's slightly easier to document.
Rob Landley <rob@landley.net>
parents:
1116
diff
changeset
|
8 |
669 | 9 source sources/include.sh || exit 1 |
1398
b74d36876c0a
Replace read_arch_dir with load_target, which understands that sources/targets/$TARGET can be a file or a directory.
Rob Landley <rob@landley.net>
parents:
1358
diff
changeset
|
10 load_target "$1" |
783
db06a8c1bfed
Lots of changes to move buildall.sh functionality into build.sh.
Rob Landley <rob@landley.net>
parents:
782
diff
changeset
|
11 check_for_base_arch || exit 0 |
941
7dd3fb4dd333
Minor cleanups and comments, introduce check_prerequisite function.
Rob Landley <rob@landley.net>
parents:
937
diff
changeset
|
12 check_prerequisite "${ARCH}-cc" |
685
90ab1a1f4db5
Teach build not to rebuild base architecture toolchains. Factor out some common code while there.
Rob Landley <rob@landley.net>
parents:
675
diff
changeset
|
13 |
658
dc5512d734f0
Actually put MANIFEST into mini-native.
Rob Landley <rob@landley.net>
parents:
633
diff
changeset
|
14 # Determine which directory layout we're using |
dc5512d734f0
Actually put MANIFEST into mini-native.
Rob Landley <rob@landley.net>
parents:
633
diff
changeset
|
15 |
1727
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
16 mkdir -p "$STAGE_DIR"/{tmp,proc,sys,dev,home,mnt,root} && |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
17 chmod a+rwxt "$STAGE_DIR/tmp" || dienow |
1139
2c6d799f0451
Fix a dangling symlink that confuses root-filesystem.sh, and add some comments.
Rob Landley <rob@landley.net>
parents:
1133
diff
changeset
|
18 |
1727
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
19 STAGE_USR="$STAGE_DIR/usr" |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
20 |
1727
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
21 # Having lots of repeated locations at / and also under /usr is silly, so |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
22 # symlink them together. (The duplication happened back in the 1970's |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
23 # when Ken and Dennis ran out of space on their PDP-11's root disk and |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
24 # leaked the OS into the disk containing the user home directories. It's |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
25 # been mindlessly duplicated ever since.) |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
26 for i in bin sbin lib etc |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
27 do |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
28 mkdir -p "$STAGE_USR/$i" && ln -s "usr/$i" "$STAGE_DIR/$i" || dienow |
45c936d93711
Drop ROOT_NODIRS, it's not worth the complexity to support both layouts.
Rob Landley <rob@landley.net>
parents:
1708
diff
changeset
|
29 done |
395
c2b290c1df40
Upgrade BUILD_SHORT to make a small busybox+uClibc system in /usr, with top level symlinks (/bin, /lib, etc) and adjustments to boot script and run-emulator.
Rob Landley <rob@landley.net>
parents:
390
diff
changeset
|
30 |
713
9282f84b31a1
Add NATIVE_TOOLCHAIN=only, to build _just_ the native toolchain (sae set of packages as the cross compiler, only --enable-shared and with uClibc++).
Rob Landley <rob@landley.net>
parents:
711
diff
changeset
|
31 # Copy qemu setup script and so on. |
9282f84b31a1
Add NATIVE_TOOLCHAIN=only, to build _just_ the native toolchain (sae set of packages as the cross compiler, only --enable-shared and with uClibc++).
Rob Landley <rob@landley.net>
parents:
711
diff
changeset
|
32 |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
33 cp -r "$SOURCES/root-filesystem/." "$STAGE_USR/" && |
1221
6a4968ae5ac8
Add new "/src/host-info" file to target, with CROSS_TARGET and KARCH values.
Rob Landley <rob@landley.net>
parents:
1206
diff
changeset
|
34 echo -e "CROSS_TARGET=$CROSS_TARGET\nKARCH=$KARCH" > \ |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
35 "$STAGE_USR/src/host-info" && |
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
36 cp "$SRCDIR"/MANIFEST "$STAGE_USR/src" || dienow |
52
6d6551a37687
Add make to mini-native (required one more option switched on in uClibc), add
Rob Landley <rob@landley.net>
parents:
51
diff
changeset
|
37 |
1151 | 38 # If user specified different files to put in the root filesystem, add them. |
39 # (This overwrites existing files.) | |
40 | |
41 if [ ! -z "$SIMPLE_ROOT_OVERLAY" ] | |
42 then | |
43 cd "$TOP" | |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
44 tar -c -C "$SIMPLE_ROOT_OVERLAY" . | tar -x -C "$STAGE_DIR" || dienow |
1151 | 45 fi |
46 | |
1708
b871f0e7b837
Build the compiler wrapper static if possible, and only copy libraries into the simple-root-filesystem if we need them.
Rob Landley <rob@landley.net>
parents:
1676
diff
changeset
|
47 # Build toybox |
52
6d6551a37687
Add make to mini-native (required one more option switched on in uClibc), add
Rob Landley <rob@landley.net>
parents:
51
diff
changeset
|
48 |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
49 STAGE_DIR="$STAGE_USR" build_section busybox |
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
50 cp "$WORK"/config-busybox "$STAGE_USR"/src || dienow |
1544
e2f722cc97a6
Make busybox build by default, switch override knob to BUSYBOX=1 to use defconfig busybox, always use toybox for oneit, cleanup/fix record-commands logic.
Rob Landley <rob@landley.net>
parents:
1511
diff
changeset
|
51 build_section toybox |
1133
1ad777637d2d
Migrate oneit out of toybox into sources/toys as a standalone program, and fix it so pid 1 has / as its working directory so we can umount /home if necessary.
Rob Landley <rob@landley.net>
parents:
1128
diff
changeset
|
52 |
83
8fb80545fe84
Move the "hello world" source into sources/toys. Build (in mini-native)
Rob Landley <rob@landley.net>
parents:
81
diff
changeset
|
53 # Put statically and dynamically linked hello world programs on there for |
315
7fe514d773b9
Install setup script even for BUILD_SHORT.
Rob Landley <rob@landley.net>
parents:
311
diff
changeset
|
54 # test purposes. |
83
8fb80545fe84
Move the "hello world" source into sources/toys. Build (in mini-native)
Rob Landley <rob@landley.net>
parents:
81
diff
changeset
|
55 |
1676
0f4499211cfa
Move hello.c into /src in the root filesystem so the instructions in the README to try building it aren't wrong.
Rob Landley <rob@landley.net>
parents:
1544
diff
changeset
|
56 "${ARCH}-cc" "${SOURCES}/root-filesystem/src/hello.c" -Os $CFLAGS \ |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
57 -o "$STAGE_USR/bin/hello-dynamic" || dienow |
1036
e021bba5e22e
Yank ugly STAGE_DIR adjustment and instead teach busybox/toybox bilds to auto-detect "bin" directory on install. (And while we're at it, don't build hello-dynamic on static-only system.)
Rob Landley <rob@landley.net>
parents:
1034
diff
changeset
|
58 |
1083
cb4dbdb7f2cd
Make BUILD_STATIC take comma separated list of packages, or "all" or "none". Default behavior should remain the same.
Rob Landley <rob@landley.net>
parents:
1062
diff
changeset
|
59 if [ "$BUILD_STATIC" != none ] |
1036
e021bba5e22e
Yank ugly STAGE_DIR adjustment and instead teach busybox/toybox bilds to auto-detect "bin" directory on install. (And while we're at it, don't build hello-dynamic on static-only system.)
Rob Landley <rob@landley.net>
parents:
1034
diff
changeset
|
60 then |
1676
0f4499211cfa
Move hello.c into /src in the root filesystem so the instructions in the README to try building it aren't wrong.
Rob Landley <rob@landley.net>
parents:
1544
diff
changeset
|
61 "${ARCH}-cc" "${SOURCES}/root-filesystem/src/hello.c" -Os $CFLAGS -static \ |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
62 -o "$STAGE_USR/bin/hello-static" || dienow |
1708
b871f0e7b837
Build the compiler wrapper static if possible, and only copy libraries into the simple-root-filesystem if we need them.
Rob Landley <rob@landley.net>
parents:
1676
diff
changeset
|
63 STATIC=--static |
b871f0e7b837
Build the compiler wrapper static if possible, and only copy libraries into the simple-root-filesystem if we need them.
Rob Landley <rob@landley.net>
parents:
1676
diff
changeset
|
64 else |
b871f0e7b837
Build the compiler wrapper static if possible, and only copy libraries into the simple-root-filesystem if we need them.
Rob Landley <rob@landley.net>
parents:
1676
diff
changeset
|
65 STATIC= |
1036
e021bba5e22e
Yank ugly STAGE_DIR adjustment and instead teach busybox/toybox bilds to auto-detect "bin" directory on install. (And while we're at it, don't build hello-dynamic on static-only system.)
Rob Landley <rob@landley.net>
parents:
1034
diff
changeset
|
66 fi |
944
fc134a13357e
Largeish refactoring and cleanup of compiler build:
Rob Landley <rob@landley.net>
parents:
941
diff
changeset
|
67 |
1472
a4673f17b7c0
Add record-commands wrapper and plumbing to target image, so you can record-commands /mnt/init in a native build.
Rob Landley <rob@landley.net>
parents:
1398
diff
changeset
|
68 # Debug wrapper for use with /usr/src/record-commands.sh |
a4673f17b7c0
Add record-commands wrapper and plumbing to target image, so you can record-commands /mnt/init in a native build.
Rob Landley <rob@landley.net>
parents:
1398
diff
changeset
|
69 |
1708
b871f0e7b837
Build the compiler wrapper static if possible, and only copy libraries into the simple-root-filesystem if we need them.
Rob Landley <rob@landley.net>
parents:
1676
diff
changeset
|
70 "${ARCH}-cc" "$SOURCES/toys/wrappy.c" -Os $CFLAGS $STATIC \ |
b871f0e7b837
Build the compiler wrapper static if possible, and only copy libraries into the simple-root-filesystem if we need them.
Rob Landley <rob@landley.net>
parents:
1676
diff
changeset
|
71 -o "$STAGE_USR/bin/record-commands-wrapper" || dienow |
1472
a4673f17b7c0
Add record-commands wrapper and plumbing to target image, so you can record-commands /mnt/init in a native build.
Rob Landley <rob@landley.net>
parents:
1398
diff
changeset
|
72 |
1062
abc8ddd4d9f0
Don't have root-filesystem.sh suck in the native-compiler.sh output, have build.sh collate those instead before calling system-image.sh. (That way the root-filesystem.sh tarball does't include the native compiler output.)
Rob Landley <rob@landley.net>
parents:
1036
diff
changeset
|
73 # Do we need shared libraries? |
944
fc134a13357e
Largeish refactoring and cleanup of compiler build:
Rob Landley <rob@landley.net>
parents:
941
diff
changeset
|
74 |
1708
b871f0e7b837
Build the compiler wrapper static if possible, and only copy libraries into the simple-root-filesystem if we need them.
Rob Landley <rob@landley.net>
parents:
1676
diff
changeset
|
75 if ! is_in_list toybox $BUILD_STATIC || ! is_in_list busybox $BUILD_STATIC |
1062
abc8ddd4d9f0
Don't have root-filesystem.sh suck in the native-compiler.sh output, have build.sh collate those instead before calling system-image.sh. (That way the root-filesystem.sh tarball does't include the native compiler output.)
Rob Landley <rob@landley.net>
parents:
1036
diff
changeset
|
76 then |
abc8ddd4d9f0
Don't have root-filesystem.sh suck in the native-compiler.sh output, have build.sh collate those instead before calling system-image.sh. (That way the root-filesystem.sh tarball does't include the native compiler output.)
Rob Landley <rob@landley.net>
parents:
1036
diff
changeset
|
77 echo Copying compiler libraries... |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
78 mkdir -p "$STAGE_USR/lib" || dienow |
1062
abc8ddd4d9f0
Don't have root-filesystem.sh suck in the native-compiler.sh output, have build.sh collate those instead before calling system-image.sh. (That way the root-filesystem.sh tarball does't include the native compiler output.)
Rob Landley <rob@landley.net>
parents:
1036
diff
changeset
|
79 (path_search \ |
abc8ddd4d9f0
Don't have root-filesystem.sh suck in the native-compiler.sh output, have build.sh collate those instead before calling system-image.sh. (That way the root-filesystem.sh tarball does't include the native compiler output.)
Rob Landley <rob@landley.net>
parents:
1036
diff
changeset
|
80 "$("$ARCH-cc" --print-search-dirs | sed -n 's/^libraries: =*//p')" \ |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
81 "*.so*" 'cp -H "$DIR/$FILE" "$STAGE_USR/lib/$FILE"' \ |
1062
abc8ddd4d9f0
Don't have root-filesystem.sh suck in the native-compiler.sh output, have build.sh collate those instead before calling system-image.sh. (That way the root-filesystem.sh tarball does't include the native compiler output.)
Rob Landley <rob@landley.net>
parents:
1036
diff
changeset
|
82 || dienow) | dotprogress |
1198
78e786334c5b
Polish the strip logic a bit.
Rob Landley <rob@landley.net>
parents:
1178
diff
changeset
|
83 |
78e786334c5b
Polish the strip logic a bit.
Rob Landley <rob@landley.net>
parents:
1178
diff
changeset
|
84 [ -z "$SKIP_STRIP" ] && |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
85 "${ARCH}-strip" --strip-unneeded "$STAGE_USR"/lib/*.so |
1034
27c38c82401d
Move make, bash, and distcc builds into native-compiler.sh. (Break 'em out into sources/sections/*.build.)
Rob Landley <rob@landley.net>
parents:
1008
diff
changeset
|
86 fi |
944
fc134a13357e
Largeish refactoring and cleanup of compiler build:
Rob Landley <rob@landley.net>
parents:
941
diff
changeset
|
87 |
fc134a13357e
Largeish refactoring and cleanup of compiler build:
Rob Landley <rob@landley.net>
parents:
941
diff
changeset
|
88 # Clean up and package the result |
713
9282f84b31a1
Add NATIVE_TOOLCHAIN=only, to build _just_ the native toolchain (sae set of packages as the cross compiler, only --enable-shared and with uClibc++).
Rob Landley <rob@landley.net>
parents:
711
diff
changeset
|
89 |
1198
78e786334c5b
Polish the strip logic a bit.
Rob Landley <rob@landley.net>
parents:
1178
diff
changeset
|
90 [ -z "$SKIP_STRIP" ] && |
1511
e59de35d8437
Leave STAGE_DIR alone and add STAGE_USR instead.
Rob Landley <rob@landley.net>
parents:
1482
diff
changeset
|
91 "${ARCH}-strip" "$STAGE_USR"/{bin/*,sbin/*} |
53
3fd961e31444
Build a gcc wrapper for _target_, and add a "strip" command to halve the
Rob Landley <rob@landley.net>
parents:
52
diff
changeset
|
92 |
783
db06a8c1bfed
Lots of changes to move buildall.sh functionality into build.sh.
Rob Landley <rob@landley.net>
parents:
782
diff
changeset
|
93 create_stage_tarball |
576
036dbe218036
Add BASE_ARCH support, so a hardware architecture can specify a base architecture and just provide a different kernel.
Rob Landley <rob@landley.net>
parents:
572
diff
changeset
|
94 |
50
5aeba79b8f5f
Remove qemu build (it's in cross-compiler.sh now), move uClibc build right
Rob Landley <rob@landley.net>
parents:
46
diff
changeset
|
95 # Color back to normal |
52
6d6551a37687
Add make to mini-native (required one more option switched on in uClibc), add
Rob Landley <rob@landley.net>
parents:
51
diff
changeset
|
96 echo -e "\e[0mBuild complete" |