aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--BUILD.gn7
-rw-r--r--gn/BUILD.gn30
-rw-r--r--gn/BUILDCONFIG.gn50
-rw-r--r--third_party/libwebp/BUILD.gn23
4 files changed, 93 insertions, 17 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 8c053cfbb9..02cb350d57 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -215,6 +215,12 @@ opts("avx") {
cflags = [ "-mavx" ]
}
+opts("dsp") {
+ enabled = current_cpu == "mipsel"
+ sources = opts_gypi.mips_dsp_sources
+ cflags = [ "-Wno-deprecated-register" ] # FIXME
+}
+
# Any feature of Skia that requires third-party code should be optional and use this template.
template("optional") {
if (invoker.enabled) {
@@ -334,6 +340,7 @@ component("skia") {
":armv7",
":avx",
":crc32",
+ ":dsp",
":gif",
":jpeg",
":none",
diff --git a/gn/BUILD.gn b/gn/BUILD.gn
index 0a56fa206f..fc518ffc59 100644
--- a/gn/BUILD.gn
+++ b/gn/BUILD.gn
@@ -4,10 +4,12 @@
# found in the LICENSE file.
declare_args() {
+ ar = "ar"
cc = "cc"
cxx = "c++"
if (is_android) {
+ ar = "$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin/ar"
cc = "$ndk/toolchains/llvm/prebuilt/$ndk_host/bin/clang"
cxx = "$ndk/toolchains/llvm/prebuilt/$ndk_host/bin/clang++"
}
@@ -48,14 +50,27 @@ config("default") {
"-Wnon-virtual-dtor",
]
if (current_cpu == "arm") {
- cflags += [ "-mfpu=neon" ]
+ cflags += [
+ "-march=armv7-a",
+ "-mfpu=neon",
+ "-mthumb",
+ ]
+ } else if (current_cpu == "mipsel") {
+ cflags += [
+ "-march=mips32r2",
+ "-mdspr2",
+ ]
}
if (is_android) {
- asmflags = [ "--target=$ndk_target" ]
+ asmflags = [
+ "--target=$ndk_target",
+ "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin",
+ ]
cflags += [
"--sysroot=$ndk/platforms/$ndk_platform",
"--target=$ndk_target",
+ "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin",
]
cflags_cc += [
"-isystem$ndk/sources/android/support/include",
@@ -64,12 +79,12 @@ config("default") {
ldflags = [
"--sysroot=$ndk/platforms/$ndk_platform",
"--target=$ndk_target",
- "-B$ndk/toolchains/$ndk_target-4.9/prebuilt/$ndk_host/$ndk_target/bin",
+ "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin",
"-pie",
]
lib_dirs = [
"$ndk/sources/cxx-stl/llvm-libc++/libs/$ndk_stdlib",
- "$ndk/toolchains/$ndk_target-4.9/prebuilt/$ndk_host/lib/gcc/$ndk_target/4.9.x",
+ "$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/lib/gcc/$ndk_target/4.9.x",
]
libs = [
# Order matters here! Keep these three in exactly this order.
@@ -77,6 +92,9 @@ config("default") {
"c++abi",
"android_support",
]
+ if (target_cpu == "arm") {
+ libs += [ "unwind" ]
+ }
}
if (is_linux) {
@@ -136,13 +154,13 @@ toolchain("gcc_like") {
}
tool("alink") {
- command = "rm -f {{output}} && ar rcs {{output}} {{inputs}}"
+ command = "rm -f {{output}} && $ar rcs {{output}} {{inputs}}"
outputs = [
"{{root_out_dir}}/{{target_output_name}}{{output_extension}}",
]
default_output_extension = ".a"
output_prefix = "lib"
- description = "ar {{output}} ..."
+ description = "$ar {{output}} ..."
}
tool("solink") {
diff --git a/gn/BUILDCONFIG.gn b/gn/BUILDCONFIG.gn
index 6aa4451e59..10f3244f55 100644
--- a/gn/BUILDCONFIG.gn
+++ b/gn/BUILDCONFIG.gn
@@ -22,9 +22,16 @@ if (current_os == "") {
current_os = target_os
}
+is_android = current_os == "android"
+is_fuchsia = current_os == "fuchsia"
+is_ios = current_os == "ios"
+is_linux = current_os == "linux"
+is_mac = current_os == "mac"
+is_win = current_os == "win"
+
if (target_cpu == "") {
target_cpu = host_cpu
- if (ndk != "") {
+ if (is_android) {
target_cpu = "arm64"
}
}
@@ -32,28 +39,49 @@ if (current_cpu == "") {
current_cpu = target_cpu
}
-is_android = current_os == "android"
-is_fuchsia = current_os == "fuchsia"
-is_ios = current_os == "ios"
-is_linux = current_os == "linux"
-is_mac = current_os == "mac"
-is_win = current_os == "win"
-
-is_posix = !is_win
-
if (is_android) {
ndk_host = ""
ndk_target = ""
ndk_platform = ""
ndk_stdlib = ""
+ nkd_gccdir = ""
- if (host_os == "linux" && host_cpu == "x64") {
+ if (host_os == "linux") {
ndk_host = "linux-x86_64"
+ } else if (host_os == "mac") {
+ ndk_host = "darwin-x86_64"
}
+
if (target_cpu == "arm64") {
ndk_target = "aarch64-linux-android"
ndk_platform = "android-21/arch-arm64"
ndk_stdlib = "arm64-v8a"
+ ndk_gccdir = ndk_target
+ } else if (target_cpu == "arm") {
+ ndk_target = "arm-linux-androideabi"
+ ndk_platform = "android-18/arch-arm"
+ ndk_stdlib = "armeabi-v7a"
+ ndk_gccdir = ndk_target
+ } else if (target_cpu == "mips64el") {
+ ndk_target = "mips64el-linux-android"
+ ndk_platform = "android-21/arch-mips64"
+ ndk_stdlib = "mips64"
+ ndk_gccdir = ndk_target
+ } else if (target_cpu == "mipsel") {
+ ndk_target = "mipsel-linux-android"
+ ndk_platform = "android-18/arch-mips"
+ ndk_stdlib = "mips"
+ ndk_gccdir = ndk_target
+ } else if (target_cpu == "x64") {
+ ndk_target = "x86_64-linux-android"
+ ndk_platform = "android-21/arch-x86_64"
+ ndk_stdlib = "x86_64"
+ ndk_gccdir = ndk_stdlib
+ } else if (target_cpu == "x86") {
+ ndk_target = "i686-linux-android"
+ ndk_platform = "android-18/arch-x86"
+ ndk_stdlib = "x86"
+ ndk_gccdir = ndk_stdlib
}
}
diff --git a/third_party/libwebp/BUILD.gn b/third_party/libwebp/BUILD.gn
index 7f7901e754..ec51cd3b38 100644
--- a/third_party/libwebp/BUILD.gn
+++ b/third_party/libwebp/BUILD.gn
@@ -11,6 +11,12 @@ import("../third_party.gni")
third_party("libwebp") {
public_include_dirs = [ "../externals/libwebp/src" ]
+ if (is_android) {
+ deps = [
+ "//third_party/cpu-features",
+ ]
+ }
+
defines = [
# WebP naturally decodes to RGB_565, and we work with BGR_565.
# This makes WebP decode to BGR_565 when we ask for RGB_565.
@@ -32,39 +38,56 @@ third_party("libwebp") {
"../externals/libwebp/src/dec/webp.c",
"../externals/libwebp/src/demux/demux.c",
"../externals/libwebp/src/dsp/alpha_processing.c",
+ "../externals/libwebp/src/dsp/alpha_processing_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/alpha_processing_sse2.c",
"../externals/libwebp/src/dsp/alpha_processing_sse41.c",
"../externals/libwebp/src/dsp/argb.c",
+ "../externals/libwebp/src/dsp/argb_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/argb_sse2.c",
"../externals/libwebp/src/dsp/cost.c",
+ "../externals/libwebp/src/dsp/cost_mips32.c",
+ "../externals/libwebp/src/dsp/cost_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/cost_sse2.c",
"../externals/libwebp/src/dsp/cpu.c",
"../externals/libwebp/src/dsp/dec.c",
"../externals/libwebp/src/dsp/dec_clip_tables.c",
+ "../externals/libwebp/src/dsp/dec_mips32.c",
+ "../externals/libwebp/src/dsp/dec_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/dec_neon.c",
"../externals/libwebp/src/dsp/dec_sse2.c",
"../externals/libwebp/src/dsp/dec_sse41.c",
"../externals/libwebp/src/dsp/enc.c",
"../externals/libwebp/src/dsp/enc_avx2.c",
+ "../externals/libwebp/src/dsp/enc_mips32.c",
+ "../externals/libwebp/src/dsp/enc_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/enc_neon.c",
"../externals/libwebp/src/dsp/enc_sse2.c",
"../externals/libwebp/src/dsp/enc_sse41.c",
"../externals/libwebp/src/dsp/filters.c",
+ "../externals/libwebp/src/dsp/filters_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/filters_sse2.c",
"../externals/libwebp/src/dsp/lossless.c",
"../externals/libwebp/src/dsp/lossless_enc.c",
+ "../externals/libwebp/src/dsp/lossless_enc_mips32.c",
+ "../externals/libwebp/src/dsp/lossless_enc_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/lossless_enc_neon.c",
"../externals/libwebp/src/dsp/lossless_enc_sse2.c",
"../externals/libwebp/src/dsp/lossless_enc_sse41.c",
+ "../externals/libwebp/src/dsp/lossless_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/lossless_neon.c",
"../externals/libwebp/src/dsp/lossless_sse2.c",
"../externals/libwebp/src/dsp/rescaler.c",
+ "../externals/libwebp/src/dsp/rescaler_mips32.c",
+ "../externals/libwebp/src/dsp/rescaler_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/rescaler_neon.c",
"../externals/libwebp/src/dsp/rescaler_sse2.c",
"../externals/libwebp/src/dsp/upsampling.c",
+ "../externals/libwebp/src/dsp/upsampling_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/upsampling_neon.c",
"../externals/libwebp/src/dsp/upsampling_sse2.c",
"../externals/libwebp/src/dsp/yuv.c",
+ "../externals/libwebp/src/dsp/yuv_mips32.c",
+ "../externals/libwebp/src/dsp/yuv_mips_dsp_r2.c",
"../externals/libwebp/src/dsp/yuv_sse2.c",
"../externals/libwebp/src/enc/alpha.c",
"../externals/libwebp/src/enc/analysis.c",