| # Copyright 2014 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. |
| |
| declare_args() { |
| # By default, there is no go build tool, because go builds are not supported. |
| go_build_tool = "" |
| } |
| |
| # Declare a go test binary target. |
| # |
| # The target generates a go test executable, linking against other C code, |
| # which is compiled into a static library and linked against Go. |
| # |
| # Only works on linux. |go_build_tool| must be set to the absolute path |
| # of the go build tool. |
| # |
| # Variables (all required) |
| # sources: list of .go files to compile |
| # static_library_sources: list of C sources needed for the static library |
| # deps: dependencies for the static library |
| |
| template("go_test_binary") { |
| # Only available on linux for now. |
| assert(is_linux) |
| assert(defined(invoker.sources)) |
| assert(go_build_tool != "") |
| |
| static_library_name = target_name + "_static_library" |
| |
| static_library(static_library_name) { |
| sources = invoker.static_library_sources |
| deps = invoker.deps |
| complete_static_lib = true |
| } |
| |
| action(target_name) { |
| deps = [ |
| ":$static_library_name", |
| ] |
| script = "//build/go/go.py" |
| outputs = [ "${target_out_dir}/${target_name}" ] |
| # Since go test does not permit specifying an output directory or output |
| # binary name, we create a temporary build directory, and the python |
| # script will later identify the output, copy it to the target location, |
| # and clean up the temporary build directory. |
| build_dir = "${target_out_dir}/${target_name}_build" |
| args = [ |
| "--", |
| "${go_build_tool}", |
| rebase_path(build_dir, root_build_dir), |
| rebase_path(target_out_dir, root_build_dir) + "/${target_name}", |
| rebase_path("//", root_build_dir), |
| "-I" + rebase_path("//"), |
| " -L" + rebase_path(target_out_dir) + |
| " -l" + static_library_name + |
| " -lstdc++ -lpthread -lm -lglib-2.0", |
| "test", "-c", |
| ] + rebase_path(invoker.sources, build_dir) |
| } |
| } |
| |
| template("go_shared_library") { |
| # Only available on android for now. |
| assert(is_android) |
| assert(defined(invoker.sources)) |
| assert(go_build_tool != "") |
| |
| static_library_name = target_name + "_static_library" |
| |
| static_library(static_library_name) { |
| complete_static_lib = true |
| deps = invoker.deps |
| } |
| |
| action(target_name) { |
| deps = [ ":$static_library_name" ] |
| script = "//build/go/go.py" |
| outputs = [ "${target_out_dir}/${target_name}" ] |
| # Since go test does not permit specifying an output directory or output |
| # binary name, we create a temporary build directory, and the python |
| # script will later identify the output, copy it to the target location, |
| # and clean up the temporary build directory. |
| build_dir = "${target_out_dir}/${target_name}_build" |
| args = [ |
| "--", |
| "CGO_ENABLED=1 GOOS=android GOARCH=arm GOARM=7 ${go_build_tool}", |
| rebase_path(build_dir, root_build_dir), |
| rebase_path(target_out_dir, root_build_dir) + "/${target_name}", |
| rebase_path("//", root_build_dir), |
| "-I" + rebase_path("//"), |
| " -L" + rebase_path(target_out_dir) + |
| " -l" + static_library_name + "", |
| "build -ldflags=-shared", |
| ] + rebase_path(invoker.sources, build_dir) |
| } |
| } |