14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef TOOLS_GN_GYP_TARGET_WRITER_H_ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define TOOLS_GN_GYP_TARGET_WRITER_H_ 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <iosfwd> 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <vector> 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/basictypes.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "tools/gn/gyp_helper.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "tools/gn/path_output.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class BuilderRecord; 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Err; 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Settings; 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class SourceFile; 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class Target; 20d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)class Toolchain; 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class GypTargetWriter { 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 248bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) struct TargetGroup { 258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) TargetGroup() 268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) : debug(NULL), 278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) release(NULL), 288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) host_debug(NULL), 29d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) host_release(NULL), 30d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) debug64(NULL), 31d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) release64(NULL) { 328bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const BuilderRecord* debug; 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const BuilderRecord* release; 35d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 36d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) // When the main compile is targeting a different architecture, these will 37d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) // contain the builds with the host system's toolchain. Only supported on 38d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) // Linux. 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const BuilderRecord* host_debug; 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const BuilderRecord* host_release; 41d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) 42d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) // On Windows, we do both 32-bit and 64-bit builds. Null on non-Windows. 43d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) const BuilderRecord* debug64; 44d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) const BuilderRecord* release64; 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) }; 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GypTargetWriter(const Target* target, 48d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) const Toolchain* toolchain, 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const SourceDir& gyp_dir, 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::ostream& out); 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~GypTargetWriter(); 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) static void WriteFile(const SourceFile& gyp_file, 548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::vector<TargetGroup>& targets, 55d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) const Toolchain* debug_toolchain, 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Err* err); 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void Run() = 0; 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected: 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Writes the given number of spaces to the output stream and returns it. 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::ostream& Indent(int spaces); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static std::ostream& Indent(std::ostream& out, int spaces); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static const int kExtraIndent = 2; 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const Settings* settings_; // Non-owning. 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const Target* target_; // Non-owning. 69d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) const Toolchain* toolchain_; // Toolchain corresponding to target_. 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SourceDir gyp_dir_; // Dir of GYP file. 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::ostream& out_; 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) GypHelper helper_; 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) PathOutput path_output_; 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(GypTargetWriter); 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // TOOLS_GN_GYP_TARGET_WRITER_H_ 81