Remove pointless arguments.
1 # vim: set ts=2 sw=2 tw=99 noet ft=python:
4 from ambuild.command import SymlinkCommand
8 self.compiler = Cpp.Compiler()
10 if AMBuild.mode == 'config':
12 self.compiler.DetectAll(AMBuild)
15 cxx = self.compiler.cxx
16 if isinstance(cxx, Cpp.CompatGCC):
17 if isinstance(cxx, Cpp.GCC):
19 elif isinstance(cxx, Cpp.Clang):
21 self.compiler.AddToListVar('CFLAGS', '-pipe')
22 self.compiler.AddToListVar('CFLAGS', '-fno-strict-aliasing')
23 if (self.vendor == 'gcc' and cxx.majorVersion >= 4) or self.vendor == 'clang':
24 self.compiler.AddToListVar('CFLAGS', '-fvisibility=hidden')
25 self.compiler.AddToListVar('CXXFLAGS', '-fvisibility-inlines-hidden')
26 self.compiler.AddToListVar('CFLAGS', '-Wall')
27 self.compiler.AddToListVar('CFLAGS', '-Werror')
28 self.compiler.AddToListVar('CFLAGS', '-Wno-switch')
30 if AMBuild.options.arch == 'x86':
31 self.compiler.AddToListVar('CFLAGS', '-m32')
32 self.compiler.AddToListVar('POSTLINKFLAGS', '-m32')
33 elif AMBuild.options.arch == 'x64':
34 self.compiler.AddToListVar('CFLAGS', '-m64')
35 self.compiler.AddToListVar('POSTLINKFLAGS', '-m64')
36 elif AMBuild.options.arch:
37 raise Exception('Unknown architecture: {0}'.format(AMBuild.options.arch))
39 # Disable some stuff we don't use, that gives us better binary
40 # compatibility on Linux.
41 self.compiler.AddToListVar('CXXFLAGS', '-fno-exceptions')
42 self.compiler.AddToListVar('CXXFLAGS', '-fno-rtti')
43 self.compiler.AddToListVar('CXXFLAGS', '-fno-threadsafe-statics')
45 # We don't really care about these.
46 self.compiler.AddToListVar('CXXFLAGS', '-Wno-non-virtual-dtor')
47 self.compiler.AddToListVar('CXXFLAGS', '-Wno-overloaded-virtual')
49 # The compiler is too aggressive about what what should be a valid offsetof.
50 self.compiler.AddToListVar('CXXFLAGS', '-Wno-invalid-offsetof')
52 # This would otherwise forbid ((x = y) == NULL) in clang apparently.
53 if self.vendor == 'clang':
54 self.compiler.AddToListVar('CXXFLAGS', '-Wno-null-arithmetic')
56 if (self.vendor == 'gcc' and cxx.majorVersion >= 4 and cxx.minorVersion >= 7) or \
57 (self.vendor == 'clang' and cxx.majorVersion >= 3):
58 self.compiler.AddToListVar('CXXFLAGS', '-Wno-delete-non-virtual-dtor')
60 self.compiler.AddToListVar('POSTLINKFLAGS', '-lm')
61 elif isinstance(cxx, Cpp.MSVC):
63 if AMBuild.options.debug == '1':
64 self.compiler.AddToListVar('CFLAGS', '/MTd')
65 self.compiler.AddToListVar('POSTLINKFLAGS', '/NODEFAULTLIB:libcmt')
67 self.compiler.AddToListVar('CFLAGS', '/MT')
68 self.compiler.AddToListVar('CDEFINES', '_CRT_SECURE_NO_DEPRECATE')
69 self.compiler.AddToListVar('CDEFINES', '_CRT_SECURE_NO_WARNINGS')
70 self.compiler.AddToListVar('CDEFINES', '_CRT_NONSTDC_NO_DEPRECATE')
71 self.compiler.AddToListVar('CXXFLAGS', '/EHsc')
72 self.compiler.AddToListVar('CXXFLAGS', '/GR-')
73 self.compiler.AddToListVar('CFLAGS', '/W3')
74 self.compiler.AddToListVar('CFLAGS', '/nologo')
75 self.compiler.AddToListVar('CFLAGS', '/Zi')
76 self.compiler.AddToListVar('CXXFLAGS', '/TP')
77 self.compiler.AddToListVar('POSTLINKFLAGS', '/DEBUG')
79 # if AMBuild.options.arch == 'x86':
80 # self.compiler.AddToListVar('POSTLINKFLAGS', '/MACHINE:X86')
81 # elif AMBuild.options.arch == 'x64':
82 # self.compiler.AddToListVar('POSTLINKFLAGS', '/MACHINE:X64')
83 # elif AMBuild.options.arch:
84 # raise Exception('Unknown architecture: {0}'.format(AMBuild.options.arch))
86 self.compiler.AddToListVar('POSTLINKFLAGS', 'kernel32.lib')
87 self.compiler.AddToListVar('POSTLINKFLAGS', 'user32.lib')
88 self.compiler.AddToListVar('POSTLINKFLAGS', 'gdi32.lib')
89 self.compiler.AddToListVar('POSTLINKFLAGS', 'winspool.lib')
90 self.compiler.AddToListVar('POSTLINKFLAGS', 'comdlg32.lib')
91 self.compiler.AddToListVar('POSTLINKFLAGS', 'advapi32.lib')
92 self.compiler.AddToListVar('POSTLINKFLAGS', 'shell32.lib')
93 self.compiler.AddToListVar('POSTLINKFLAGS', 'ole32.lib')
94 self.compiler.AddToListVar('POSTLINKFLAGS', 'oleaut32.lib')
95 self.compiler.AddToListVar('POSTLINKFLAGS', 'uuid.lib')
96 self.compiler.AddToListVar('POSTLINKFLAGS', 'odbc32.lib')
97 self.compiler.AddToListVar('POSTLINKFLAGS', 'odbccp32.lib')
100 if AMBuild.options.opt == '1':
101 self.compiler.AddToListVar('CDEFINES', 'NDEBUG')
102 if self.vendor == 'gcc' or self.vendor == 'clang':
103 self.compiler.AddToListVar('CFLAGS', '-O3')
104 elif self.vendor == 'msvc':
105 self.compiler.AddToListVar('CFLAGS', '/Ox')
106 self.compiler.AddToListVar('POSTLINKFLAGS', '/OPT:ICF')
107 self.compiler.AddToListVar('POSTLINKFLAGS', '/OPT:REF')
110 if AMBuild.options.debug == '1':
111 if self.vendor == 'gcc' or self.vendor == 'clang':
112 self.compiler.AddToListVar('CFLAGS', '-g3')
113 elif self.vendor == 'msvc':
114 self.compiler.AddToListVar('CFLAGS', '/Od')
115 self.compiler.AddToListVar('CFLAGS', '/RTC1')
118 if AMBuild.target['platform'] == 'linux':
119 self.compiler.AddToListVar('CDEFINES', '_LINUX')
120 if self.vendor == 'gcc':
121 self.compiler.AddToListVar('POSTLINKFLAGS', '-static-libgcc')
122 if self.vendor == 'clang':
123 self.compiler.AddToListVar('POSTLINKFLAGS', '-lgcc_eh')
124 elif AMBuild.target['platform'] == 'darwin':
125 self.compiler.AddToListVar('POSTLINKFLAGS', '-mmacosx-version-min=10.5')
126 if AMBuild.options.arch == 'x86':
127 self.compiler.AddToListVar('POSTLINKFLAGS', ['-arch', 'i386'])
128 elif AMBuild.options.arch == 'x64':
129 self.compiler.AddToListVar('POSTLINKFLAGS', ['-arch', 'x86_64'])
130 self.compiler.AddToListVar('POSTLINKFLAGS', '-lstdc++')
132 # For OS X dylib versioning
134 productFile = open(os.path.join(AMBuild.sourceFolder, 'product.version'), 'r')
135 productContents = productFile.read()
137 m = re.match('(\d+)\.(\d+)\.(\d+).*', productContents)
139 self.version = '1.0.0'
141 major, minor, release = m.groups()
142 self.version = '{0}.{1}.{2}'.format(major, minor, release)
143 AMBuild.cache.CacheVariable('version', self.version)
146 self.compiler.ToConfig(AMBuild, 'compiler')
147 AMBuild.cache.CacheVariable('vendor', self.vendor)
149 AMBuild.cache.CacheVariable('targetMap', self.targetMap)
151 self.compiler.FromConfig(AMBuild, 'compiler')
152 self.targetMap = AMBuild.cache['targetMap']
154 def DefaultCompiler(self):
155 return self.compiler.Clone()
157 def JobMatters(self, jobname):
158 file = sys._getframe().f_code.co_filename
159 if AMBuild.mode == 'config':
160 self.targetMap[jobname] = file
162 if len(AMBuild.args) == 0:
164 if not jobname in AMBuild.args:
173 ['src', 'AMBuild.library'],
174 ['src', 'AMBuild.shell']
177 for parts in FileList:
178 AMBuild.Include(os.path.join(*parts), globals)