pack_dependencies.sh 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/bin/sh
  2. set -e
  3. usage () {
  4. echo "Usage: $(basename $0) basedir platform arch1 arch2 [arch...]"
  5. echo ""
  6. echo " basedir Root directory of all sysroots."
  7. echo " platform Target platform. [ios|macos]"
  8. echo " archN List of architectures to pack. [armv7|armv7s|arm64|i386|x86_64]"
  9. echo ""
  10. exit 1
  11. }
  12. if [ $# -lt 4 ]; then
  13. usage
  14. fi
  15. BASEDIR="$1"
  16. PLATFORM=$2
  17. MAIN_ARCH=$3
  18. shift 2
  19. ALL_ARCHS=$*
  20. case $PLATFORM in
  21. ios )
  22. SCHEME="iOS"
  23. ;;
  24. macos )
  25. SCHEME="macOS"
  26. ;;
  27. * )
  28. usage
  29. ;;
  30. esac
  31. pack_all_objs() {
  32. BASEDIR="$1"
  33. FIND="$2"
  34. MAIN_DIR="$BASEDIR/sysroot-$SCHEME-$MAIN_ARCH"
  35. LIST=$(find "$MAIN_DIR" -path "$FIND" -type f)
  36. OLDIFS=$IFS
  37. IFS=$'\n'
  38. for f in $LIST
  39. do
  40. NAME=$(basename "$f")
  41. if [ "$NAME" == "Info.plist" ]; then
  42. continue # skip Info.plist
  43. fi
  44. FILE=${f/"$MAIN_DIR"/}
  45. INPUTS=$(echo $ALL_ARCHS | xargs printf -- "$BASEDIR/sysroot-$SCHEME-%s$FILE\n")
  46. OUTPUT="$BASEDIR/sysroot-$SCHEME-${ALL_ARCHS/ /_}$FILE"
  47. OUTPUT_DIR="$(dirname "$OUTPUT")"
  48. if [ ! -d "$OUTPUT_DIR" ]; then
  49. mkdir -p "$OUTPUT_DIR"
  50. fi
  51. echo "Packing $FILE"
  52. echo $ALL_ARCHS | xargs printf -- "$BASEDIR/sysroot-$SCHEME-%s$FILE\n" | xargs lipo -output "$OUTPUT" -create
  53. done
  54. IFS=$OLDIFS
  55. }
  56. pack_dir() {
  57. BASEDIR="$1"
  58. DIR="$2"
  59. SRC="$BASEDIR/sysroot-$SCHEME-$MAIN_ARCH"
  60. TGT="$BASEDIR/sysroot-$SCHEME-${ALL_ARCHS/ /_}"
  61. rm -rf "$TGT/$DIR"
  62. if [ ! -d "$(dirname "$TGT/$DIR")" ]; then
  63. mkdir -p "$(dirname "$TGT/$DIR")"
  64. fi
  65. echo "Packing /$DIR"
  66. cp -a "$SRC/$DIR" "$TGT/$DIR"
  67. }
  68. pack_all_objs "$BASEDIR" "*/bin/qemu-*"
  69. pack_all_objs "$BASEDIR" "*/lib/*.dylib"
  70. pack_all_objs "$BASEDIR" "*/lib/*.a"
  71. pack_dir "$BASEDIR" "Frameworks" # for all the Info.plist
  72. pack_all_objs "$BASEDIR" "*/Frameworks/*.framework/*"
  73. pack_dir "$BASEDIR" "include"
  74. pack_dir "$BASEDIR" "lib/glib-2.0/include"
  75. pack_dir "$BASEDIR" "share/qemu"