| # Copyright 2016 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| declare_args() { |
| ar = "ar" |
| cc = "cc" |
| cxx = "c++" |
| } |
| |
| config("no_rtti") { |
| cflags_cc = [ "-fno-rtti" ] |
| } |
| |
| config("default") { |
| cflags = [ |
| "-g", |
| "-fstrict-aliasing", |
| "-fPIC", |
| "-fvisibility=hidden", |
| |
| "-Werror", |
| "-Wall", |
| "-Wextra", |
| "-Winit-self", |
| "-Wpointer-arith", |
| "-Wsign-compare", |
| "-Wvla", |
| |
| "-Wno-deprecated-declarations", |
| "-Wno-unused-parameter", |
| ] |
| cflags_cc = [ |
| "-std=c++11", |
| "-fno-exceptions", |
| "-fno-threadsafe-statics", |
| "-fvisibility-inlines-hidden", |
| |
| "-Wnon-virtual-dtor", |
| ] |
| } |
| |
| config("release") { |
| cflags = [ "-Os" ] |
| defines = [ "NDEBUG" ] |
| } |
| |
| config("executable") { |
| if (is_mac) { |
| ldflags = [ "-Wl,-rpath,@loader_path/." ] |
| } else if (is_linux) { |
| ldflags = [ "-Wl,-rpath,\$ORIGIN" ] |
| } |
| } |
| |
| pool("link_pool") { |
| depth = 0 #unlimited |
| } |
| |
| toolchain("gcc_like") { |
| lib_switch = "-l" |
| lib_dir_switch = "-L" |
| |
| tool("cc") { |
| depfile = "{{output}}.d" |
| command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| outputs = [ |
| "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", |
| ] |
| description = "$cc ... -o {{output}}" |
| } |
| |
| tool("cxx") { |
| depfile = "{{output}}.d" |
| command = "$cxx -MMD -MF $depfile {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| outputs = [ |
| "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", |
| ] |
| description = "$cxx ... -o {{output}}" |
| } |
| |
| tool("asm") { |
| depfile = "{{output}}.d" |
| command = "$cc -MMD -MF $depfile {{defines}} {{include_dirs}} {{asmflags}} -c {{source}} -o {{output}}" |
| depsformat = "gcc" |
| outputs = [ |
| "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o", |
| ] |
| description = "$cc ... -o {{output}}" |
| } |
| |
| tool("alink") { |
| command = "rm -f {{output}} && $ar rcs {{output}} {{inputs}}" |
| outputs = [ |
| "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", |
| ] |
| default_output_extension = ".a" |
| output_prefix = "lib" |
| description = "$ar {{output}} ..." |
| } |
| |
| tool("solink") { |
| soname = "{{target_output_name}}{{output_extension}}" |
| |
| rpath = "-Wl,-soname,$soname" |
| if (is_mac) { |
| rpath = "-Wl,-install_name,@rpath/$soname" |
| } |
| |
| command = "$cxx -shared {{ldflags}} {{inputs}} {{solibs}} {{libs}} $rpath -o {{output}}" |
| outputs = [ |
| "{{root_out_dir}}/$soname", |
| ] |
| output_prefix = "lib" |
| default_output_extension = ".so" |
| description = "$cxx -shared ... -o {{output}}" |
| pool = ":link_pool" |
| } |
| |
| tool("link") { |
| command = "$cxx {{ldflags}} {{inputs}} {{solibs}} {{libs}} -o {{output}}" |
| outputs = [ |
| "{{root_out_dir}}/{{target_output_name}}{{output_extension}}", |
| ] |
| description = "$cxx ... -o {{output}}" |
| pool = ":link_pool" |
| } |
| |
| tool("stamp") { |
| command = "touch {{output}}" |
| } |
| |
| tool("copy") { |
| command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})" |
| } |
| } |