b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame] | 1 | ifdef CONFIG_USE_MKLIBS |
| 2 | define mklibs |
| 3 | rm -rf $(TMP_DIR)/mklibs-progs $(TMP_DIR)/mklibs-out |
| 4 | # first find all programs and add them to the mklibs list |
| 5 | find $(STAGING_DIR_ROOT) -type f -perm /100 -exec \ |
| 6 | file -r -N -F '' {} + | \ |
| 7 | awk ' /executable.*dynamically/ { print $$1 }' > $(TMP_DIR)/mklibs-progs |
| 8 | # find all loadable objects that are not regular libraries and add them to the list as well |
| 9 | find $(STAGING_DIR_ROOT) -type f -name \*.so\* -exec \ |
| 10 | file -r -N -F '' {} + | \ |
| 11 | awk ' /shared object/ { print $$1 }' > $(TMP_DIR)/mklibs-libs |
| 12 | mkdir -p $(TMP_DIR)/mklibs-out |
| 13 | $(STAGING_DIR_HOST)/bin/mklibs -D \ |
| 14 | -d $(TMP_DIR)/mklibs-out \ |
| 15 | --sysroot $(STAGING_DIR_ROOT) \ |
| 16 | `cat $(TMP_DIR)/mklibs-libs | sed 's:/*[^/]\+/*$$::' | uniq | sed 's:^$(STAGING_DIR_ROOT):-L :'` \ |
| 17 | --ldlib $(patsubst $(STAGING_DIR_ROOT)/%,/%,$(firstword $(wildcard \ |
| 18 | $(foreach name,ld-uClibc.so.* ld-linux.so.* ld-*.so ld-musl-*.so.*, \ |
| 19 | $(STAGING_DIR_ROOT)/lib/$(name) \ |
| 20 | )))) \ |
| 21 | --target $(REAL_GNU_TARGET_NAME) \ |
| 22 | `cat $(TMP_DIR)/mklibs-progs $(TMP_DIR)/mklibs-libs` 2>&1 |
| 23 | $(RSTRIP) $(TMP_DIR)/mklibs-out |
| 24 | for lib in `ls $(TMP_DIR)/mklibs-out/*.so.* 2>/dev/null`; do \ |
| 25 | LIB="$${lib##*/}"; \ |
| 26 | DEST="`ls "$(1)/lib/$$LIB" "$(1)/usr/lib/$$LIB" 2>/dev/null`"; \ |
| 27 | [ -n "$$DEST" ] || continue; \ |
| 28 | echo "Copying stripped library $$lib to $$DEST"; \ |
| 29 | cp "$$lib" "$$DEST" || exit 1; \ |
| 30 | done |
| 31 | endef |
| 32 | endif |
| 33 | |
| 34 | # where to build (and put) .ipk packages |
| 35 | opkg = \ |
| 36 | IPKG_NO_SCRIPT=1 \ |
| 37 | IPKG_INSTROOT=$(1) \ |
| 38 | TMPDIR=$(1)/tmp \ |
| 39 | $(STAGING_DIR_HOST)/bin/opkg \ |
| 40 | --offline-root $(1) \ |
| 41 | --force-postinstall \ |
| 42 | --add-dest root:/ \ |
| 43 | --add-arch all:100 \ |
| 44 | --add-arch $(if $(ARCH_PACKAGES),$(ARCH_PACKAGES),$(BOARD)):200 |
| 45 | |
| 46 | apk = \ |
| 47 | IPKG_INSTROOT=$(1) \ |
| 48 | $(FAKEROOT) $(STAGING_DIR_HOST)/bin/apk \ |
| 49 | --root $(1) \ |
| 50 | --keys-dir $(if $(APK_KEYS),$(APK_KEYS),$(TOPDIR)) \ |
| 51 | --no-cache \ |
| 52 | --no-logfile \ |
| 53 | --preserve-env |
| 54 | |
| 55 | TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD) |
| 56 | |
| 57 | ifdef CONFIG_CLEAN_IPKG |
| 58 | define clean_ipkg |
| 59 | -find $(1)/usr/lib/opkg/info -type f -and -not -name '*.control' -delete |
| 60 | -sed -i -ne '/^Require-User: /p' $(1)/usr/lib/opkg/info/*.control |
| 61 | awk ' \ |
| 62 | BEGIN { conffiles = 0; print "Conffiles:" } \ |
| 63 | /^Conffiles:/ { conffiles = 1; next } \ |
| 64 | !/^ / { conffiles = 0; next } \ |
| 65 | conffiles == 1 { print } \ |
| 66 | ' $(1)/usr/lib/opkg/status >$(1)/usr/lib/opkg/status.new |
| 67 | mv $(1)/usr/lib/opkg/status.new $(1)/usr/lib/opkg/status |
| 68 | -find $(1)/usr/lib/opkg -empty -delete |
| 69 | endef |
| 70 | endif |
| 71 | |
| 72 | define prepare_rootfs |
| 73 | $(if $(2),@if [ -d '$(2)' ]; then \ |
| 74 | $(call file_copy,$(2)/.,$(1)); \ |
| 75 | fi) |
| 76 | @mkdir -p $(1)/etc/rc.d |
| 77 | @mkdir -p $(1)/var/lock |
| 78 | @( \ |
| 79 | cd $(1); \ |
| 80 | if [ -n "$(CONFIG_USE_APK)" ]; then \ |
| 81 | IPKG_POSTINST_PATH=./lib/apk/db/*.post-install; \ |
| 82 | $(STAGING_DIR_HOST)/bin/tar -C ./lib/apk/db/ -xf ./lib/apk/db/scripts.tar --wildcards "*.post-install"; \ |
| 83 | else \ |
| 84 | IPKG_POSTINST_PATH=./usr/lib/opkg/info/*.postinst; \ |
| 85 | fi; \ |
| 86 | for script in $$IPKG_POSTINST_PATH; do \ |
| 87 | IPKG_INSTROOT=$(1) $$(command -v bash) $$script; \ |
| 88 | ret=$$?; \ |
| 89 | if [ $$ret -ne 0 ]; then \ |
| 90 | echo "postinst script $$script has failed with exit code $$ret" >&2; \ |
| 91 | exit 1; \ |
| 92 | fi; \ |
| 93 | [ -n "$(CONFIG_USE_APK)" ] && $(STAGING_DIR_HOST)/bin/tar --delete -f ./lib/apk/db/scripts.tar $$(basename $$script); \ |
| 94 | done; \ |
| 95 | if [ -z "$(CONFIG_USE_APK)" ]; then \ |
| 96 | $(if $(IB),,awk -i inplace \ |
| 97 | '/^Status:/ { \ |
| 98 | if ($$3 == "user") { $$3 = "ok" } \ |
| 99 | else { sub(/,\<user\>|\<user\>,/, "", $$3) } \ |
| 100 | }1' $(1)/usr/lib/opkg/status) ; \ |
| 101 | $(if $(SOURCE_DATE_EPOCH),sed -i "s/Installed-Time: .*/Installed-Time: $(SOURCE_DATE_EPOCH)/" $(1)/usr/lib/opkg/status ;) \ |
| 102 | fi; \ |
| 103 | for script in ./etc/init.d/*; do \ |
| 104 | grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \ |
| 105 | if ! echo " $(3) " | grep -q " $$(basename $$script) "; then \ |
| 106 | IPKG_INSTROOT=$(1) $$(command -v bash) ./etc/rc.common $$script enable; \ |
| 107 | echo "Enabling" $$(basename $$script); \ |
| 108 | else \ |
| 109 | IPKG_INSTROOT=$(1) $$(command -v bash) ./etc/rc.common $$script disable; \ |
| 110 | echo "Disabling" $$(basename $$script); \ |
| 111 | fi; \ |
| 112 | done || true \ |
| 113 | ) |
| 114 | |
| 115 | @-find $(1) -name CVS -o -name .svn -o -name .git -o -name '.#*' | $(XARGS) rm -rf |
| 116 | rm -rf \ |
| 117 | $(1)/boot \ |
| 118 | $(1)/tmp/* \ |
| 119 | $(1)/lib/apk/db/*.post-install* \ |
| 120 | $(1)/usr/lib/opkg/info/*.postinst* \ |
| 121 | $(1)/usr/lib/opkg/lists/* \ |
| 122 | $(1)/var/lock/*.lock |
| 123 | $(call clean_ipkg,$(1)) |
| 124 | $(call mklibs,$(1)) |
| 125 | $(if $(SOURCE_DATE_EPOCH),find $(1)/ -mindepth 1 -execdir touch -hcd "@$(SOURCE_DATE_EPOCH)" "{}" +) |
| 126 | endef |