mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 16:26:10 +03:00
637 lines
18 KiB
Plaintext
637 lines
18 KiB
Plaintext
|
# Copyright 2015 The Chromium Authors. All rights reserved.
|
||
|
# Use of this source code is governed by a BSD-style license that can be
|
||
|
# found in the LICENSE file.
|
||
|
|
||
|
import("//build/config/compiler/compiler.gni")
|
||
|
import("//build/config/features.gni")
|
||
|
import("//build/config/nacl/config.gni")
|
||
|
import("//components/nacl/features.gni")
|
||
|
import("//ppapi/native_client/nacl_test_data.gni")
|
||
|
|
||
|
group("nacl") {
|
||
|
newlib = "//build/toolchain/nacl:clang_newlib_${target_cpu}"
|
||
|
pnacl = "//build/toolchain/nacl:newlib_pnacl"
|
||
|
data_deps = [
|
||
|
":exit_status_test($newlib)",
|
||
|
":exit_status_test($pnacl)",
|
||
|
":extension_validation_cache($newlib)",
|
||
|
":irt_exception_test($newlib)",
|
||
|
":irt_exception_test($pnacl)",
|
||
|
":irt_manifest_file($newlib)",
|
||
|
":pnacl_debug_url_test($pnacl)",
|
||
|
":pnacl_dyncode_syscall_disabled_test($pnacl)",
|
||
|
":pnacl_error_handling_test($pnacl)",
|
||
|
":pnacl_hw_eh_disabled_test($pnacl)",
|
||
|
":pnacl_mime_type_test($newlib)",
|
||
|
":pnacl_mime_type_test($pnacl)",
|
||
|
":pnacl_options_test($pnacl)",
|
||
|
":pnacl_url_loader_test($pnacl)",
|
||
|
":ppapi_bad_get_ppp_instance_crash($newlib)",
|
||
|
":ppapi_bad_no_ppp_instance($newlib)",
|
||
|
":ppapi_bad_ppp_initialize($newlib)",
|
||
|
":ppapi_bad_ppp_initialize_crash($newlib)",
|
||
|
":ppapi_bad_ppp_instance_didcreate($newlib)",
|
||
|
":ppapi_bad_ppp_instance_didcreate_crash($newlib)",
|
||
|
":ppapi_crash_in_callback($newlib)",
|
||
|
":ppapi_crash_in_callback($pnacl)",
|
||
|
":ppapi_crash_off_main_thread($newlib)",
|
||
|
":ppapi_crash_off_main_thread($pnacl)",
|
||
|
":ppapi_crash_ppapi_off_main_thread($newlib)",
|
||
|
":ppapi_crash_ppapi_off_main_thread($pnacl)",
|
||
|
":ppapi_crash_via_check_failure($newlib)",
|
||
|
":ppapi_crash_via_check_failure($pnacl)",
|
||
|
":ppapi_crash_via_exit_call($newlib)",
|
||
|
":ppapi_crash_via_exit_call($pnacl)",
|
||
|
":ppapi_extension_mime_handler($newlib)",
|
||
|
":ppapi_ppb_core($newlib)",
|
||
|
":ppapi_ppb_core($pnacl)",
|
||
|
":ppapi_ppb_instance($newlib)",
|
||
|
":ppapi_ppb_instance($pnacl)",
|
||
|
":ppapi_ppp_instance($newlib)",
|
||
|
":ppapi_ppp_instance($pnacl)",
|
||
|
":ppapi_progress_events($newlib)",
|
||
|
":ppapi_progress_events($pnacl)",
|
||
|
":shared_test_files($newlib)",
|
||
|
":shared_test_files($pnacl)",
|
||
|
":simple_test($newlib)",
|
||
|
":simple_test($pnacl)",
|
||
|
":sysconf_nprocessors_onln_test($newlib)",
|
||
|
":sysconf_nprocessors_onln_test($pnacl)",
|
||
|
]
|
||
|
if (target_cpu != "arm") {
|
||
|
data_deps += [ ":partly_invalid($newlib)" ]
|
||
|
}
|
||
|
if (target_cpu != "mipsel") {
|
||
|
glibc = "//build/toolchain/nacl:glibc_${target_cpu}"
|
||
|
data_deps += [
|
||
|
":exit_status_test($glibc)",
|
||
|
":extension_validation_cache($glibc)",
|
||
|
":irt_exception_test($glibc)",
|
||
|
":pnacl_mime_type_test($glibc)",
|
||
|
":ppapi_crash_in_callback($glibc)",
|
||
|
":ppapi_crash_off_main_thread($glibc)",
|
||
|
":ppapi_crash_ppapi_off_main_thread($glibc)",
|
||
|
":ppapi_crash_via_check_failure($glibc)",
|
||
|
":ppapi_crash_via_exit_call($glibc)",
|
||
|
":ppapi_ppb_core($glibc)",
|
||
|
":ppapi_ppb_instance($glibc)",
|
||
|
":ppapi_ppp_instance($glibc)",
|
||
|
":ppapi_progress_events($glibc)",
|
||
|
":shared_test_files($glibc)",
|
||
|
":simple_test($glibc)",
|
||
|
":sysconf_nprocessors_onln_test($glibc)",
|
||
|
]
|
||
|
}
|
||
|
if (is_linux && enable_nacl_nonsfi) {
|
||
|
nonsfi = "//build/toolchain/nacl:newlib_pnacl_nonsfi"
|
||
|
data_deps += [
|
||
|
":irt_exception_test($nonsfi)",
|
||
|
":irt_manifest_file($nonsfi)",
|
||
|
":shared_test_files($nonsfi)",
|
||
|
]
|
||
|
if (is_clang) {
|
||
|
data_deps += [ ":nonsfi_libc_free" ]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (is_nacl) {
|
||
|
copy("shared_test_files") {
|
||
|
sources = [
|
||
|
# TODO(ncbray) move into chrome/test/data/nacl when all tests are
|
||
|
# converted.
|
||
|
"//ppapi/native_client/tools/browser_tester/browserdata/nacltest.js",
|
||
|
|
||
|
# Files that aren't associated with any particular executable.
|
||
|
"bad/ppapi_bad.html",
|
||
|
"bad/ppapi_bad.js",
|
||
|
"bad/ppapi_bad_doesnotexist.nmf",
|
||
|
"bad/ppapi_bad_magic.nmf",
|
||
|
"bad/ppapi_bad_manifest_bad_files.nmf",
|
||
|
"bad/ppapi_bad_manifest_nexe_arch.nmf",
|
||
|
"bad/ppapi_bad_manifest_uses_nexes.nmf",
|
||
|
"bad/ppapi_bad_native.html",
|
||
|
"crash/ppapi_crash.js",
|
||
|
"crash/ppapi_crash_in_callback.html",
|
||
|
"crash/ppapi_crash_off_main_thread.html",
|
||
|
"crash/ppapi_crash_ppapi_off_main_thread.html",
|
||
|
"crash/ppapi_crash_via_check_failure.html",
|
||
|
"crash/ppapi_crash_via_exit_call.html",
|
||
|
"load_util.js",
|
||
|
"manifest_file/test_file.txt",
|
||
|
"progress_event_listener.js",
|
||
|
"simple_cc.js",
|
||
|
]
|
||
|
outputs = [
|
||
|
"${root_build_dir}/nacl_test_data/${nacl_toolchain_variant}/{{source_file_part}}",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
source_set("ppapi_test_lib") {
|
||
|
sources = [
|
||
|
"ppapi_test_lib/get_browser_interface.cc",
|
||
|
"ppapi_test_lib/get_browser_interface.h",
|
||
|
"ppapi_test_lib/internal_utils.cc",
|
||
|
"ppapi_test_lib/internal_utils.h",
|
||
|
"ppapi_test_lib/module_instance.cc",
|
||
|
"ppapi_test_lib/test_interface.cc",
|
||
|
"ppapi_test_lib/test_interface.h",
|
||
|
"ppapi_test_lib/testable_callback.cc",
|
||
|
"ppapi_test_lib/testable_callback.h",
|
||
|
]
|
||
|
deps = [
|
||
|
"//native_client/src/shared/gio",
|
||
|
"//native_client/src/shared/platform",
|
||
|
"//ppapi/native_client:ppapi_lib",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("irt_manifest_file") {
|
||
|
sources = [
|
||
|
"manifest_file/irt_manifest_file_test.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
nmfflags = [
|
||
|
"-xtest_file:test_file.txt",
|
||
|
"-xnmf says hello world:test_file.txt",
|
||
|
|
||
|
# There is no dummy_test_file.txt file intentionally. This is just for
|
||
|
# a test case where there is a manifest entry, but no actual file.
|
||
|
"-xdummy_test_file:dummy_test_file.txt",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "manifest_file/irt_manifest_file_test.html" ]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("irt_exception_test") {
|
||
|
sources = [
|
||
|
"irt_exception/irt_exception_test.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
libs = [ "nacl_exception" ]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "irt_exception/irt_exception_test.html" ]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (is_nacl && !is_nacl_nonsfi) {
|
||
|
nacl_test_data("simple_test") {
|
||
|
output_name = "simple"
|
||
|
sources = [
|
||
|
"simple.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "nacl_load_test.html" ]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("exit_status_test") {
|
||
|
output_name = "pm_exit_status_test"
|
||
|
sources = [
|
||
|
"exit_status/pm_exit_status_test.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "exit_status/pm_exit_status_test.html" ]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("extension_validation_cache") {
|
||
|
sources = [
|
||
|
"simple.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
|
||
|
# Need a new directory to not clash with with other extension
|
||
|
# tests's files (e.g., manifest.json).
|
||
|
destination_dir = "nacl_test_data/extension_vcache_test"
|
||
|
test_files = [
|
||
|
# TODO(ncbray) move into chrome/test/data/nacl when all tests are
|
||
|
# converted.
|
||
|
"//ppapi/native_client/tools/browser_tester/browserdata/nacltest.js",
|
||
|
"extension_validation_cache/extension_validation_cache.html",
|
||
|
"extension_validation_cache/extension_validation_cache.js",
|
||
|
|
||
|
# Turns the test data directory into an extension.
|
||
|
# Use a different nexe_destination_dir to isolate the files.
|
||
|
# Note that the .nexe names are embedded in this file.
|
||
|
"extension_validation_cache/manifest.json",
|
||
|
"load_util.js",
|
||
|
"simple_cc.js",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("sysconf_nprocessors_onln_test") {
|
||
|
sources = [
|
||
|
"sysconf_nprocessors_onln/sysconf_nprocessors_onln_test.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files =
|
||
|
[ "sysconf_nprocessors_onln/sysconf_nprocessors_onln_test.html" ]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_progress_events") {
|
||
|
sources = [
|
||
|
"progress_events/ppapi_progress_events.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "progress_events/ppapi_progress_events.html" ]
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_bad_ppp_initialize") {
|
||
|
sources = [
|
||
|
"bad/ppapi_bad_ppp_initialize.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_bad_ppp_initialize_crash") {
|
||
|
sources = [
|
||
|
"bad/ppapi_bad_ppp_initialize_crash.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_bad_no_ppp_instance") {
|
||
|
sources = [
|
||
|
"bad/ppapi_bad_no_ppp_instance.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//native_client/src/shared/platform",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_bad_get_ppp_instance_crash") {
|
||
|
sources = [
|
||
|
"bad/ppapi_bad_get_ppp_instance_crash.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_bad_ppp_instance_didcreate") {
|
||
|
sources = [
|
||
|
"bad/ppapi_bad_ppp_instance_didcreate.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_bad_ppp_instance_didcreate_crash") {
|
||
|
sources = [
|
||
|
"bad/ppapi_bad_ppp_instance_didcreate_crash.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_crash_via_check_failure") {
|
||
|
sources = [
|
||
|
"crash/ppapi_crash_via_check_failure.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_crash_via_exit_call") {
|
||
|
sources = [
|
||
|
"crash/ppapi_crash_via_exit_call.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_crash_in_callback") {
|
||
|
sources = [
|
||
|
"crash/ppapi_crash_in_callback.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_crash_off_main_thread") {
|
||
|
sources = [
|
||
|
"crash/ppapi_crash_off_main_thread.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_crash_ppapi_off_main_thread") {
|
||
|
sources = [
|
||
|
"crash/ppapi_crash_ppapi_off_main_thread.cc",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_extension_mime_handler") {
|
||
|
sources = [
|
||
|
"extension_mime_handler/ppapi_extension_mime_handler.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [
|
||
|
"extension_mime_handler/ppapi_extension_mime_handler.html",
|
||
|
"extension_mime_handler/mime_test_data.dat",
|
||
|
|
||
|
# For faking the file's MIME type.
|
||
|
"extension_mime_handler/mime_test_data.dat.mock-http-headers",
|
||
|
|
||
|
# Turns the test data directory into an extension. Hackish.
|
||
|
# Note that the .nexe names are embedded in this file.
|
||
|
"extension_mime_handler/manifest.json",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("pnacl_debug_url_test") {
|
||
|
output_name = "pnacl_debug_url"
|
||
|
sources = [
|
||
|
"simple.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
generate_nmf = false
|
||
|
if (current_cpu == "pnacl") {
|
||
|
debug_pexe = true
|
||
|
}
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [
|
||
|
"pnacl_debug_url/pnacl_debug_url.html",
|
||
|
"pnacl_debug_url/pnacl_has_debug.nmf",
|
||
|
"pnacl_debug_url/pnacl_has_debug_flag_off.nmf",
|
||
|
"pnacl_debug_url/pnacl_no_debug.nmf",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("pnacl_error_handling_test") {
|
||
|
output_name = "pnacl_errors"
|
||
|
sources = [
|
||
|
"simple.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
generate_nmf = false
|
||
|
if (current_cpu == "pnacl") {
|
||
|
nonstable_pexe = true
|
||
|
}
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [
|
||
|
"pnacl_error_handling/pnacl_error_handling.html",
|
||
|
"pnacl_error_handling/bad.pexe",
|
||
|
"pnacl_error_handling/pnacl_bad_pexe.nmf",
|
||
|
"pnacl_error_handling/pnacl_bad_pexe_O0.nmf",
|
||
|
"pnacl_error_handling/pnacl_bad_doesnotexist.nmf",
|
||
|
"pnacl_error_handling/pnacl_illformed_manifest.nmf",
|
||
|
"pnacl_error_handling/pnacl_nonfinal_pexe_O0.nmf",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
copy("pnacl_mime_type_test") {
|
||
|
sources = [
|
||
|
"pnacl_mime_type/pnacl_mime_type.html",
|
||
|
]
|
||
|
outputs = [
|
||
|
"${root_build_dir}/nacl_test_data/${nacl_toolchain_variant}/{{source_file_part}}",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("pnacl_options_test") {
|
||
|
output_name = "pnacl_options"
|
||
|
sources = [
|
||
|
"simple.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
generate_nmf = false
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [
|
||
|
"pnacl_nmf_options/pnacl_options.html",
|
||
|
"pnacl_nmf_options/pnacl_o_0.nmf",
|
||
|
"pnacl_nmf_options/pnacl_o_2.nmf",
|
||
|
"pnacl_nmf_options/pnacl_o_large.nmf",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("pnacl_url_loader_test") {
|
||
|
output_name = "pnacl_url_loader"
|
||
|
sources = [
|
||
|
"pnacl_url_loader/pnacl_url_loader.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
"//ppapi/cpp",
|
||
|
]
|
||
|
generate_nmf = true
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "pnacl_url_loader/pnacl_url_loader.html" ]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("pnacl_dyncode_syscall_disabled_test") {
|
||
|
output_name = "pnacl_dyncode_syscall_disabled"
|
||
|
sources = [
|
||
|
"pnacl_dyncode_syscall_disabled/pnacl_dyncode_syscall_disabled.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
"//native_client/src/untrusted/nacl:nacl_dyncode_private",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files =
|
||
|
[ "pnacl_dyncode_syscall_disabled/pnacl_dyncode_syscall_disabled.html" ]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("pnacl_hw_eh_disabled_test") {
|
||
|
output_name = "pnacl_hw_eh_disabled"
|
||
|
sources = [
|
||
|
"pnacl_hw_eh_disabled/pnacl_hw_eh_disabled.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
"//native_client/src/untrusted/nacl:nacl_exception_private",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "pnacl_hw_eh_disabled/pnacl_hw_eh_disabled.html" ]
|
||
|
}
|
||
|
|
||
|
# Legacy NaCl PPAPI interface tests being here.
|
||
|
nacl_test_data("ppapi_ppb_core") {
|
||
|
sources = [
|
||
|
"ppapi/ppb_core/ppapi_ppb_core.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "ppapi/ppb_core/ppapi_ppb_core.html" ]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_ppb_instance") {
|
||
|
sources = [
|
||
|
"ppapi/ppb_instance/ppapi_ppb_instance.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [ "ppapi/ppb_instance/ppapi_ppb_instance.html" ]
|
||
|
}
|
||
|
|
||
|
nacl_test_data("ppapi_ppp_instance") {
|
||
|
sources = [
|
||
|
"ppapi/ppp_instance/ppapi_ppp_instance.cc",
|
||
|
]
|
||
|
deps = [
|
||
|
":ppapi_test_lib",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
test_files = [
|
||
|
"ppapi/ppp_instance/ppapi_ppp_instance.html",
|
||
|
"ppapi/ppp_instance/ppapi_ppp_instance.js",
|
||
|
]
|
||
|
}
|
||
|
|
||
|
if (target_cpu != "arm") {
|
||
|
# Source file does not have asm for ARM.
|
||
|
nacl_test_data("partly_invalid") {
|
||
|
sources = [
|
||
|
"//native_client/tests/stubout_mode/partly_invalid.c",
|
||
|
]
|
||
|
destination_dir = "nacl_test_data"
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (is_linux && is_clang) {
|
||
|
if (target_cpu == "x86") {
|
||
|
arch = "x86_32"
|
||
|
} else if (target_cpu == "x64") {
|
||
|
arch = "x86_64"
|
||
|
} else {
|
||
|
arch = target_cpu
|
||
|
}
|
||
|
|
||
|
config("nonsfi_libc_free_nexe_config") {
|
||
|
cflags = [
|
||
|
"-Wno-sign-compare",
|
||
|
|
||
|
# Stack-Smashing protector does not work with libc-free context.
|
||
|
"-fno-stack-protector",
|
||
|
|
||
|
# Optimizers may translate the original code to code which
|
||
|
# requires builtin functions and/or relocations. Specifically,
|
||
|
# the LLVM's optimizer translates for-loop based zero
|
||
|
# clear to memset.
|
||
|
"-O0",
|
||
|
|
||
|
# ARM GCC emits symbols like __aeabi_unwind_cpp_pr0 in
|
||
|
# .exidx sections without this flag.
|
||
|
"-fno-unwind-tables",
|
||
|
]
|
||
|
|
||
|
# Workaround against LLVM bug.
|
||
|
# In short, an LTO optimization pass might recognize
|
||
|
# naive implementations of builtins (such as memset)
|
||
|
# and replace them with references to the real builtins,
|
||
|
# which, in the case of -nostdlib, might cause the binary
|
||
|
# to get undefined references to those symbols.
|
||
|
#
|
||
|
# See more details:
|
||
|
# https://llvm.org/bugs/show_bug.cgi?id=30403
|
||
|
if (use_thin_lto) {
|
||
|
if (use_lld) {
|
||
|
ldflags = [ "-Wl,--lto-O0" ]
|
||
|
} else {
|
||
|
ldflags = [ "-Wl,-plugin-opt,O0" ]
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
executable("nonsfi_libc_free_nexe") {
|
||
|
output_name = "libc_free_$arch"
|
||
|
output_extension = "nexe"
|
||
|
sources = [
|
||
|
"nonsfi/libc_free.c",
|
||
|
]
|
||
|
|
||
|
no_default_deps = true
|
||
|
|
||
|
# Here, we would like to link a relocatable, libc-free executable.
|
||
|
# -shared/-fPIC make this binary relocatable. -nostdlib ensures
|
||
|
# this is libc-free.
|
||
|
# The program does not apply any dynamic relocations at start up,
|
||
|
# so it cannot rely on relocations having been applied.
|
||
|
# In addition, -fvisibility=hidden avoids creating some types
|
||
|
# of relocation.
|
||
|
cflags = [
|
||
|
"-fPIC",
|
||
|
"-fvisibility=hidden",
|
||
|
]
|
||
|
ldflags = [
|
||
|
"-nostdlib",
|
||
|
"-shared",
|
||
|
|
||
|
# This binary cannot relocate itself, so we should have no
|
||
|
# undefined references left.
|
||
|
"-Wl,--no-undefined",
|
||
|
|
||
|
# Silence the warning about the unused '-pthread' argument.
|
||
|
# TODO(gn): Come up with a way to remove the -pthread flag instead.
|
||
|
"-Qunused-arguments",
|
||
|
]
|
||
|
defines = [ "NACL_LINUX=1" ]
|
||
|
include_dirs = [ "../../../.." ]
|
||
|
|
||
|
# Do not use any sanitizers or coverage tools, which require a few symbols.
|
||
|
configs -= [ "//build/config/sanitizers:default_sanitizer_flags" ]
|
||
|
configs -= [ "//build/config/coverage:default_coverage" ]
|
||
|
configs += [ ":nonsfi_libc_free_nexe_config" ]
|
||
|
}
|
||
|
|
||
|
copy("nonsfi_libc_free") {
|
||
|
sources = [
|
||
|
"${root_out_dir}/libc_free_${arch}.nexe",
|
||
|
|
||
|
# TODO(ncbray) move into chrome/test/data/nacl when all tests are
|
||
|
# converted.
|
||
|
"//ppapi/native_client/tools/browser_tester/browserdata/nacltest.js",
|
||
|
"nonsfi/irt_test.html",
|
||
|
"nonsfi/libc_free.html",
|
||
|
"nonsfi/libc_free.nmf",
|
||
|
]
|
||
|
outputs = [
|
||
|
"${root_build_dir}/nacl_test_data/libc-free/{{source_file_part}}",
|
||
|
]
|
||
|
deps = [
|
||
|
":nonsfi_libc_free_nexe",
|
||
|
]
|
||
|
}
|
||
|
}
|