build.sh 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/bin/bash
  2. set -e -pipefail
  3. CC=gcc
  4. LD=gcc
  5. CFLAGS="-static -Oz -ffunction-sections -fdata-sections -fvisibility=hidden -fomit-frame-pointer -fno-merge-all-constants"
  6. LDFLAGS="-static -Oz -ffunction-sections -fdata-sections -fvisibility=hidden -fomit-frame-pointer -Wl,--gc-sections -Wl,-O2 -Wl,-s"
  7. ROOTFS=/tmp/initramfs
  8. # Step 0: Cleanup
  9. rm -rf ${ROOTFS}/*
  10. # Step 1: Build musl
  11. pushd musl
  12. make distclean
  13. CC=${CC} LD=${LD} CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" \
  14. ./configure --enable-static --disable-shared --prefix=/usr
  15. CC=${CC} LD=${LD} CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" \
  16. make -j 24 VERBOSE=1
  17. make install DESTDIR=${ROOTFS}
  18. popd
  19. # Step 2: Build tcc
  20. pushd tcc
  21. make distclean
  22. ./configure --enable-static --disable-shared --prefix=/usr \
  23. --config-musl \
  24. --extra-cflags="${CFLAGS} -I${ROOTFS}/usr/include" \
  25. --extra-ldflags="${LDFLAGS} -L${ROOTFS}/usr/include" \
  26. --includedir="/usr/include" \
  27. --libpaths="/usr/lib" \
  28. --tccdir="/usr/lib" \
  29. --cc="${CC}"
  30. echo '#define CONFIG_TCC_CRTPREFIX "/usr/lib"' >> config.h
  31. CC="${CC}" \
  32. C_INCLUDE_PATH="${ROOTFS}/usr/include" \
  33. LIBRARY_PATH="${ROOTFS}/usr/lib" \
  34. CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" \
  35. make -j 24 VERBOSE=1
  36. make install DESTDIR=${ROOTFS}
  37. popd
  38. # Step 3: Build qemacs
  39. pushd qemacs
  40. make distclean
  41. chmod 755 configure
  42. CFLAGS="${CFLAGS} -I${ROOTFS}/usr/include -flto" \
  43. LDFLAGS="${LDFLAGS} -L${ROOTFS}/usr/lib -flto" \
  44. CC="${CC}" LD="${CC}" \
  45. ./configure --prefix=/usr/ --disable-x11 --disable-xv \
  46. --disable-xrender --disable-html --disable-png
  47. CFLAGS="${CFLAGS} -I${ROOTFS}/usr/include -flto" \
  48. LDFLAGS="${LDFLAGS} -L${ROOTFS}/usr/lib -flto" \
  49. CC="${CC}" LD="${CC}" \
  50. make -j 24 VERBOSE=1
  51. make install DESTDIR=${ROOTFS}
  52. popd
  53. # Step 4: Build busybox
  54. pushd busybox
  55. make distclean
  56. cp ../bbconfig .config
  57. sed -e "/CONFIG_PREFIX/s|=.*$|=\"${ROOTFS}\"|" -i .config
  58. sed -e "/CONFIG_EXTRA_CFLAGS/s|=.*$|=\"${CFLAGS}\"|" -i .config
  59. sed -e "/CONFIG_EXTRA_LDFLAGS/s|=.*$|=\"${LDFLAGS}\"|" -i .config
  60. CFLAGS="${CFLAGS} -I${ROOTFS}/usr/include -flto" \
  61. LDFLAGS="${LDFLAGS} -L${ROOTFS}/usr/lib -flto" \
  62. CC="${CC}" LD="${CC}" \
  63. make -j 24 VERBOSE=1
  64. make -j 24 install VERBOSE=1
  65. popd
  66. # Step 5: Cleanup the resulting env
  67. rm -rf ${ROOTFS}/usr/share/{info,doc,man} ${ROOTFS}/usr/man