Index: gn/BUILD.gn |
diff --git a/gn/BUILD.gn b/gn/BUILD.gn |
index 7beefa13396173c52d6883ffab93c8f940301339..f773af61aac97cd77af4df31e3286a77157237c1 100644 |
--- a/gn/BUILD.gn |
+++ b/gn/BUILD.gn |
@@ -24,44 +24,28 @@ declare_args() { |
compiler_prefix = "" |
} |
-if (is_win) { |
- config("default") { |
- cflags = [ |
- "/FS", # Preserve previous PDB behavior. |
+config("default") { |
+ asmflags = [] |
+ cflags = [] |
+ cflags_c = [] |
+ cflags_cc = [] |
+ defines = [] |
+ ldflags = [] |
+ |
+ if (is_win) { |
+ cflags += [ |
+ "/FS", # Preserve previous PDB behavior. |
"/bigobj", # Some of our files are bigger than the regular limits. |
] |
- cflags_c = ["/TC"] |
- cflags_cc = ["/TP"] |
- defines = [ |
- "_HAS_EXCEPTIONS=0", |
- "WIN32_LEAN_AND_MEAN", |
- "NOMINMAX", |
+ cflags_c += [ "/TC" ] |
+ cflags_cc += [ "/TP" ] |
+ defines += [ |
+ "_HAS_EXCEPTIONS=0", |
+ "WIN32_LEAN_AND_MEAN", |
+ "NOMINMAX", |
] |
- } |
- config("no_rtti") { } |
- |
- config("debug_symbols") { } |
- |
-} else { |
- config("debug_symbols") { |
- # It's annoying to wait for full debug symbols to push over |
- # to Android devices. -gline-tables-only is a lot slimmer. |
- if (is_android) { |
- cflags = [ "-gline-tables-only" ] |
- } else { |
- cflags = [ "-g" ] |
- } |
- } |
- |
- config("no_rtti") { |
- if (sanitize != "ASAN") { # -fsanitize=vptr requires RTTI |
- cflags_cc = [ "-fno-rtti" ] |
- } |
- } |
- |
- config("default") { |
- asmflags = [] |
- cflags = [ |
+ } else { |
+ cflags += [ |
"-O1", |
"-fstrict-aliasing", |
"-fPIC", |
@@ -78,7 +62,7 @@ if (is_win) { |
"-Wno-deprecated-declarations", |
"-Wno-unused-parameter", |
] |
- cflags_cc = [ |
+ cflags_cc += [ |
"-std=c++11", |
"-fno-exceptions", |
"-fno-threadsafe-statics", |
@@ -86,100 +70,118 @@ if (is_win) { |
"-Wnon-virtual-dtor", |
] |
- ldflags = [] |
- |
- if (current_cpu == "arm") { |
- cflags += [ |
- "-march=armv7-a", |
- "-mfpu=neon", |
- "-mthumb", |
- ] |
- } else if (current_cpu == "mipsel") { |
- cflags += [ |
- "-march=mips32r2", |
- "-mdspr2", |
- ] |
- } else if (current_cpu == "x86") { |
- asmflags += [ "-m32" ] |
- cflags += [ |
- "-m32", |
- "-msse2", |
- "-mfpmath=sse", |
- ] |
- ldflags += [ "-m32" ] |
+ } |
+ |
+ if (current_cpu == "arm") { |
+ cflags += [ |
+ "-march=armv7-a", |
+ "-mfpu=neon", |
+ "-mthumb", |
+ ] |
+ } else if (current_cpu == "mipsel") { |
+ cflags += [ |
+ "-march=mips32r2", |
+ "-mdspr2", |
+ ] |
+ } else if (current_cpu == "x86") { |
+ asmflags += [ "-m32" ] |
+ cflags += [ |
+ "-m32", |
+ "-msse2", |
+ "-mfpmath=sse", |
+ ] |
+ ldflags += [ "-m32" ] |
+ } |
+ |
+ if (is_android) { |
+ asmflags += [ |
+ "--target=$ndk_target", |
+ "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin", |
+ ] |
+ cflags += [ |
+ "--sysroot=$ndk/platforms/$ndk_platform", |
+ "--target=$ndk_target", |
+ "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin", |
+ ] |
+ cflags_cc += [ |
+ "-isystem$ndk/sources/android/support/include", |
+ "-isystem$ndk/sources/cxx-stl/llvm-libc++/libcxx/include", |
+ ] |
+ ldflags += [ |
+ "--sysroot=$ndk/platforms/$ndk_platform", |
+ "--target=$ndk_target", |
+ "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin", |
+ "-pie", |
+ ] |
+ lib_dirs = [ |
+ "$ndk/sources/cxx-stl/llvm-libc++/libs/$ndk_stdlib", |
+ "$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/lib/gcc/$ndk_target/4.9.x", |
+ ] |
+ |
+ libs = [ |
+ # Order matters here! Keep these three in exactly this order. |
+ "c++_static", |
+ "c++abi", |
+ "android_support", |
+ ] |
+ if (target_cpu == "arm") { |
+ libs += [ "unwind" ] |
} |
+ } |
+ |
+ if (is_linux) { |
+ libs = [ "pthread" ] |
+ } |
- if (is_android) { |
- asmflags += [ |
- "--target=$ndk_target", |
- "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin", |
- ] |
- cflags += [ |
- "--sysroot=$ndk/platforms/$ndk_platform", |
- "--target=$ndk_target", |
- "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin", |
- ] |
- cflags_cc += [ |
- "-isystem$ndk/sources/android/support/include", |
- "-isystem$ndk/sources/cxx-stl/llvm-libc++/libcxx/include", |
- ] |
- ldflags += [ |
- "--sysroot=$ndk/platforms/$ndk_platform", |
- "--target=$ndk_target", |
- "-B$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/$ndk_target/bin", |
- "-pie", |
- ] |
- lib_dirs = [ |
- "$ndk/sources/cxx-stl/llvm-libc++/libs/$ndk_stdlib", |
- "$ndk/toolchains/$ndk_gccdir-4.9/prebuilt/$ndk_host/lib/gcc/$ndk_target/4.9.x", |
- ] |
- |
- libs = [ |
- # Order matters here! Keep these three in exactly this order. |
- "c++_static", |
- "c++abi", |
- "android_support", |
- ] |
- if (target_cpu == "arm") { |
- libs += [ "unwind" ] |
- } |
+ if (sanitize != "") { |
+ # You can either pass the sanitizers directly, e.g. "address,undefined", |
+ # or pass one of the couple common aliases used by the bots. |
+ sanitizers = sanitize |
+ if (sanitize == "ASAN") { |
+ sanitizers = "address,bool,function,integer-divide-by-zero,nonnull-attribute,null,object-size,return,returns-nonnull-attribute,shift,signed-integer-overflow,unreachable,vla-bound,vptr" |
+ } else if (sanitize == "TSAN") { |
+ sanitizers = "thread" |
+ } else if (sanitize == "MSAN") { |
+ sanitizers = "memory" |
} |
- if (is_linux) { |
- libs = [ "pthread" ] |
+ cflags += [ |
+ "-fsanitize=$sanitizers", |
+ "-fno-sanitize-recover=$sanitizers", |
+ "-fsanitize-blacklist=" + rebase_path("../tools/xsan.blacklist"), |
+ ] |
+ ldflags += [ "-fsanitize=$sanitizers" ] |
+ if (sanitizers == "memory") { |
+ cflags += [ "-fsanitize-memory-track-origins" ] |
+ cflags_cc += [ "-stdlib=libc++" ] |
+ ldflags += [ "-stdlib=libc++" ] |
} |
+ } |
+} |
+ |
+config("debug_symbols") { |
+ # It's annoying to wait for full debug symbols to push over |
+ # to Android devices. -gline-tables-only is a lot slimmer. |
+ if (is_android) { |
+ cflags = [ "-gline-tables-only" ] |
+ } else if (!is_win) { |
+ cflags = [ "-g" ] |
+ } |
+} |
- if (sanitize != "") { |
- # You can either pass the sanitizers directly, e.g. "address,undefined", |
- # or pass one of the couple common aliases used by the bots. |
- sanitizers = sanitize |
- if (sanitize == "ASAN") { |
- sanitizers = "address,bool,function,integer-divide-by-zero,nonnull-attribute,null,object-size,return,returns-nonnull-attribute,shift,signed-integer-overflow,unreachable,vla-bound,vptr" |
- } else if (sanitize == "TSAN") { |
- sanitizers = "thread" |
- } else if (sanitize == "MSAN") { |
- sanitizers = "memory" |
- } |
- |
- cflags += [ |
- "-fsanitize=$sanitizers", |
- "-fno-sanitize-recover=$sanitizers", |
- "-fsanitize-blacklist=" + rebase_path("../tools/xsan.blacklist"), |
- ] |
- ldflags += [ "-fsanitize=$sanitizers" ] |
- if (sanitizers == "memory") { |
- cflags += [ "-fsanitize-memory-track-origins" ] |
- cflags_cc += [ "-stdlib=libc++" ] |
- ldflags += [ "-stdlib=libc++" ] |
- } |
+config("no_rtti") { |
+ if (sanitize != "ASAN") { # -fsanitize=vptr requires RTTI |
+ if (!is_win) { |
+ cflags_cc = [ "-fno-rtti" ] |
} |
} |
+} |
- config("release") { |
+config("release") { |
+ if (!is_win) { |
cflags = [ "-O3" ] |
- defines = [ "NDEBUG" ] |
} |
- |
+ defines = [ "NDEBUG" ] |
} |
config("executable") { |
@@ -194,9 +196,10 @@ config("executable") { |
} |
toolchain("msvc") { |
- vc = "$windk\VC\bin\amd64\cl.exe" |
+ vc = "$windk\VC\bin\amd64\cl.exe" |
vlink = "$windk\VC\bin\amd64\link.exe" |
- vlib = "$windk\VC\bin\amd64\lib.exe" |
+ vlib = "$windk\VC\bin\amd64\lib.exe" |
+ |
# TODO: add a python function that generates the includes using <VSPATH>/win_sdk/bin/SetEnv.<cpu>.json |
windk_include_dirs = "/I$windk\win_sdk\bin\..\..\win_sdk\Include\10.0.10586.0\um /I$windk\win_sdk\bin\..\..\win_sdk\Include\10.0.10586.0\shared /I$windk\win_sdk\bin\..\..\win_sdk\Include\10.0.10586.0\winrt /I$windk\win_sdk\bin\..\..\win_sdk\Include\10.0.10586.0\ucrt /I$windk\win_sdk\bin\..\..\VC\include /I$windk\win_sdk\bin\..\..\VC\atlmfc\include " |
@@ -208,7 +211,7 @@ toolchain("msvc") { |
# Label names may have spaces in them so the pdbname must be quoted. The |
# source and output don't need to be quoted because GN knows they're a |
# full file name and will quote automatically when necessary. |
- |
+ |
command = "$vc /nologo /showIncludes /FC @$rspfile /c {{source}} /Fo{{output}} /Fd\"$pdbname\"" |
depsformat = "msvc" |
description = "CC {{output}}" |
@@ -234,10 +237,11 @@ toolchain("msvc") { |
"{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj", |
] |
rspfile_content = "$windk_include_dirs {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}" |
- } |
+ } |
tool("alink") { |
rspfile = "{{output}}.rsp" |
+ |
# gyp_win_tool_path = rebase_path("../third_party/externals/gyp/pylib/gyp/win_tool.py") |
command = "$vlib /nologo {{arflags}} /OUT:{{output}} @$rspfile" |
description = "LIB {{output}}" |
@@ -269,6 +273,7 @@ toolchain("msvc") { |
#"{{root_out_dir}}/{{target_output_name}}{{output_extension}}", |
exename, |
] |
+ |
#if (symbol_level != 0) { |
# outputs += [ pdbname ] |
#} |
@@ -279,14 +284,12 @@ toolchain("msvc") { |
rspfile_content = "{{inputs_newline}} {{libs}} {{solibs}} {{ldflags}}" |
} |
- |
tool("stamp") { |
win_stamp_path = rebase_path("win_stamp.py") |
command = "python $win_stamp_path {{output}}" |
} |
} |
- |
toolchain("gcc_like") { |
lib_switch = "-l" |
lib_dir_switch = "-L" |