| 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/target.h" | 5 #include "tools/gn/target.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "tools/gn/build_settings.h" | 10 #include "tools/gn/build_settings.h" |
| (...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 555 | 555 |
| 556 toolchain.SetTool(Toolchain::TYPE_SOLINK, std::move(solink_tool)); | 556 toolchain.SetTool(Toolchain::TYPE_SOLINK, std::move(solink_tool)); |
| 557 | 557 |
| 558 Target target(setup.settings(), Label(SourceDir("//a/"), "a")); | 558 Target target(setup.settings(), Label(SourceDir("//a/"), "a")); |
| 559 target.set_output_type(Target::SHARED_LIBRARY); | 559 target.set_output_type(Target::SHARED_LIBRARY); |
| 560 target.SetToolchain(&toolchain); | 560 target.SetToolchain(&toolchain); |
| 561 ASSERT_TRUE(target.OnResolved(&err)); | 561 ASSERT_TRUE(target.OnResolved(&err)); |
| 562 | 562 |
| 563 EXPECT_EQ("./liba.so", target.link_output_file().value()); | 563 EXPECT_EQ("./liba.so", target.link_output_file().value()); |
| 564 EXPECT_EQ("./liba.so.TOC", target.dependency_output_file().value()); | 564 EXPECT_EQ("./liba.so.TOC", target.dependency_output_file().value()); |
| 565 EXPECT_EQ("./liba.so", target.runtime_link_output_file().value()); | 565 |
| 566 ASSERT_EQ(1u, target.runtime_outputs().size()); |
| 567 EXPECT_EQ("./liba.so", target.runtime_outputs()[0].value()); |
| 566 } | 568 } |
| 567 | 569 |
| 568 // Tests that runtime_link output works without an explicit link_output for | 570 // Tests that runtime_outputs works without an explicit link_output for |
| 569 // solink tools. | 571 // solink tools. |
| 570 TEST(Target, RuntimeLinkOuput) { | 572 TEST(Target, RuntimeOuputs) { |
| 571 TestWithScope setup; | 573 TestWithScope setup; |
| 572 Err err; | 574 Err err; |
| 573 | 575 |
| 574 Toolchain toolchain(setup.settings(), Label(SourceDir("//tc/"), "tc")); | 576 Toolchain toolchain(setup.settings(), Label(SourceDir("//tc/"), "tc")); |
| 575 | 577 |
| 576 std::unique_ptr<Tool> solink_tool(new Tool()); | 578 std::unique_ptr<Tool> solink_tool(new Tool()); |
| 577 solink_tool->set_output_prefix(""); | 579 solink_tool->set_output_prefix(""); |
| 578 solink_tool->set_default_output_extension(".dll"); | 580 solink_tool->set_default_output_extension(".dll"); |
| 579 | 581 |
| 582 // Say the linker makes a DLL< an import library, and a symbol file we want |
| 583 // to treat as a runtime output. |
| 580 const char kLibPattern[] = | 584 const char kLibPattern[] = |
| 581 "{{root_out_dir}}/{{target_output_name}}{{output_extension}}.lib"; | 585 "{{root_out_dir}}/{{target_output_name}}{{output_extension}}.lib"; |
| 582 SubstitutionPattern lib_output = | |
| 583 SubstitutionPattern::MakeForTest(kLibPattern); | |
| 584 | |
| 585 const char kDllPattern[] = | 586 const char kDllPattern[] = |
| 586 "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"; | 587 "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"; |
| 587 SubstitutionPattern dll_output = | 588 const char kPdbPattern[] = |
| 588 SubstitutionPattern::MakeForTest(kDllPattern); | 589 "{{root_out_dir}}/{{target_output_name}}.pdb"; |
| 590 SubstitutionPattern pdb_pattern = |
| 591 SubstitutionPattern::MakeForTest(kPdbPattern); |
| 589 | 592 |
| 590 solink_tool->set_outputs( | 593 solink_tool->set_outputs( |
| 591 SubstitutionList::MakeForTest(kLibPattern, kDllPattern)); | 594 SubstitutionList::MakeForTest(kLibPattern, kDllPattern, kPdbPattern)); |
| 592 | 595 |
| 593 solink_tool->set_runtime_link_output(dll_output); | 596 // Say we only want the DLL and symbol file treaded as runtime outputs. |
| 597 solink_tool->set_runtime_outputs(SubstitutionList::MakeForTest( |
| 598 kDllPattern, kPdbPattern)); |
| 594 | 599 |
| 595 toolchain.SetTool(Toolchain::TYPE_SOLINK, std::move(solink_tool)); | 600 toolchain.SetTool(Toolchain::TYPE_SOLINK, std::move(solink_tool)); |
| 596 | 601 |
| 597 Target target(setup.settings(), Label(SourceDir("//a/"), "a")); | 602 Target target(setup.settings(), Label(SourceDir("//a/"), "a")); |
| 598 target.set_output_type(Target::SHARED_LIBRARY); | 603 target.set_output_type(Target::SHARED_LIBRARY); |
| 599 target.SetToolchain(&toolchain); | 604 target.SetToolchain(&toolchain); |
| 600 ASSERT_TRUE(target.OnResolved(&err)); | 605 ASSERT_TRUE(target.OnResolved(&err)); |
| 601 | 606 |
| 602 EXPECT_EQ("./a.dll.lib", target.link_output_file().value()); | 607 EXPECT_EQ("./a.dll.lib", target.link_output_file().value()); |
| 603 EXPECT_EQ("./a.dll.lib", target.dependency_output_file().value()); | 608 EXPECT_EQ("./a.dll.lib", target.dependency_output_file().value()); |
| 604 EXPECT_EQ("./a.dll", target.runtime_link_output_file().value()); | 609 |
| 610 ASSERT_EQ(2u, target.runtime_outputs().size()); |
| 611 EXPECT_EQ("./a.dll", target.runtime_outputs()[0].value()); |
| 612 EXPECT_EQ("./a.pdb", target.runtime_outputs()[1].value()); |
| 605 } | 613 } |
| 606 | 614 |
| 607 // Shared libraries should be inherited across public shared liobrary | 615 // Shared libraries should be inherited across public shared liobrary |
| 608 // boundaries. | 616 // boundaries. |
| 609 TEST(Target, SharedInheritance) { | 617 TEST(Target, SharedInheritance) { |
| 610 TestWithScope setup; | 618 TestWithScope setup; |
| 611 Err err; | 619 Err err; |
| 612 | 620 |
| 613 // Create two leaf shared libraries. | 621 // Create two leaf shared libraries. |
| 614 TestTarget pub(setup, "//foo:pub", Target::SHARED_LIBRARY); | 622 TestTarget pub(setup, "//foo:pub", Target::SHARED_LIBRARY); |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 979 ASSERT_EQ(c.bundle_data().file_rules().size(), 1u); | 987 ASSERT_EQ(c.bundle_data().file_rules().size(), 1u); |
| 980 ASSERT_EQ(c.bundle_data().file_rules()[0].sources().size(), 1u); | 988 ASSERT_EQ(c.bundle_data().file_rules()[0].sources().size(), 1u); |
| 981 ASSERT_EQ(c.bundle_data().bundle_deps().size(), 1u); | 989 ASSERT_EQ(c.bundle_data().bundle_deps().size(), 1u); |
| 982 | 990 |
| 983 // E does not have any bundle_data information but gets a list of | 991 // E does not have any bundle_data information but gets a list of |
| 984 // bundle_deps to propagate them during target resolution. | 992 // bundle_deps to propagate them during target resolution. |
| 985 ASSERT_TRUE(e.bundle_data().file_rules().empty()); | 993 ASSERT_TRUE(e.bundle_data().file_rules().empty()); |
| 986 ASSERT_TRUE(e.bundle_data().assets_catalog_sources().empty()); | 994 ASSERT_TRUE(e.bundle_data().assets_catalog_sources().empty()); |
| 987 ASSERT_EQ(e.bundle_data().bundle_deps().size(), 2u); | 995 ASSERT_EQ(e.bundle_data().bundle_deps().size(), 2u); |
| 988 } | 996 } |
| OLD | NEW |