| // Copyright (c) 2013 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef TOOLS_GN_CONFIG_VALUES_H_ | |
| #define TOOLS_GN_CONFIG_VALUES_H_ | |
| #include <string> | |
| #include <vector> | |
| #include "gn/lib_file.h" | |
| #include "gn/source_dir.h" | |
| #include "gn/source_file.h" | |
| #include "gn/substitution_pattern.h" | |
| // Holds the values (include_dirs, defines, compiler flags, etc.) for a given | |
| // config or target. | |
| class ConfigValues { | |
| public: | |
| ConfigValues(); | |
| ~ConfigValues(); | |
| // Appends the values from the given config to this one. | |
| void AppendValues(const ConfigValues& append); | |
| #define STRING_VALUES_ACCESSOR(name) \ | |
| const std::vector<std::string>& name() const { \ | |
| return name##_; \ | |
| } \ | |
| std::vector<std::string>& name() { \ | |
| return name##_; \ | |
| } | |
| #define DIR_VALUES_ACCESSOR(name) \ | |
| const std::vector<SourceDir>& name() const { \ | |
| return name##_; \ | |
| } \ | |
| std::vector<SourceDir>& name() { \ | |
| return name##_; \ | |
| } | |
| // ================================================================= | |
| // IMPORTANT: If you add a new one, be sure to update AppendValues() | |
| // and command_desc.cc. | |
| // ================================================================= | |
| STRING_VALUES_ACCESSOR(arflags) | |
| STRING_VALUES_ACCESSOR(asmflags) | |
| STRING_VALUES_ACCESSOR(cflags) | |
| STRING_VALUES_ACCESSOR(cflags_c) | |
| STRING_VALUES_ACCESSOR(cflags_cc) | |
| STRING_VALUES_ACCESSOR(cflags_objc) | |
| STRING_VALUES_ACCESSOR(cflags_objcc) | |
| STRING_VALUES_ACCESSOR(defines) | |
| DIR_VALUES_ACCESSOR(framework_dirs) | |
| STRING_VALUES_ACCESSOR(frameworks) | |
| STRING_VALUES_ACCESSOR(weak_frameworks) | |
| STRING_VALUES_ACCESSOR(weak_libraries) | |
| DIR_VALUES_ACCESSOR(include_dirs) | |
| STRING_VALUES_ACCESSOR(ldflags) | |
| DIR_VALUES_ACCESSOR(lib_dirs) | |
| STRING_VALUES_ACCESSOR(rustflags) | |
| STRING_VALUES_ACCESSOR(rustenv) | |
| STRING_VALUES_ACCESSOR(swiftflags) | |
| // ================================================================= | |
| // IMPORTANT: If you add a new one, be sure to update AppendValues() | |
| // and command_desc.cc. | |
| // ================================================================= | |
| #undef STRING_VALUES_ACCESSOR | |
| #undef DIR_VALUES_ACCESSOR | |
| const std::vector<SourceFile>& inputs() const { return inputs_; } | |
| std::vector<SourceFile>& inputs() { return inputs_; } | |
| const std::vector<SubstitutionPattern>& c_additional_outputs() const { | |
| return c_additional_outputs_; | |
| } | |
| std::vector<SubstitutionPattern>& c_additional_outputs() { | |
| return c_additional_outputs_; | |
| } | |
| const std::vector<LibFile>& libs() const { return libs_; } | |
| std::vector<LibFile>& libs() { return libs_; } | |
| const std::vector<std::pair<std::string, LibFile>>& externs() const { | |
| return externs_; | |
| } | |
| std::vector<std::pair<std::string, LibFile>>& externs() { return externs_; } | |
| bool has_precompiled_headers() const { | |
| return !precompiled_header_.empty() || !precompiled_source_.is_null(); | |
| } | |
| const std::string& precompiled_header() const { return precompiled_header_; } | |
| void set_precompiled_header(const std::string& f) { precompiled_header_ = f; } | |
| const SourceFile& precompiled_source() const { return precompiled_source_; } | |
| void set_precompiled_source(const SourceFile& f) { precompiled_source_ = f; } | |
| private: | |
| std::vector<std::string> arflags_; | |
| std::vector<std::string> asmflags_; | |
| std::vector<std::string> cflags_; | |
| std::vector<std::string> cflags_c_; | |
| std::vector<std::string> cflags_cc_; | |
| std::vector<std::string> cflags_objc_; | |
| std::vector<std::string> cflags_objcc_; | |
| std::vector<std::string> defines_; | |
| std::vector<SourceDir> include_dirs_; | |
| std::vector<SourceDir> framework_dirs_; | |
| std::vector<std::string> frameworks_; | |
| std::vector<std::string> weak_frameworks_; | |
| std::vector<std::string> weak_libraries_; | |
| std::vector<SourceFile> inputs_; | |
| std::vector<std::string> ldflags_; | |
| std::vector<SourceDir> lib_dirs_; | |
| std::vector<LibFile> libs_; | |
| std::vector<std::string> rustflags_; | |
| std::vector<std::string> rustenv_; | |
| std::vector<std::string> swiftflags_; | |
| std::vector<std::pair<std::string, LibFile>> externs_; | |
| std::vector<SubstitutionPattern> c_additional_outputs_; | |
| // If you add a new one, be sure to update AppendValues(). | |
| std::string precompiled_header_; | |
| SourceFile precompiled_source_; | |
| }; | |
| #endif // TOOLS_GN_CONFIG_VALUES_H_ |