Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(303)

Side by Side Diff: tools/gn/visual_studio_utils.cc

Issue 1570113002: Visual Studio generators for GN (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move XmlElementWriter to separate file + minor fixes Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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
5 #include "tools/gn/visual_studio_utils.h"
6
7 #include "base/md5.h"
8 #include "base/strings/string_util.h"
9
10 std::string MakeGuid(const std::string& entry_path, const std::string& seed) {
11 std::string str = base::ToUpperASCII(base::MD5String(seed + entry_path));
12 return '{' + str.substr(0, 8) + '-' + str.substr(8, 4) + '-' +
13 str.substr(12, 4) + '-' + str.substr(16, 4) + '-' +
14 str.substr(20, 12) + '}';
15 }
16
17 #define SetOption(condition, member, value) \
18 if (condition) { \
19 options->member = value; \
20 return; \
21 }
22
23 #define AppendOption(condition, member, value, separator) \
24 if (condition) { \
25 options->member += value + separator; \
26 return; \
27 }
28
29 void ParseCompilerOption(const std::string& cflag, CompilerOptions* options) {
30 if (cflag.size() > 2 && cflag[0] == '/') {
31 switch (cflag[1]) {
32 case 'F':
33 AppendOption(cflag.size() > 3 && cflag[2] == 'I', forced_include_files,
34 cflag.substr(3), ';')
35 break;
36
37 case 'G':
38 if (cflag[2] == 'S') {
39 SetOption(cflag.size() == 3, buffer_security_check, "true")
40 SetOption(cflag.size() == 4 && cflag[3] == '-',
41 buffer_security_check, "false")
42 }
43 break;
44
45 case 'M':
46 switch (cflag[2]) {
47 case 'D':
48 SetOption(cflag.size() == 3, runtime_library, "MultiThreadedDLL")
49 SetOption(cflag.size() == 4 && cflag[3] == 'd', runtime_library,
50 "MultiThreadedDebugDLL")
51 break;
52
53 case 'T':
54 SetOption(cflag.size() == 3, runtime_library, "MultiThreaded")
55 SetOption(cflag.size() == 4 && cflag[3] == 'd', runtime_library,
56 "MultiThreadedDebug")
57 break;
58 }
59 break;
60
61 case 'O':
62 switch (cflag[2]) {
63 case '1':
64 SetOption(cflag.size() == 3, optimization, "MinSpace")
65 break;
66
67 case '2':
68 SetOption(cflag.size() == 3, optimization, "MaxSpeed")
69 break;
70
71 case 'd':
72 SetOption(cflag.size() == 3, optimization, "Disabled")
73 break;
74
75 case 'x':
76 SetOption(cflag.size() == 3, optimization, "Full")
77 break;
78 }
79 break;
80
81 case 'T':
82 // Skip flags that cause treating all source files as C and C++ files.
83 if (cflag.size() == 3 && (cflag[2] == 'C' || cflag[2] == 'P'))
84 return;
85 break;
86
87 case 'W':
88 switch (cflag[2]) {
89 case '0':
90 case '1':
91 case '2':
92 case '3':
93 case '4':
94 SetOption(cflag.size() == 3, warning_level,
95 std::string("Level") + cflag[2])
96 break;
97
98 case 'X':
99 SetOption(cflag.size() == 3, treat_warning_as_error, "true")
100 break;
101 }
102 break;
103
104 case 'w':
105 AppendOption(cflag.size() > 3 && cflag[2] == 'd',
106 disable_specific_warnings, cflag.substr(3), ';')
107 break;
108 }
109 }
110
111 // Put everything else into additional_options.
112 options->additional_options += cflag + ' ';
113 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698