blob: c77f45abcb34d506bd4f99bce0fd1bbe2b460ccc [file] [log] [blame]
Dale Curtis9596cc02018-10-31 14:25:55 -07001# Copyright 2018 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build/config/compiler/compiler.gni")
6import("nasm_sources.gni")
7
8configs_to_delete = [
9 # Don't enable sanitizers for build tools. They slow down the overall build.
10 "//build/config/sanitizers:default_sanitizer_flags",
Takuto Ikutaae8e4ca2019-02-19 13:59:42 +090011
12 "//build/config/compiler:chromium_code",
Dale Curtis9596cc02018-10-31 14:25:55 -070013]
14
Takuto Ikutaae8e4ca2019-02-19 13:59:42 +090015configs_to_add = [ "//build/config/compiler:no_chromium_code" ]
Dale Curtis9596cc02018-10-31 14:25:55 -070016if (is_debug) {
17 configs_to_delete += [
18 # Build with full optimizations even on debug configurations, because some
19 # yasm build steps (highbd_sad4d_sse2.asm) can take ~33 seconds or more in
20 # debug component builds on Windows. Enabling compiler optimizations saves
21 # ~5 seconds.
22 "//build/config/compiler:default_optimization",
23
24 # Don't define _DEBUG. Modest savings, but good for consistency.
25 "//build/config:debug",
26 ]
27
28 configs_to_add += [
29 "//build/config:release",
30 "//build/config/compiler:optimize_max",
31 ]
32 if (is_win) {
33 # This switches to using the release CRT. For yasm debug component builds
34 # of highbd_sad4d_sse2.asm on Windows this saved about 15 s.
35 configs_to_delete += [ "//build/config/win:default_crt" ]
36 configs_to_add += [ "//build/config/win:release_crt" ]
37 }
38}
39
40config("nasm_config") {
41 include_dirs = [
42 ".",
43 "asm",
Dale Curtis9596cc02018-10-31 14:25:55 -070044 "disasm",
45 "include",
46 "output",
47 "x86",
48 ]
49
Dale Curtis9596cc02018-10-31 14:25:55 -070050 defines = [ "HAVE_CONFIG_H" ]
51
52 if (is_clang) {
53 cflags = [
54 # The inline functions in NASM's headers flag this.
55 "-Wno-unused-function",
56
57 # NASM writes nasm_assert(!"some string literal").
58 "-Wno-string-conversion",
59
60 # NASM sometimes redefines macros from its config.h.
61 "-Wno-macro-redefined",
Dale Curtis20920a82018-11-01 17:26:45 -070062
63 # NASM sometimes compares enums to unsigned integers.
64 "-Wno-sign-compare",
Dale Curtis9596cc02018-10-31 14:25:55 -070065 ]
Yves Gereye701d162018-11-09 18:44:47 +010066 } else if (is_win) {
67 # Please note that's a slightly different set of warnings.
68 cflags = [
69 # NASM sometimes redefines macros from its config.h.
70 "/wd4005", # macro redefinition
71
72 # NASM sometimes compares enums to unsigned integers.
73 "/wd4018", # sign compare
74
Yves Gereya0a69512018-11-09 19:35:11 +010075 # char VS const char mismatch.
76 "/wd4028", # formal parameter 1 different from declaration.
77
Yves Gereye701d162018-11-09 18:44:47 +010078 # NASM comment: Uninitialized -> all zero by C spec
79 # Or sometimes one const struct is forward declared for no reason.
80 "/wd4132", # const object should be initialized
81
82 # NASM uses "(-x) & 0xFF" pattern to negate byte.
83 "/wd4146", # unary minus operator applied to unsigned type
84 ]
Dale Curtis9596cc02018-10-31 14:25:55 -070085 }
86}
87
88if (current_toolchain == host_toolchain) {
89 executable("nasm") {
90 sources = nasmlib_sources + nasm_sources
Dale Curtis3dacc5e2018-11-01 10:48:41 -070091 sources += [
Dale Curtis3dacc5e2018-11-01 10:48:41 -070092 "config/config-linux.h",
Takuto Ikutaae8e4ca2019-02-19 13:59:42 +090093 "config/config-mac.h",
94 "config/config.h",
Takuto Ikuta313e2e82019-02-13 13:52:41 +090095 "config/msvc.h",
Dale Curtis3dacc5e2018-11-01 10:48:41 -070096 ]
Dale Curtis9596cc02018-10-31 14:25:55 -070097
98 configs -= configs_to_delete
99 configs += configs_to_add
100 configs += [ ":nasm_config" ]
101
102 deps = [
103 # Default manifest on Windows (a no-op elsewhere).
104 "//build/win:default_exe_manifest",
105 ]
106 }
107}