OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. 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 #include "tools/gn/ninja_binary_target_writer.h" | 5 #include "tools/gn/ninja_binary_target_writer.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 "build obj/foo/libbar.input1.o: cxx ../../foo/input1.cc\n" | 172 "build obj/foo/libbar.input1.o: cxx ../../foo/input1.cc\n" |
173 "\n" | 173 "\n" |
174 "build obj/foo/libbar.a: alink obj/foo/libbar.input1.o\n" | 174 "build obj/foo/libbar.a: alink obj/foo/libbar.input1.o\n" |
175 " arflags = --asdf\n" | 175 " arflags = --asdf\n" |
176 " output_extension = \n" | 176 " output_extension = \n" |
177 " output_dir = \n"; | 177 " output_dir = \n"; |
178 std::string out_str = out.str(); | 178 std::string out_str = out.str(); |
179 EXPECT_EQ(expected, out_str); | 179 EXPECT_EQ(expected, out_str); |
180 } | 180 } |
181 | 181 |
| 182 TEST(NinjaBinaryTargetWriter, CompleteStaticLibrary) { |
| 183 TestWithScope setup; |
| 184 Err err; |
| 185 |
| 186 TestTarget target(setup, "//foo:bar", Target::STATIC_LIBRARY); |
| 187 target.sources().push_back(SourceFile("//foo/input1.cc")); |
| 188 target.config_values().arflags().push_back("--asdf"); |
| 189 target.set_complete_static_lib(true); |
| 190 |
| 191 TestTarget baz(setup, "//foo:baz", Target::STATIC_LIBRARY); |
| 192 baz.sources().push_back(SourceFile("//foo/input2.cc")); |
| 193 |
| 194 target.public_deps().push_back(LabelTargetPair(&baz)); |
| 195 |
| 196 ASSERT_TRUE(target.OnResolved(&err)); |
| 197 ASSERT_TRUE(baz.OnResolved(&err)); |
| 198 |
| 199 // A complete static library that depends on an incomplete static library |
| 200 // should link in the dependent object files as if the dependent target |
| 201 // were a source set. |
| 202 { |
| 203 std::ostringstream out; |
| 204 NinjaBinaryTargetWriter writer(&target, out); |
| 205 writer.Run(); |
| 206 |
| 207 const char expected[] = |
| 208 "defines =\n" |
| 209 "include_dirs =\n" |
| 210 "cflags =\n" |
| 211 "cflags_cc =\n" |
| 212 "root_out_dir = .\n" |
| 213 "target_out_dir = obj/foo\n" |
| 214 "target_output_name = libbar\n" |
| 215 "\n" |
| 216 "build obj/foo/libbar.input1.o: cxx ../../foo/input1.cc\n" |
| 217 "\n" |
| 218 "build obj/foo/libbar.a: alink obj/foo/libbar.input1.o " |
| 219 "obj/foo/libbaz.input2.o || obj/foo/libbaz.a\n" |
| 220 " arflags = --asdf\n" |
| 221 " output_extension = \n" |
| 222 " output_dir = \n"; |
| 223 std::string out_str = out.str(); |
| 224 EXPECT_EQ(expected, out_str); |
| 225 } |
| 226 |
| 227 // Make the dependent static library complete. |
| 228 baz.set_complete_static_lib(true); |
| 229 |
| 230 // Dependent complete static libraries should not be linked directly. |
| 231 { |
| 232 std::ostringstream out; |
| 233 NinjaBinaryTargetWriter writer(&target, out); |
| 234 writer.Run(); |
| 235 |
| 236 const char expected[] = |
| 237 "defines =\n" |
| 238 "include_dirs =\n" |
| 239 "cflags =\n" |
| 240 "cflags_cc =\n" |
| 241 "root_out_dir = .\n" |
| 242 "target_out_dir = obj/foo\n" |
| 243 "target_output_name = libbar\n" |
| 244 "\n" |
| 245 "build obj/foo/libbar.input1.o: cxx ../../foo/input1.cc\n" |
| 246 "\n" |
| 247 "build obj/foo/libbar.a: alink obj/foo/libbar.input1.o " |
| 248 "|| obj/foo/libbaz.a\n" |
| 249 " arflags = --asdf\n" |
| 250 " output_extension = \n" |
| 251 " output_dir = \n"; |
| 252 std::string out_str = out.str(); |
| 253 EXPECT_EQ(expected, out_str); |
| 254 } |
| 255 } |
| 256 |
182 // This tests that output extension and output dir overrides apply, and input | 257 // This tests that output extension and output dir overrides apply, and input |
183 // dependencies are applied. | 258 // dependencies are applied. |
184 TEST(NinjaBinaryTargetWriter, OutputExtensionAndInputDeps) { | 259 TEST(NinjaBinaryTargetWriter, OutputExtensionAndInputDeps) { |
185 TestWithScope setup; | 260 TestWithScope setup; |
186 Err err; | 261 Err err; |
187 | 262 |
188 setup.build_settings()->SetBuildDir(SourceDir("//out/Debug/")); | 263 setup.build_settings()->SetBuildDir(SourceDir("//out/Debug/")); |
189 | 264 |
190 // An action for our library to depend on. | 265 // An action for our library to depend on. |
191 Target action(setup.settings(), Label(SourceDir("//foo/"), "action")); | 266 Target action(setup.settings(), Label(SourceDir("//foo/"), "action")); |
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
772 | 847 |
773 EXPECT_FALSE(scheduler.is_failed()); | 848 EXPECT_FALSE(scheduler.is_failed()); |
774 | 849 |
775 std::ostringstream out; | 850 std::ostringstream out; |
776 NinjaBinaryTargetWriter writer(&target, out); | 851 NinjaBinaryTargetWriter writer(&target, out); |
777 writer.Run(); | 852 writer.Run(); |
778 | 853 |
779 // Should have issued an error. | 854 // Should have issued an error. |
780 EXPECT_TRUE(scheduler.is_failed()); | 855 EXPECT_TRUE(scheduler.is_failed()); |
781 } | 856 } |
OLD | NEW |