OLD | NEW |
1 # Copyright (c) 2012 Google Inc. All rights reserved. | 1 # Copyright (c) 2012 Google Inc. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 import copy | 5 import copy |
6 import hashlib | 6 import hashlib |
7 import multiprocessing | 7 import multiprocessing |
8 import os.path | 8 import os.path |
9 import re | 9 import re |
10 import signal | 10 import signal |
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
775 self.WriteVariableList('cflags_objcc', map(self.ExpandSpecial, | 775 self.WriteVariableList('cflags_objcc', map(self.ExpandSpecial, |
776 cflags_objcc)) | 776 cflags_objcc)) |
777 self.ninja.newline() | 777 self.ninja.newline() |
778 outputs = [] | 778 outputs = [] |
779 for source in sources: | 779 for source in sources: |
780 filename, ext = os.path.splitext(source) | 780 filename, ext = os.path.splitext(source) |
781 ext = ext[1:] | 781 ext = ext[1:] |
782 obj_ext = self.obj_ext | 782 obj_ext = self.obj_ext |
783 if ext in ('cc', 'cpp', 'cxx'): | 783 if ext in ('cc', 'cpp', 'cxx'): |
784 command = 'cxx' | 784 command = 'cxx' |
785 elif ext == 'c' or (ext in ('s', 'S') and self.flavor != 'win'): | 785 elif ext == 'c' or (ext == 'S' and self.flavor != 'win'): |
786 command = 'cc' | 786 command = 'cc' |
| 787 elif ext == 's' and self.flavor != 'win': # Doesn't generate .o.d files. |
| 788 command = 'cc_s' |
787 elif (self.flavor == 'win' and ext == 'asm' and | 789 elif (self.flavor == 'win' and ext == 'asm' and |
788 self.msvs_settings.GetTargetPlatform(config_name) == 'Win32'): | 790 self.msvs_settings.GetTargetPlatform(config_name) == 'Win32'): |
789 # Asm files only get auto assembled for x86 (not x64). | 791 # Asm files only get auto assembled for x86 (not x64). |
790 command = 'asm' | 792 command = 'asm' |
791 # Add the _asm suffix as msvs is capable of handling .cc and | 793 # Add the _asm suffix as msvs is capable of handling .cc and |
792 # .asm files of the same name without collision. | 794 # .asm files of the same name without collision. |
793 obj_ext = '_asm.obj' | 795 obj_ext = '_asm.obj' |
794 elif self.flavor == 'mac' and ext == 'm': | 796 elif self.flavor == 'mac' and ext == 'm': |
795 command = 'objc' | 797 command = 'objc' |
796 elif self.flavor == 'mac' and ext == 'mm': | 798 elif self.flavor == 'mac' and ext == 'mm': |
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1424 master_ninja.newline() | 1426 master_ninja.newline() |
1425 | 1427 |
1426 if flavor != 'win': | 1428 if flavor != 'win': |
1427 master_ninja.rule( | 1429 master_ninja.rule( |
1428 'cc', | 1430 'cc', |
1429 description='CC $out', | 1431 description='CC $out', |
1430 command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c ' | 1432 command=('$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c ' |
1431 '$cflags_pch_c -c $in -o $out'), | 1433 '$cflags_pch_c -c $in -o $out'), |
1432 depfile='$out.d') | 1434 depfile='$out.d') |
1433 master_ninja.rule( | 1435 master_ninja.rule( |
| 1436 'cc_s', |
| 1437 description='CC $out', |
| 1438 command=('$cc $defines $includes $cflags $cflags_c ' |
| 1439 '$cflags_pch_c -c $in -o $out')) |
| 1440 master_ninja.rule( |
1434 'cxx', | 1441 'cxx', |
1435 description='CXX $out', | 1442 description='CXX $out', |
1436 command=('$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_cc ' | 1443 command=('$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_cc ' |
1437 '$cflags_pch_cc -c $in -o $out'), | 1444 '$cflags_pch_cc -c $in -o $out'), |
1438 depfile='$out.d') | 1445 depfile='$out.d') |
1439 else: | 1446 else: |
1440 # Template for compile commands mostly shared between compiling files | 1447 # Template for compile commands mostly shared between compiling files |
1441 # and generating PCH. In the case of PCH, the "output" is specified by /Fp | 1448 # and generating PCH. In the case of PCH, the "output" is specified by /Fp |
1442 # rather than /Fo (for object files), but we still need to specify an /Fo | 1449 # rather than /Fo (for object files), but we still need to specify an /Fo |
1443 # when compiling PCH. | 1450 # when compiling PCH. |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1773 arglists.append( | 1780 arglists.append( |
1774 (target_list, target_dicts, data, params, config_name)) | 1781 (target_list, target_dicts, data, params, config_name)) |
1775 pool.map(CallGenerateOutputForConfig, arglists) | 1782 pool.map(CallGenerateOutputForConfig, arglists) |
1776 except KeyboardInterrupt, e: | 1783 except KeyboardInterrupt, e: |
1777 pool.terminate() | 1784 pool.terminate() |
1778 raise e | 1785 raise e |
1779 else: | 1786 else: |
1780 for config_name in config_names: | 1787 for config_name in config_names: |
1781 GenerateOutputForConfig(target_list, target_dicts, data, params, | 1788 GenerateOutputForConfig(target_list, target_dicts, data, params, |
1782 config_name) | 1789 config_name) |
OLD | NEW |