| # Copyright 2021 The Cobalt Authors. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import("//starboard/android/shared/toolchain/toolchain.gni") |
| |
| config("platform_configuration") { |
| configs = [ "//starboard/build/config/sabi" ] |
| cflags = [] |
| |
| if (current_toolchain == host_toolchain) { |
| cflags += [ "-O2" ] |
| } else { |
| defines = [] |
| ldflags = [ |
| # The NDK default "ld" is actually the gold linker for all architectures |
| # except arm64 (aarch64) where it"s the bfd linker. Don"t use either of |
| # those, rather use lld everywhere. See release notes for NDK 19: |
| # https://developer.android.com/ndk/downloads/revision_history |
| "-fuse-ld=lld", |
| ] |
| if (is_debug) { |
| cflags += [ "-O0" ] |
| configs += [ "//build/config/compiler:rtti" ] |
| } else if (is_devel) { |
| cflags += [ "-O2" ] |
| configs += [ "//build/config/compiler:rtti" ] |
| } else { |
| cflags += [ "-gline-tables-only" ] |
| } |
| |
| libs = [ |
| "EGL", |
| "GLESv2", |
| "OpenSLES", |
| "android", |
| "log", |
| "mediandk", |
| ] |
| |
| if (!cobalt_fastbuild && (is_debug || is_devel)) { |
| cflags += [ "-g" ] |
| } |
| |
| if (use_asan) { |
| cflags += [ |
| "-fsanitize=address", |
| "-fno-omit-frame-pointer", |
| ] |
| ldflags += [ |
| "-fsanitize=address", |
| |
| # Force linking of the helpers in sanitizer_options.cc |
| "-Wl,-u_sanitizer_options_link_helper", |
| ] |
| defines += [ "ADDRESS_SANITIZER" ] |
| } else if (use_tsan) { |
| cflags += [ |
| "-fsanitize=thread", |
| "-fno-omit-frame-pointer", |
| ] |
| ldflags += [ "-fsanitize=thread" ] |
| defines += [ "THREAD_SANITIZER" ] |
| } |
| |
| cflags_cc = [ "-std=c++14" ] |
| cflags += [ |
| # libwebp uses the cpufeatures library to detect ARM NEON support |
| "-I${android_ndk_path}/sources/android/cpufeatures", |
| |
| # Mimic build/cmake/android.toolchain.cmake in the Android NDK. |
| "-ffunction-sections", |
| "-funwind-tables", |
| "-fstack-protector-strong", |
| "-no-canonical-prefixes", |
| |
| # Other flags |
| "-fsigned-char", |
| "-fno-limit-debug-info", |
| "-fcolor-diagnostics", |
| "-fno-strict-aliasing", # See http://crbug.com/32204 |
| |
| # Default visibility is hidden to enable dead stripping. |
| "-fvisibility=hidden", |
| |
| # Any warning will stop the build. |
| "-Werror", |
| |
| # Disable errors for the warning till the Android NDK r19 is fixed. |
| # The warning is trigger when compiling .c files and complains for |
| # "-stdlib=libc++" which is added by the NDK. |
| "-Wno-error=unused-command-line-argument", |
| |
| # Don"t warn about register variables (in base and net) |
| "-Wno-deprecated-register", |
| |
| # Don"t warn about deprecated ICU methods (in googleurl and net) |
| "-Wno-deprecated-declarations", |
| |
| # Skia doesn"t use overrides. |
| "-Wno-inconsistent-missing-override", |
| |
| # shifting a negative signed value is undefined |
| "-Wno-shift-negative-value", |
| |
| # Don"t warn for implicit sign conversions. (in v8 and protobuf) |
| "-Wno-sign-conversion", |
| ] |
| defines += [ |
| # Enable compile-time decisions based on the ABI |
| "ANDROID_ABI=$android_abi", |
| |
| # -DANDROID is an argument to some ifdefs in the NDK"s eglplatform.h |
| "ANDROID", |
| |
| # Cobalt on Linux flag |
| "COBALT_LINUX", |
| |
| # So that we get the PRI* macros from inttypes.h |
| "__STDC_FORMAT_MACROS", |
| |
| # Enable GNU extensions to get prototypes like ffsl. |
| "_GNU_SOURCE=1", |
| |
| # Undefining __linux__ causes the system headers to make wrong |
| # assumptions about which C-library is used on the platform. |
| "__BIONIC__", |
| |
| # Undefining __linux__ leaves libc++ without a threads implementation. |
| # TODO: See if there"s a way to make libcpp threading use Starboard. |
| "_LIBCPP_HAS_THREAD_API_PTHREAD", |
| ] |
| ldflags += [ |
| # Use the static LLVM libc++. |
| "-static-libstdc++", |
| |
| # Mimic build/cmake/android.toolchain.cmake in the Android NDK, but |
| # force build-id to sha1, so that older lldb versions can still find |
| # debugsymbols, see https://github.com/android-ndk/ndk/issues/885 |
| "-Wl,--build-id=sha1", |
| "-Wl,--warn-shared-textrel", |
| "-Wl,--fatal-warnings", |
| "-Wl,--gc-sections", |
| "-Wl,-z,nocopyreloc", |
| |
| # Wrapper synchronizes punch-out video bounds with the UI frame. |
| "-Wl,--wrap=eglSwapBuffers", |
| ] |
| } |
| } |
| |
| config("size") { |
| cflags = [ "-Os" ] |
| } |
| |
| config("speed") { |
| cflags = [ "-O2" ] |
| } |
| |
| config("executable_config") { |
| cflags = [ "-fPIE" ] |
| ldflags = [ "-pie" ] |
| } |
| |
| config("library_config") { |
| cflags = [ "-fPIC" ] |
| } |
| |
| config("pedantic_warnings") { |
| cflags = [ |
| "-Wall", |
| "-Wextra", |
| "-Wunreachable-code", |
| |
| # Don't get pedantic about warnings from base macros. These must be |
| # disabled after the -Wall above, so this has to be done here rather |
| # than in the platform's target toolchain. |
| # TODO: Rebase base and use static_assert instead of COMPILE_ASSERT |
| "-Wno-unused-local-typedef", # COMPILE_ASSERT |
| "-Wno-missing-field-initializers", # LAZY_INSTANCE_INITIALIZER |
| |
| # It's OK not to use some input parameters. Note that the order |
| # matters: Wall implies Wunused-parameter and Wno-unused-parameter |
| # has no effect if specified before Wall. |
| "-Wno-unused-parameter", |
| ] |
| } |