build 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/bin/bash
  2. [% c("var/set_default_env") -%]
  3. [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
  4. distdir=/var/tmp/dist/nss
  5. builddir=/var/tmp/build/[% project %]
  6. mkdir /var/tmp/build
  7. tar -C /var/tmp/dist -xf [% c('input_files_by_name/ninja') %]
  8. export PATH=/var/tmp/dist/ninja:$PATH
  9. # application-services uses a newer NDK, 21d, than all the other projects...
  10. export ANDROID_NDK_API_VERSION=[% pc("android-toolchain", "var/android_ndk_version") %][% pc('android-toolchain', 'var/android_ndk_revision') %]
  11. export ANDROID_NDK_HOME=/var/tmp/dist/[% c('var/compiler') %]/android-ndk/android-ndk-r$ANDROID_NDK_API_VERSION
  12. # We need to add the new path to our build tools to PATH
  13. export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
  14. export ANDROID_NDK_ROOT=$ANDROID_NDK_HOME
  15. export NDK_HOST_TAG=linux-x86_64
  16. nspr_64=""
  17. [% IF c("var/cross_prefix") == "armv7a-linux-androideabi" -%]
  18. gyp_arch="arm"
  19. [% ELSIF c("var/cross_prefix") == "i686-linux-android" -%]
  20. gyp_arch="ia32"
  21. [% ELSIF c("var/cross_prefix") == "x86_64-linux-android" -%]
  22. gyp_arch="x64"
  23. nspr_64="--enable-64bit"
  24. [% ELSIF c("var/cross_prefix") == "aarch64-linux-android" -%]
  25. gyp_arch="arm64"
  26. nspr_64="--enable-64bit"
  27. [% END -%]
  28. export AR="[% c('var/cross_prefix') %]-ar"
  29. # XXX: Mozilla really uses the NDK_API_VERSION here, which is weird.
  30. export CC="[% c('var/cross_prefix') %][% pc('android-toolchain', 'var/android_ndk_version') %]-clang"
  31. export CXX="[% c('var/cross_prefix') %][% pc('android-toolchain', 'var/android_ndk_version') %]-clang++"
  32. export LD="[% c('var/cross_prefix') %]-ld"
  33. export NM="[% c('var/cross_prefix') %]-nm"
  34. export RANLIB="[% c('var/cross_prefix') %]-ranlib"
  35. export READELF="[% c('var/cross_prefix') %]-readelf"
  36. tar -C /var/tmp/build -xf [% c('input_files_by_name/nss') %]
  37. mv /var/tmp/build/[% project %]-[% c('version') %] $builddir
  38. cd $builddir
  39. # Early return hack to prevent NSPR Android setup
  40. # which does not work with ndk unified headers and clang. See:
  41. # application-services/libs/build-all.sh
  42. cat $rootdir/configure.patch | patch nspr/configure
  43. # Some NSS symbols clash with OpenSSL symbols, rename them using
  44. # C preprocessor define macros. See:
  45. # application-services/libs/build-all.sh
  46. patch -p2 < $rootdir/config.patch
  47. # Let's apply our proxy bypass defense-in-depth here as well to be on the safe
  48. # side.
  49. patch -p2 < $rootdir/bug_13028.patch
  50. # Building NSPR
  51. mkdir $builddir/nspr_build
  52. cd $builddir/nspr_build
  53. ../nspr/configure \
  54. $nspr_64 \
  55. --target=[% IF c("arch") == "armv7" %]arm-linux-androideabi[% ELSE %][% c("var/cross_prefix") %][% END %] \
  56. --disable-debug \
  57. --enable-optimize
  58. make
  59. cd ..
  60. # Building NSS
  61. mkdir $builddir/nss_build
  62. gyp -f ninja-android "$builddir/nss/nss.gyp" \
  63. --depth "$builddir/nss/" \
  64. --generator-output=. \
  65. -DOS=android \
  66. -Dnspr_lib_dir="$builddir/nspr_build/dist/lib" \
  67. -Dnspr_include_dir="$builddir/nspr_build/dist/include/nspr" \
  68. -Dnss_dist_dir="$builddir/nss_build" \
  69. -Dnss_dist_obj_dir="$builddir/nss_build" \
  70. -Dhost_arch="$gyp_arch" \
  71. -Dtarget_arch="$gyp_arch" \
  72. -Dstatic_libs=1 \
  73. -Ddisable_dbm=1 \
  74. -Dsign_libs=0 \
  75. -Denable_sslkeylogfile=0 \
  76. -Ddisable_tests=1 \
  77. -Ddisable_libpkix=1
  78. gendir="$builddir/nss/out/Release"
  79. ninja -C "$gendir"
  80. mkdir -p $distdir/include/nss
  81. mkdir -p $distdir/lib
  82. cp -p -L "$builddir/nss_build/lib/libcertdb.a" "$distdir/lib"
  83. cp -p -L "$builddir/nss_build/lib/libcerthi.a" "$distdir/lib"
  84. cp -p -L "$builddir/nss_build/lib/libcryptohi.a" "$distdir/lib"
  85. cp -p -L "$builddir/nss_build/lib/libfreebl_static.a" "$distdir/lib"
  86. cp -p -L "$builddir/nss_build/lib/libnss_static.a" "$distdir/lib"
  87. cp -p -L "$builddir/nss_build/lib/libnssb.a" "$distdir/lib"
  88. cp -p -L "$builddir/nss_build/lib/libnssdev.a" "$distdir/lib"
  89. cp -p -L "$builddir/nss_build/lib/libnsspki.a" "$distdir/lib"
  90. cp -p -L "$builddir/nss_build/lib/libnssutil.a" "$distdir/lib"
  91. cp -p -L "$builddir/nss_build/lib/libpk11wrap_static.a" "$distdir/lib"
  92. cp -p -L "$builddir/nss_build/lib/libpkcs12.a" "$distdir/lib"
  93. cp -p -L "$builddir/nss_build/lib/libpkcs7.a" "$distdir/lib"
  94. cp -p -L "$builddir/nss_build/lib/libsmime.a" "$distdir/lib"
  95. cp -p -L "$builddir/nss_build/lib/libsoftokn_static.a" "$distdir/lib"
  96. cp -p -L "$builddir/nss_build/lib/libssl.a" "$distdir/lib"
  97. # HW specific.
  98. # https://searchfox.org/nss/rev/08c4d05078d00089f8d7540651b0717a9d66f87e/lib/freebl/freebl.gyp#278-296
  99. [% IF c("var/cross_prefix") == "i686-linux-android" || c("var/cross_prefix") == "x86_64-linux-android"-%]
  100. cp -p -L "$builddir/nss_build/lib/libgcm-aes-x86_c_lib.a" "$distdir/lib"
  101. [% END %]
  102. [% IF c("var/cross_prefix") == "armv7a-linux-androideabi" || c("var/cross_prefix") == "aarch64-linux-android"-%]
  103. cp -p -L "$builddir/nss_build/lib/libarmv8_c_lib.a" "$distdir/lib"
  104. [% END %]
  105. [% IF c("var/cross_prefix") == "aarch64-linux-android" -%]
  106. cp -p -L "$builddir/nss_build/lib/libgcm-aes-aarch64_c_lib.a" "$distdir/lib"
  107. [% END %]
  108. [% IF c("var/cross_prefix") == "armv7a-linux-androideabi" -%]
  109. cp -p -L "$builddir/nss_build/lib/libgcm-aes-arm32-neon_c_lib.a" "$distdir/lib"
  110. [% END %]
  111. # https://searchfox.org/nss/rev/08c4d05078d00089f8d7540651b0717a9d66f87e/lib/freebl/freebl.gyp#315-324
  112. # https://searchfox.org/nss/rev/08c4d05078d00089f8d7540651b0717a9d66f87e/lib/freebl/freebl.gyp#43-47
  113. [% IF c("var/cross_prefix") == "x86_64-linux-android"-%]
  114. cp -p -L "$builddir/nss_build/lib/libintel-gcm-wrap_c_lib.a" "$distdir/lib"
  115. cp -p -L "$builddir/nss_build/lib/libintel-gcm-s_lib.a" "$distdir/lib"
  116. cp -p -L "$builddir/nss_build/lib/libhw-acc-crypto-avx.a" "$distdir/lib"
  117. cp -p -L "$builddir/nss_build/lib/libhw-acc-crypto-avx2.a" "$distdir/lib"
  118. [% END %]
  119. cp -p -L "$builddir/nspr_build/dist/lib/libplc4.a" "$distdir/lib"
  120. cp -p -L "$builddir/nspr_build/dist/lib/libplds4.a" "$distdir/lib"
  121. cp -p -L "$builddir/nspr_build/dist/lib/libnspr4.a" "$distdir/lib"
  122. cp -p -L -R "$builddir/nss_build/public/nss/"* "$distdir/include/nss"
  123. cp -p -L -R "$builddir/nspr_build/dist/include/nspr/"* "$distdir/include/nss"
  124. cd /var/tmp/dist
  125. [% c('tar', {
  126. tar_src => [ project ],
  127. tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
  128. }) %]