| // 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 "base/macros.h" |
| #include "gn/lib_file.h" |
| #include "gn/source_dir.h" |
| #include "gn/source_file.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) |
| 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<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<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_; |
| // If you add a new one, be sure to update AppendValues(). |
| |
| std::string precompiled_header_; |
| SourceFile precompiled_source_; |
| }; |
| |
| #endif // TOOLS_GN_CONFIG_VALUES_H_ |