|  | # 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. | 
|  |  | 
|  | config("platform_configuration") { | 
|  | configs = [ "//starboard/build/config/sabi" ] | 
|  | 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", | 
|  |  | 
|  | # Mimic build/cmake/android.toolchain.cmake in the Android NDK. | 
|  | "-Wl,--exclude-libs,libunwind.a", | 
|  | ] | 
|  | cflags = [] | 
|  |  | 
|  | if (current_toolchain == host_toolchain) { | 
|  | cflags += [ "-O2" ] | 
|  | } | 
|  | if (is_debug) { | 
|  | cflags += [ | 
|  | "-frtti", | 
|  | "-O0", | 
|  | ] | 
|  | } else if (is_devel) { | 
|  | cflags += [ | 
|  | "-frtti", | 
|  | "-O2", | 
|  | ] | 
|  | } else { | 
|  | cflags += [ | 
|  | "-fno-rtti", | 
|  | "-gline-tables-only", | 
|  | ] | 
|  | } | 
|  |  | 
|  | libs = [ | 
|  | "EGL", | 
|  | "GLESv2", | 
|  | "OpenSLES", | 
|  | "android", | 
|  | "log", | 
|  | "mediandk", | 
|  | ] | 
|  |  | 
|  | if (!cobalt_fastbuild && (is_debug || is_devel)) { | 
|  | cflags += [ "-g" ] | 
|  | } | 
|  |  | 
|  | if (sb_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", | 
|  | ] | 
|  | } | 
|  |  | 
|  | 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" ] | 
|  | } | 
|  |  | 
|  | if (current_toolchain != host_toolchain) { | 
|  | 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", | 
|  | "-fno-exceptions", | 
|  | "-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" ] | 
|  | } |