@@ -8,6 +8,30 @@ DirectoryPath ANDROID_NDK_HOME = Argument("ndk", EnvironmentVariable("ANDROID_ND
88string SUPPORT_VULKAN_VAR = Argument ( "supportVulkan" , EnvironmentVariable ( "SUPPORT_VULKAN" ) ?? "true" ) ;
99bool SUPPORT_VULKAN = SUPPORT_VULKAN_VAR == "1" || SUPPORT_VULKAN_VAR . ToLower ( ) == "true" ;
1010
11+ Information ( "Android NDK Path: {0}" , ANDROID_NDK_HOME ) ;
12+ Information ( "Building Vulkan: {0}" , SUPPORT_VULKAN ) ;
13+
14+ void CheckAlignment ( FilePath so )
15+ {
16+ Information ( $ "Making sure that everything is 16 KB aligned...") ;
17+
18+ var prebuilt = ANDROID_NDK_HOME . CombineWithFilePath ( "toolchains/llvm/prebuilt" ) . FullPath ;
19+ var objdump = GetFiles ( $ "{ prebuilt } /*/bin/llvm-objdump*") . FirstOrDefault ( ) ?? throw new Exception ( "Could not find llvm-objdump" ) ;
20+ RunProcess ( objdump . FullPath , $ "-p { so } ", out var stdout ) ;
21+
22+ var loads = stdout
23+ . Where ( l => l . Trim ( ) . StartsWith ( "LOAD" ) )
24+ . ToList ( ) ;
25+
26+ if ( loads . Any ( l => ! l . Trim ( ) . EndsWith ( "align 2**14" ) ) ) {
27+ Information ( String . Join ( Environment . NewLine + " " , stdout ) ) ;
28+ throw new Exception ( $ "{ so } contained a LOAD that was not 16 KB aligned.") ;
29+ } else {
30+ Information ( "Everything is 16 KB aligned:" ) ;
31+ Information ( String . Join ( Environment . NewLine , loads ) ) ;
32+ }
33+ }
34+
1135Task ( "libSkiaSharp" )
1236 . IsDependentOn ( "git-sync-deps" )
1337 . WithCriteria ( IsRunningOnMacOs ( ) || IsRunningOnWindows ( ) )
@@ -38,12 +62,15 @@ Task("libSkiaSharp")
3862 $ "skia_use_vulkan={ SUPPORT_VULKAN } ". ToLower ( ) +
3963 $ "skia_enable_skottie=true " +
4064 $ "extra_cflags=[ '-DSKIA_C_DLL', '-DHAVE_SYSCALL_GETRANDOM', '-DXML_DEV_URANDOM' ] " +
65+ $ "extra_ldflags=[ '-Wl,-z,max-page-size=16384' ] " +
4166 $ "ndk='{ ANDROID_NDK_HOME } ' " +
4267 $ "ndk_api=21") ;
4368
69+ var so = SKIA_PATH . CombineWithFilePath ( $ "out/android/{ arch } /libSkiaSharp.so") ;
4470 var outDir = OUTPUT_PATH . Combine ( arch ) ;
4571 EnsureDirectoryExists ( outDir ) ;
46- CopyFileToDirectory ( SKIA_PATH . CombineWithFilePath ( $ "out/android/{ arch } /libSkiaSharp.so") , outDir ) ;
72+ CopyFileToDirectory ( so , outDir ) ;
73+ CheckAlignment ( so ) ;
4774 }
4875} ) ;
4976
@@ -68,9 +95,11 @@ Task("libHarfBuzzSharp")
6895 WorkingDirectory = "libHarfBuzzSharp" ,
6996 } ) ;
7097
98+ var so = $ "libHarfBuzzSharp/libs/{ arch } /libHarfBuzzSharp.so";
7199 var outDir = OUTPUT_PATH . Combine ( arch ) ;
72100 EnsureDirectoryExists ( outDir ) ;
73- CopyFileToDirectory ( $ "libHarfBuzzSharp/libs/{ arch } /libHarfBuzzSharp.so", outDir ) ;
101+ CopyFileToDirectory ( so , outDir ) ;
102+ CheckAlignment ( so ) ;
74103 }
75104} ) ;
76105
0 commit comments