| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <limits> | 6 #include <limits> |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "tools/gn/err.h" | 9 #include "tools/gn/err.h" |
| 10 #include "tools/gn/functions.h" | 10 #include "tools/gn/functions.h" |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 " \"copy_bundle_data\": [iOS, OS X] Tool to copy files in a bundle.\n" | 411 " \"copy_bundle_data\": [iOS, OS X] Tool to copy files in a bundle.\n" |
| 412 " \"compile_xcassets\": [iOS, OS X] Tool to compile asset catalogs.\n" | 412 " \"compile_xcassets\": [iOS, OS X] Tool to compile asset catalogs.\n" |
| 413 "\n" | 413 "\n" |
| 414 "Tool variables\n" | 414 "Tool variables\n" |
| 415 "\n" | 415 "\n" |
| 416 " command [string with substitutions]\n" | 416 " command [string with substitutions]\n" |
| 417 " Valid for: all tools (required)\n" | 417 " Valid for: all tools (required)\n" |
| 418 "\n" | 418 "\n" |
| 419 " The command to run.\n" | 419 " The command to run.\n" |
| 420 "\n" | 420 "\n" |
| 421 " default_output_dir [string with substitutions]\n" |
| 422 " Valid for: linker tools\n" |
| 423 "\n" |
| 424 " Default directory name for the output file relative to the\n" |
| 425 " root_build_dir. It can contain other substitution patterns.\n" |
| 426 " This will be the default value for the {{output_dir}} expansion\n" |
| 427 " (discussed below) but will be overridden by the \"output_dir\"\n" |
| 428 " variable in a target, if one is specified.\n" |
| 429 "\n" |
| 430 " GN doesn't do anything with this string other than pass it\n" |
| 431 " along, potentially with target-specific overrides. It is the\n" |
| 432 " tool's job to use the expansion so that the files will be in\n" |
| 433 " the right place.\n" |
| 434 "\n" |
| 421 " default_output_extension [string]\n" | 435 " default_output_extension [string]\n" |
| 422 " Valid for: linker tools\n" | 436 " Valid for: linker tools\n" |
| 423 "\n" | 437 "\n" |
| 424 " Extension for the main output of a linkable tool. It includes\n" | 438 " Extension for the main output of a linkable tool. It includes\n" |
| 425 " the leading dot. This will be the default value for the\n" | 439 " the leading dot. This will be the default value for the\n" |
| 426 " {{output_extension}} expansion (discussed below) but will be\n" | 440 " {{output_extension}} expansion (discussed below) but will be\n" |
| 427 " overridden by by the \"output extension\" variable in a target,\n" | 441 " overridden by by the \"output extension\" variable in a target,\n" |
| 428 " if one is specified. Empty string means no extension.\n" | 442 " if one is specified. Empty string means no extension.\n" |
| 429 "\n" | 443 "\n" |
| 430 " GN doesn't actually do anything with this extension other than\n" | 444 " GN doesn't actually do anything with this extension other than\n" |
| 431 " pass it along, potentially with target-specific overrides. One\n" | 445 " pass it along, potentially with target-specific overrides. One\n" |
| 432 " would typically use the {{output_extension}} value in the\n" | 446 " would typically use the {{output_extension}} value in the\n" |
| 433 " \"outputs\" to read this value.\n" | 447 " \"outputs\" to read this value.\n" |
| 434 "\n" | 448 "\n" |
| 435 " Example: default_output_extension = \".exe\"\n" | 449 " Example: default_output_extension = \".exe\"\n" |
| 436 "\n" | 450 "\n" |
| 437 " depfile [string]\n" | 451 " depfile [string with substitutions]\n" |
| 438 " Valid for: compiler tools (optional)\n" | 452 " Valid for: compiler tools (optional)\n" |
| 439 "\n" | 453 "\n" |
| 440 " If the tool can write \".d\" files, this specifies the name of\n" | 454 " If the tool can write \".d\" files, this specifies the name of\n" |
| 441 " the resulting file. These files are used to list header file\n" | 455 " the resulting file. These files are used to list header file\n" |
| 442 " dependencies (or other implicit input dependencies) that are\n" | 456 " dependencies (or other implicit input dependencies) that are\n" |
| 443 " discovered at build time. See also \"depsformat\".\n" | 457 " discovered at build time. See also \"depsformat\".\n" |
| 444 "\n" | 458 "\n" |
| 445 " Example: depfile = \"{{output}}.d\"\n" | 459 " Example: depfile = \"{{output}}.d\"\n" |
| 446 "\n" | 460 "\n" |
| 447 " depsformat [string]\n" | 461 " depsformat [string]\n" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 " runtime_link_output. Otherwise, the first entry in the\n" | 503 " runtime_link_output. Otherwise, the first entry in the\n" |
| 490 " outputs list should always be the main output which will be\n" | 504 " outputs list should always be the main output which will be\n" |
| 491 " linked to.\n" | 505 " linked to.\n" |
| 492 "\n" | 506 "\n" |
| 493 " Example for a compiler tool that produces .obj files:\n" | 507 " Example for a compiler tool that produces .obj files:\n" |
| 494 " outputs = [\n" | 508 " outputs = [\n" |
| 495 " \"{{source_out_dir}}/{{source_name_part}}.obj\"\n" | 509 " \"{{source_out_dir}}/{{source_name_part}}.obj\"\n" |
| 496 " ]\n" | 510 " ]\n" |
| 497 "\n" | 511 "\n" |
| 498 " Example for a linker tool that produces a .dll and a .lib. The\n" | 512 " Example for a linker tool that produces a .dll and a .lib. The\n" |
| 499 " use of {{output_extension}} rather than hardcoding \".dll\"\n" | 513 " use of {{target_output_name}}, {{output_extension}} and\n" |
| 500 " allows the extension of the library to be overridden on a\n" | 514 " {{output_dir}} allows the target to override these values.\n" |
| 501 " target-by-target basis, but in this example, it always\n" | |
| 502 " produces a \".lib\" import library:\n" | |
| 503 " outputs = [\n" | 515 " outputs = [\n" |
| 504 " \"{{root_out_dir}}/{{target_output_name}}" | 516 " \"{{output_dir}}/{{target_output_name}}" |
| 505 "{{output_extension}}\",\n" | 517 "{{output_extension}}\",\n" |
| 506 " \"{{root_out_dir}}/{{target_output_name}}.lib\",\n" | 518 " \"{{output_dir}}/{{target_output_name}}.lib\",\n" |
| 507 " ]\n" | 519 " ]\n" |
| 508 "\n" | 520 "\n" |
| 509 " link_output [string with substitutions]\n" | 521 " link_output [string with substitutions]\n" |
| 510 " depend_output [string with substitutions]\n" | 522 " depend_output [string with substitutions]\n" |
| 511 " runtime_link_output [string with substitutions]\n" | 523 " runtime_link_output [string with substitutions]\n" |
| 512 " Valid for: \"solink\" only (optional)\n" | 524 " Valid for: \"solink\" only (optional)\n" |
| 513 "\n" | 525 "\n" |
| 514 " These three files specify which of the outputs from the solink\n" | 526 " These three files specify which of the outputs from the solink\n" |
| 515 " tool should be used for linking and dependency tracking. These\n" | 527 " tool should be used for linking and dependency tracking. These\n" |
| 516 " should match entries in the \"outputs\". If unspecified, the\n" | 528 " should match entries in the \"outputs\". If unspecified, the\n" |
| 517 " first item in the \"outputs\" array will be used for all. See\n" | 529 " first item in the \"outputs\" array will be used for all. See\n" |
| 518 " \"Separate linking and dependencies for shared libraries\"\n" | 530 " \"Separate linking and dependencies for shared libraries\"\n" |
| 519 " below for more. If link_output is set but runtime_link_output\n" | 531 " below for more. If link_output is set but runtime_link_output\n" |
| 520 " is not set, runtime_link_output defaults to link_output.\n" | 532 " is not set, runtime_link_output defaults to link_output.\n" |
| 521 "\n" | 533 "\n" |
| 522 " On Windows, where the tools produce a .dll shared library and\n" | 534 " On Windows, where the tools produce a .dll shared library and\n" |
| 523 " a .lib import library, you will want the first two to be the\n" | 535 " a .lib import library, you will want the first two to be the\n" |
| 524 " import library and the third one to be the .dll file.\n" | 536 " import library and the third one to be the .dll file.\n" |
| 525 " On Linux, if you're not doing the separate linking/dependency\n" | 537 " On Linux, if you're not doing the separate linking/dependency\n" |
| 526 " optimization, all of these should be the .so output.\n" | 538 " optimization, all of these should be the .so output.\n" |
| 527 "\n" | 539 "\n" |
| 528 " output_prefix [string]\n" | 540 " output_prefix [string]\n" |
| 529 " Valid for: Linker tools (optional)\n" | 541 " Valid for: Linker tools (optional)\n" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 " {{output}}\n" | 629 " {{output}}\n" |
| 618 " The relative path and name of the output(s) of the current\n" | 630 " The relative path and name of the output(s) of the current\n" |
| 619 " build step. If there is more than one output, this will expand\n" | 631 " build step. If there is more than one output, this will expand\n" |
| 620 " to a list of all of them.\n" | 632 " to a list of all of them.\n" |
| 621 " Example: \"out/base/my_file.o\"\n" | 633 " Example: \"out/base/my_file.o\"\n" |
| 622 "\n" | 634 "\n" |
| 623 " {{target_gen_dir}}\n" | 635 " {{target_gen_dir}}\n" |
| 624 " {{target_out_dir}}\n" | 636 " {{target_out_dir}}\n" |
| 625 " The directory of the generated file and output directories,\n" | 637 " The directory of the generated file and output directories,\n" |
| 626 " respectively, for the current target. There is no trailing\n" | 638 " respectively, for the current target. There is no trailing\n" |
| 627 " slash.\n" | 639 " slash. See also {{output_dir}} for linker tools.\n" |
| 628 " Example: \"out/base/test\"\n" | 640 " Example: \"out/base/test\"\n" |
| 629 "\n" | 641 "\n" |
| 630 " {{target_output_name}}\n" | 642 " {{target_output_name}}\n" |
| 631 " The short name of the current target with no path information,\n" | 643 " The short name of the current target with no path information,\n" |
| 632 " or the value of the \"output_name\" variable if one is specified\n" | 644 " or the value of the \"output_name\" variable if one is specified\n" |
| 633 " in the target. This will include the \"output_prefix\" if any.\n" | 645 " in the target. This will include the \"output_prefix\" if any.\n" |
| 634 " See also {{label_name}}.\n" | 646 " See also {{label_name}}.\n" |
| 635 " Example: \"libfoo\" for the target named \"foo\" and an\n" | 647 " Example: \"libfoo\" for the target named \"foo\" and an\n" |
| 636 " output prefix for the linker tool of \"lib\".\n" | 648 " output prefix for the linker tool of \"lib\".\n" |
| 637 "\n" | 649 "\n" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 " {{libs}}\n" | 712 " {{libs}}\n" |
| 701 " Expands to the list of system libraries to link to. Each will\n" | 713 " Expands to the list of system libraries to link to. Each will\n" |
| 702 " be prefixed by the \"lib_prefix\".\n" | 714 " be prefixed by the \"lib_prefix\".\n" |
| 703 "\n" | 715 "\n" |
| 704 " As a special case to support Mac, libraries with names ending in\n" | 716 " As a special case to support Mac, libraries with names ending in\n" |
| 705 " \".framework\" will be added to the {{libs}} with \"-framework\"\n" | 717 " \".framework\" will be added to the {{libs}} with \"-framework\"\n" |
| 706 " preceeding it, and the lib prefix will be ignored.\n" | 718 " preceeding it, and the lib prefix will be ignored.\n" |
| 707 "\n" | 719 "\n" |
| 708 " Example: \"-lfoo -lbar\"\n" | 720 " Example: \"-lfoo -lbar\"\n" |
| 709 "\n" | 721 "\n" |
| 722 " {{output_dir}}\n" |
| 723 " The value of the \"output_dir\" variable in the target, or the\n" |
| 724 " the value of the \"default_output_dir\" value in the tool if the\n" |
| 725 " target does not override the output directory. This will be\n" |
| 726 " relative to the root_build_dir and will not end in a slash.\n" |
| 727 " Will be \".\" for output to the root_build_dir.\n" |
| 728 "\n" |
| 729 " This is subtly different than {{target_out_dir}} which is\n" |
| 730 " defined by GN based on the target's path and not overridable.\n" |
| 731 " {{output_dir}} is for the final output, {{target_out_dir}} is\n" |
| 732 " generally for object files and other outputs.\n" |
| 733 "\n" |
| 734 " Usually {{output_dir}} would be defined in terms of either\n" |
| 735 " {{target_out_dir}} or {{root_out_dir}}\n" |
| 736 "\n" |
| 710 " {{output_extension}}\n" | 737 " {{output_extension}}\n" |
| 711 " The value of the \"output_extension\" variable in the target,\n" | 738 " The value of the \"output_extension\" variable in the target,\n" |
| 712 " or the value of the \"default_output_extension\" value in the\n" | 739 " or the value of the \"default_output_extension\" value in the\n" |
| 713 " tool if the target does not specify an output extension.\n" | 740 " tool if the target does not specify an output extension.\n" |
| 714 " Example: \".so\"\n" | 741 " Example: \".so\"\n" |
| 715 "\n" | 742 "\n" |
| 716 " {{solibs}}\n" | 743 " {{solibs}}\n" |
| 717 " Extra libraries from shared library dependencide not specified\n" | 744 " Extra libraries from shared library dependencide not specified\n" |
| 718 " in the {{inputs}}. This is the list of link_output files from\n" | 745 " in the {{inputs}}. This is the list of link_output files from\n" |
| 719 " shared libraries (if the solink tool specifies a \"link_output\"\n" | 746 " shared libraries (if the solink tool specifies a \"link_output\"\n" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 752 "\n" | 779 "\n" |
| 753 " You will need to specify\n" | 780 " You will need to specify\n" |
| 754 " restat = true\n" | 781 " restat = true\n" |
| 755 " in the linker tool to make this work, so Ninja will detect if the\n" | 782 " in the linker tool to make this work, so Ninja will detect if the\n" |
| 756 " timestamp of the dependency file has changed after linking (otherwise\n" | 783 " timestamp of the dependency file has changed after linking (otherwise\n" |
| 757 " it will always assume that running a command updates the output):\n" | 784 " it will always assume that running a command updates the output):\n" |
| 758 "\n" | 785 "\n" |
| 759 " tool(\"solink\") {\n" | 786 " tool(\"solink\") {\n" |
| 760 " command = \"...\"\n" | 787 " command = \"...\"\n" |
| 761 " outputs = [\n" | 788 " outputs = [\n" |
| 762 " \"{{root_out_dir}}/{{target_output_name}}{{output_extension}}\",\n" | 789 " \"{{output_dir}}/{{target_output_name}}{{output_extension}}\",\n" |
| 763 " \"{{root_out_dir}}/{{target_output_name}}" | 790 " \"{{output_dir}}/{{target_output_name}}" |
| 764 "{{output_extension}}.TOC\",\n" | 791 "{{output_extension}}.TOC\",\n" |
| 765 " ]\n" | 792 " ]\n" |
| 766 " link_output =\n" | 793 " link_output =\n" |
| 767 " \"{{root_out_dir}}/{{target_output_name}}{{output_extension}}\"\n" | 794 " \"{{output_dir}}/{{target_output_name}}{{output_extension}}\"\n" |
| 768 " depend_output =\n" | 795 " depend_output =\n" |
| 769 " \"{{root_out_dir}}/{{target_output_name}}" | 796 " \"{{output_dir}}/{{target_output_name}}" |
| 770 "{{output_extension}}.TOC\"\n" | 797 "{{output_extension}}.TOC\"\n" |
| 771 " restat = true\n" | 798 " restat = true\n" |
| 772 " }\n" | 799 " }\n" |
| 773 "\n" | 800 "\n" |
| 774 "Example\n" | 801 "Example\n" |
| 775 "\n" | 802 "\n" |
| 776 " toolchain(\"my_toolchain\") {\n" | 803 " toolchain(\"my_toolchain\") {\n" |
| 777 " # Put these at the top to apply to all tools below.\n" | 804 " # Put these at the top to apply to all tools below.\n" |
| 778 " lib_prefix = \"-l\"\n" | 805 " lib_prefix = \"-l\"\n" |
| 779 " lib_dir_prefix = \"-L\"\n" | 806 " lib_dir_prefix = \"-L\"\n" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 !ReadString(&block_scope, "lib_dir_switch", tool.get(), | 886 !ReadString(&block_scope, "lib_dir_switch", tool.get(), |
| 860 &Tool::set_lib_dir_switch, err) || | 887 &Tool::set_lib_dir_switch, err) || |
| 861 !ReadPattern(&block_scope, "link_output", subst_validator, tool.get(), | 888 !ReadPattern(&block_scope, "link_output", subst_validator, tool.get(), |
| 862 &Tool::set_link_output, err) || | 889 &Tool::set_link_output, err) || |
| 863 !ReadPattern(&block_scope, "depend_output", subst_validator, tool.get(), | 890 !ReadPattern(&block_scope, "depend_output", subst_validator, tool.get(), |
| 864 &Tool::set_depend_output, err) || | 891 &Tool::set_depend_output, err) || |
| 865 !ReadPattern(&block_scope, "runtime_link_output", subst_validator, | 892 !ReadPattern(&block_scope, "runtime_link_output", subst_validator, |
| 866 tool.get(), &Tool::set_runtime_link_output, err) || | 893 tool.get(), &Tool::set_runtime_link_output, err) || |
| 867 !ReadString(&block_scope, "output_prefix", tool.get(), | 894 !ReadString(&block_scope, "output_prefix", tool.get(), |
| 868 &Tool::set_output_prefix, err) || | 895 &Tool::set_output_prefix, err) || |
| 896 !ReadPattern(&block_scope, "default_output_dir", subst_validator, |
| 897 tool.get(), &Tool::set_default_output_dir, err) || |
| 869 !ReadPrecompiledHeaderType(&block_scope, tool.get(), err) || | 898 !ReadPrecompiledHeaderType(&block_scope, tool.get(), err) || |
| 870 !ReadBool(&block_scope, "restat", tool.get(), &Tool::set_restat, err) || | 899 !ReadBool(&block_scope, "restat", tool.get(), &Tool::set_restat, err) || |
| 871 !ReadPattern(&block_scope, "rspfile", subst_validator, tool.get(), | 900 !ReadPattern(&block_scope, "rspfile", subst_validator, tool.get(), |
| 872 &Tool::set_rspfile, err) || | 901 &Tool::set_rspfile, err) || |
| 873 !ReadPattern(&block_scope, "rspfile_content", subst_validator, tool.get(), | 902 !ReadPattern(&block_scope, "rspfile_content", subst_validator, tool.get(), |
| 874 &Tool::set_rspfile_content, err)) { | 903 &Tool::set_rspfile_content, err)) { |
| 875 return Value(); | 904 return Value(); |
| 876 } | 905 } |
| 877 | 906 |
| 878 if (tool_type != Toolchain::TYPE_COPY && | 907 if (tool_type != Toolchain::TYPE_COPY && |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1013 return Value(); | 1042 return Value(); |
| 1014 | 1043 |
| 1015 Scope::KeyValueMap values; | 1044 Scope::KeyValueMap values; |
| 1016 block_scope.GetCurrentScopeValues(&values); | 1045 block_scope.GetCurrentScopeValues(&values); |
| 1017 toolchain->args() = values; | 1046 toolchain->args() = values; |
| 1018 | 1047 |
| 1019 return Value(); | 1048 return Value(); |
| 1020 } | 1049 } |
| 1021 | 1050 |
| 1022 } // namespace functions | 1051 } // namespace functions |
| OLD | NEW |