mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-28 08:16:09 +03:00
188 lines
5.2 KiB
Plaintext
188 lines
5.2 KiB
Plaintext
# Copyright 2018 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.
|
|
|
|
# This provides the nasm_assemble() template which uses NASM to assemble
|
|
# assembly files.
|
|
#
|
|
# Files to be assembled with NASM should have an extension of .asm.
|
|
#
|
|
# Parameters
|
|
#
|
|
# nasm_flags (optional)
|
|
# [list of strings] Pass additional flags into NASM. These are appended
|
|
# to the command line. Note that the output format is already set up
|
|
# based on the current toolchain so you don't need to specify these
|
|
# things (see below).
|
|
#
|
|
# Example: nasm_flags = [ "-Wall" ]
|
|
#
|
|
# include_dirs (optional)
|
|
# [list of dir names] List of additional include dirs. Note that the
|
|
# source root and the root generated file dir is always added, just like
|
|
# our C++ build sets up.
|
|
#
|
|
# Example: include_dirs = [ "//some/other/path", target_gen_dir ]
|
|
#
|
|
# defines (optional)
|
|
# [list of strings] List of defines, as with the native code defines.
|
|
#
|
|
# Example: defines = [ "FOO", "BAR=1" ]
|
|
#
|
|
# inputs, deps, visibility (optional)
|
|
# These have the same meaning as in an action.
|
|
#
|
|
# Example
|
|
#
|
|
# nasm_assemble("my_nasm_target") {
|
|
# sources = [
|
|
# "ultra_optimized_awesome.asm",
|
|
# ]
|
|
# include_dirs = [ "assembly_include" ]
|
|
# }
|
|
|
|
import("//build/compiled_action.gni")
|
|
import("//build/config/ios/config.gni")
|
|
import("//build/config/ios/ios_sdk_overrides.gni")
|
|
if (is_mac) {
|
|
import("//build/config/mac/mac_sdk.gni")
|
|
}
|
|
|
|
if ((is_mac || is_ios) && (current_cpu == "x86" || current_cpu == "x64")) {
|
|
if (current_cpu == "x86") {
|
|
_nasm_flags = [ "-fmacho32" ]
|
|
} else if (current_cpu == "x64") {
|
|
_nasm_flags = [ "-fmacho64" ]
|
|
}
|
|
if (is_mac) {
|
|
_nasm_flags += [ "--macho-min-os=macos$mac_deployment_target" ]
|
|
} else if (is_ios) {
|
|
if (target_environment == "device") {
|
|
_nasm_flags += [ "--macho-min-os=ios$ios_deployment_target" ]
|
|
} else {
|
|
_nasm_flags +=
|
|
[ "--macho-min-os=ios$ios_deployment_target-$target_environment" ]
|
|
}
|
|
}
|
|
} else if (is_posix || is_fuchsia) {
|
|
if (current_cpu == "x86") {
|
|
_nasm_flags = [ "-felf32" ]
|
|
} else if (current_cpu == "x64") {
|
|
_nasm_flags = [
|
|
"-DPIC",
|
|
"-felf64",
|
|
]
|
|
}
|
|
} else if (is_win) {
|
|
if (current_cpu == "x86") {
|
|
_nasm_flags = [
|
|
"-DPREFIX",
|
|
"-fwin32",
|
|
]
|
|
} else if (current_cpu == "x64") {
|
|
_nasm_flags = [ "-fwin64" ]
|
|
}
|
|
}
|
|
|
|
if (is_win) {
|
|
asm_obj_extension = "obj"
|
|
} else {
|
|
asm_obj_extension = "o"
|
|
}
|
|
|
|
template("nasm_assemble") {
|
|
assert(defined(invoker.sources), "Need sources defined for $target_name")
|
|
|
|
# Only depend on NASM on x86 systems. Force compilation of .asm files for
|
|
# ARM to fail.
|
|
assert(current_cpu == "x86" || current_cpu == "x64")
|
|
|
|
action_name = "${target_name}_action"
|
|
source_set_name = target_name
|
|
|
|
compiled_action_foreach(action_name) {
|
|
# Only the source set can depend on this.
|
|
visibility = [ ":$source_set_name" ]
|
|
|
|
tool = "//third_party/nasm"
|
|
|
|
forward_variables_from(invoker,
|
|
[
|
|
"sources",
|
|
"inputs",
|
|
"deps",
|
|
])
|
|
|
|
# Flags.
|
|
args = _nasm_flags
|
|
if (defined(invoker.nasm_flags)) {
|
|
args += invoker.nasm_flags
|
|
}
|
|
|
|
# User defined include dirs go first.
|
|
if (defined(invoker.include_dirs)) {
|
|
foreach(include, invoker.include_dirs) {
|
|
# NASM does not append path separators when processing the -I flags, so
|
|
# -Ifoo means includes of bar look up "foobar" rather than "foo/bar".
|
|
# Add the trailing slash for it.
|
|
args += [ "-I" + rebase_path(include, root_build_dir) + "/" ]
|
|
}
|
|
}
|
|
|
|
# Default nasm include dirs. Make it match the native build (source root and
|
|
# root generated code directory).
|
|
# This goes to the end of include list. Note that, as above, we must append
|
|
# path separators because NASM does not do it itself.
|
|
args += [
|
|
"-I./",
|
|
|
|
# rebase_path("//") already includes a trailing slash.
|
|
"-I" + rebase_path("//", root_build_dir),
|
|
"-I" + rebase_path(root_gen_dir, root_build_dir) + "/",
|
|
]
|
|
|
|
# Extra defines.
|
|
if (defined(invoker.defines)) {
|
|
foreach(def, invoker.defines) {
|
|
args += [ "-D$def" ]
|
|
}
|
|
}
|
|
|
|
# Output file.
|
|
outputs = [
|
|
"$target_out_dir/$source_set_name/{{source_name_part}}.o",
|
|
]
|
|
args += [
|
|
"-MD",
|
|
rebase_path(outputs[0] + ".d", root_build_dir),
|
|
"-o",
|
|
rebase_path(outputs[0], root_build_dir),
|
|
"{{source}}",
|
|
]
|
|
|
|
depfile = outputs[0] + ".d"
|
|
}
|
|
|
|
# Gather the .o files into a linkable thing. This doesn't actually link
|
|
# anything (a source set just compiles files to link later), but will pass
|
|
# the object files generated by the action up the dependency chain.
|
|
static_library(source_set_name) {
|
|
if (defined(invoker.visibility)) {
|
|
visibility = invoker.visibility
|
|
}
|
|
|
|
if (defined(invoker.all_dependent_configs)) {
|
|
all_dependent_configs = invoker.all_dependent_configs
|
|
}
|
|
|
|
sources = get_target_outputs(":$action_name")
|
|
|
|
# Do not publicize any header to remove build dependency.
|
|
public = []
|
|
|
|
deps = [
|
|
":$action_name",
|
|
]
|
|
}
|
|
}
|