Ver Fonte

Android openssl 1.1.1o fix - uses older NDK now (#117)

The previous version of the package used a later version of the
NDK than the rest of the engine did, causing compatibility issues
with build farms that used older NDK.

As part of this change, it also specifies the min Android system
API level (30) so as not to use "latest", as well as prints out
the NDK location as part of the build.

This ONLY revs the android package, as it was the only one affected.

Q:  How do we "prove" that this package will not cause the same problem
A:  We use the android native tools version of the 'nm' tool, which
dumps symbols.

The old package:
```
aarch64-linux-android-nm libcrypto.a  | grep -i ldadd4_relax
                 U __aarch64_ldadd4_relax
                 U __aarch64_ldadd4_relax
                 ... (many references)
                 U __aarch64_ldadd4_relax
                 U __aarch64_ldadd4_relax
```

The new package:
```
aarch64-linux-android-nm libcrypto.a  | grep -i ldadd4_relax
(no output)
```

Signed-off-by: lawsonamzn <[email protected]>
Nicholas Lawson há 3 anos atrás
pai
commit
6aa9bdaa91

+ 5 - 12
Scripts/builders/vcpkgbuilder.py

@@ -31,20 +31,13 @@ class VcpkgBuilder(object):
         self._customTripletsDir = Path(__file__).resolve().parents[1] / 'vcpkg/triplets'
         self._customEnviron = os.environ.copy()
 
-        if targetPlatform == 'android' and 'ANDROID_NDK_HOME' not in os.environ:
-            # Copy some of the logic from vcpkg's android ndk detection, and see if we can print a warning early
-            if 'ProgramData' in os.environ:
-                androidNdkFound = (pathlib.Path(os.environ['ProgramData']) / 'Microsoft/AndroidNDK64/android-ndk-r13b/').exists()
-            else:
-                androidNdkFound = False
-            if not androidNdkFound and 'ProgramFiles(x86)' in os.environ:
-                # Use Xamarin default installation folder
-                androidNdkFound = (pathlib.Path(os.environ['ProgramFiles(x86)']) / 'Android/android-sdk/ndk-bundle').exists()
-
-            if not androidNdkFound:
+        if targetPlatform == 'android':
+            if 'ANDROID_NDK_HOME' not in os.environ:
                 raise RuntimeError('Unable to find the Android NDK. '
                     'Please set the ANDROID_NDK_HOME environment variable to the root of the Android NDK')
-        
+            ANDROID_NDK_HOME = os.environ["ANDROID_NDK_HOME"]
+            print(f"ANDROID_NDK_HOME ='{ANDROID_NDK_HOME}'")
+
         if targetPlatform == 'mac':
             # set default env vars that control minos version.  Change this if you change the toolchain files.
             # ideally we'd put this in triplet files, but it turns out VCPKG triplets like the minos version

+ 1 - 0
Scripts/vcpkg/triplets/arm64-android-static.cmake

@@ -2,3 +2,4 @@ set(VCPKG_TARGET_ARCHITECTURE arm64)
 set(VCPKG_CRT_LINKAGE dynamic)
 set(VCPKG_LIBRARY_LINKAGE static)
 set(VCPKG_CMAKE_SYSTEM_NAME Android)
+set(VCPKG_CMAKE_SYSTEM_VERSION 30)

+ 1 - 0
Scripts/vcpkg/triplets/arm64-android.cmake

@@ -2,3 +2,4 @@ set(VCPKG_TARGET_ARCHITECTURE arm64)
 set(VCPKG_CRT_LINKAGE dynamic)
 set(VCPKG_LIBRARY_LINKAGE dynamic)
 set(VCPKG_CMAKE_SYSTEM_NAME Android)
+set(VCPKG_CMAKE_SYSTEM_VERSION 30)

+ 10 - 1
package-system/OpenSSL/build_package_image.py

@@ -47,6 +47,13 @@ def main():
         'windows': True,
     }
 
+    revisionForPlatform = {
+        'android': 'rev2',
+        'mac': 'rev1',
+        'ios': 'rev1',
+        'windows': 'rev1'
+    }
+
     testScriptForPlatform = {
         'android' : opensslPackageSourceDir / 'test_OpenSSL_android.cmd',
         'mac' : opensslPackageSourceDir / 'test_OpenSSL_mac.sh',
@@ -69,10 +76,12 @@ def main():
                 next(builder.vcpkgDir.glob(f'buildtrees/openssl/{builder.triplet}-rel/**/LICENSE')): outputDir / builder.packageName / 'LICENSE',
             })
 
+        revisionName = revisionForPlatform[args.platformName]
+
         builder.writePackageInfoFile(
             outputDir,
             settings={
-                'PackageName': f'OpenSSL-1.1.1o-rev1-{args.platformName}',
+                'PackageName': f'OpenSSL-1.1.1o-{revisionName}-{args.platformName}',
                 'URL': 'https://github.com/openssl/openssl',
                 'License': 'OpenSSL',
                 'LicenseFile': 'OpenSSL/LICENSE'

+ 2 - 2
package_build_list_host_windows.json

@@ -36,7 +36,7 @@
         "NvCloth-v1.1.6-4-gd243404-pr58-rev1-android": "package-system/NvCloth/build_package_image.py --platform-name android",
         "OpenEXR-3.1.3-rev4-windows": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenEXR --platform-name Windows --package-root ../../package-system/OpenEXR/temp --clean",
         "OpenMesh-8.1-rev3-windows": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenMesh --platform-name Windows --package-root ../../package-system --clean",
-        "OpenSSL-1.1.1o-rev1-android": "package-system/OpenSSL/build_package_image.py --platform-name android",
+        "OpenSSL-1.1.1o-rev2-android": "package-system/OpenSSL/build_package_image.py --platform-name android",
         "OpenSSL-1.1.1o-rev1-windows": "package-system/OpenSSL/build_package_image.py",
         "OpenXR-1.0.22-rev1-android": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenXR --platform-name Android --package-root ../../package-system --clean",
         "OpenXR-1.0.22-rev1-windows": "Scripts/extras/pull_and_build_from_git.py ../../package-system/OpenXR --platform-name Windows --package-root ../../package-system --clean",
@@ -101,7 +101,7 @@
     "OpenEXR-3.1.3-rev4-windows": "package-system/OpenEXR/temp/OpenEXR-windows",
     "openimageio-2.1.16.0-rev2-windows": "package-system/openimageio-windows",
     "OpenMesh-8.1-rev3-windows": "package-system/OpenMesh-windows",
-    "OpenSSL-1.1.1o-rev1-android": "package-system/OpenSSL/temp/OpenSSL-android",
+    "OpenSSL-1.1.1o-rev2-android": "package-system/OpenSSL/temp/OpenSSL-android",
     "OpenSSL-1.1.1o-rev1-windows": "package-system/OpenSSL/temp/OpenSSL-windows",
     "OpenXR-1.0.22-rev1-android": "package-system/OpenXR-android",
     "OpenXR-1.0.22-rev1-windows": "package-system/OpenXR-windows",