// Copyright 2015 The Bazel Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. syntax = "proto2"; package build.xcode; option java_outer_classname = "XcodeGenProtos"; option java_package = "com.google.devtools.build.xcode.xcodegen.proto"; // Protos named "*Control" are protos that can be used to tell Xcodegen what to // do. // Contains all information needed to pass to Xcodegen for it to generate a // project file. message Control { // Relative path to the project.pbxproj file. This value is used to construct // relative paths in the xcodeproj file, as well as to specify where to write // the resulting project file. optional string pbxproj = 1; // The targets to generate. repeated TargetControl target = 2; // Project-level build settings. These are shared with every target, unless // an individual target overrides any of them. repeated XcodeprojBuildSetting build_setting = 3; // Absolute path to the root of the current Bazel user workspace. optional string workspace_root = 4; // CPU architectures (armv7, arm64, i386, x86_64, etc.) used to build for // targets in the project.pbxproj file. repeated string cpu_architecture = 5; } // Information about dependency on a separate target. message DependencyControl { // Label of the target in the project file that is depended upon. optional string target_label = 1; // Set to true if this dependency is that of a xctest target on its TEST_HOST. // Considered 'false' if omitted. optional bool test_host = 2; } // Contains information specific to a single target in the project file. // Next ID: 24 message TargetControl { // A short name for the target that need not be unique. For instance, for // binary targets this corresponds to the product name. optional string name = 1; // Relative paths to source files to compile. Each source file is added to // the sources build phase of the target, so any file accepted by Xcode is // valid. repeated string source_file = 2; // Identical to source_file, but only Objective-C[++] source files are // valid. These sources are compiled without ARC. repeated string non_arc_source_file = 6; // Relative paths to support files, such as BUILD, header, and non-compiled // source files. These are included in the project so they can be opened in // the project explorer view, but are not compiled into object files. repeated string support_file = 3; // Dependencies this target has on other targets. repeated DependencyControl dependency = 4; // (Used for objc_binary and objc_bundle_library targets) path to the // -Info.plist file for the application. optional string infoplist = 5; // A unique name for the target in the project. This is similar to the name // field, but is globally unique and may be long. optional string label = 7; // Additional flags to pass to the [objective] c[++] compiler. repeated string copt = 8; // Additional flags to pass to the linker. repeated string linkopt = 22; // Paths to *.xcassets directories to include in the target as asset // catalogs. For all targets, this causes the .xcassets directory to be // included in the Project Navigator. For targets that can include them (e.g. // objc_binary), this causes them to be included in the resources build // phase. repeated string xcassets_dir = 9; // Miscellaneous build settings. Each setting is applied to all build // configurations. repeated XcodeprojBuildSetting build_setting = 10; // Paths to strings or xib files. Xcodegen will determine automatically if // they are localized (i.e. are in a directory named *.lproj) or not. // TODO(bazel-team): Introduce a more powerful resource file protobuf, a // list of which can be used to specify all resources. repeated string general_resource_file = 11; // SDK frameworks to link with this target. This should be every framework // required by the targets in the transitive dependency tree. Xcodegen does // not find these transitive dependencies automatically; they must be added // to this repeated field. repeated string sdk_framework = 12; // Paths to non-SDK frameworks to link with this target, relative to the // same path as every other path in the control file. This should be every // framework required by the targets in the transitive dependency tree. repeated string framework = 21; // Paths to non-SDK frameworks relative to the same path as every other path // in the control file. These frameworks will be added to framework search // paths for the target (with -F) but will not actually be linked (that is, // there will be no -framework). repeated string framework_search_path_only = 23; // Path to all .xcdatamodel directories required. All directories inside // a .xcdatamodeld directory are grouped into XCVersionGroups by the path of // the .xcdatamodeld directory. repeated string xcdatamodel = 13; // Path to all .a libraries to link with this target. When used on static // library targets, the library is not actually linked, but it will appear // in the Xcode Project Navigator. These are considered to be pre-built // libraries. In other words, they are NOT built by Xcode as a dependency // before this target is built. repeated string imported_library = 14; // Path to directories to include as user header search paths. These are non- // recursive. These should be specified here rather than in the build_setting // field because the build_setting field requires paths to be specified // relative to the container of the .xcodeproj directory, while this // attribute is relative to the same path as every other path in the control // file. These paths correspond to the "-iquote" arguments passed to the // compiler. repeated string user_header_search_path = 15; // Path to directories to include as header search paths. These are non- // recursive. These should be specified here rather than in the build_setting // field because the build_setting field requires paths to be specified // relative to the container of the .xcodeproj directory, while this // attribute is relative to the same path as every other path in the control // file. These paths correspond to the "-I" arguments passed to the // compiler. repeated string header_search_path = 16; // GCC_PREFIX_HEADER path. Needs to be be specified here rather than in the // build_setting field because the build_setting field requires paths to be // specified relative to the container of the .xcodeproj directory, while // this attribute is relative to the same path as every other path in the // control file. optional string pch_path = 20; // Path to .bundle directories this target depends on. For static library // targets, this only causes the bundle to appear in the Project Navigator. // For application target, this also causes the bundle to be linked with the // application. repeated string bundle_import = 17; // The product type, for instance "com.apple.product-type.bundle". If // omitted, the presence of the infoplist field indicates the type: // has infoplist: "com.apple.product-type.application" // does not have infoplist: "com.apple.product-type.library.static" optional string product_type = 18; // SDK .dylib files to link with this target. Each name should not include the // the path or the .dylib extension, e.g. "libz" to link in // "SDKROOT/usr/lib/libz.dylib". For all targets, this causes the library to // appear in the Project Build Settings under OTHER_LDFLAGS. For binary // targets, this causes the library to be linked with the final binary. repeated string sdk_dylib = 19; } // Represents the mapping of a build setting recognized by Xcode project files, // for instance ASSETCATALOG_COMPILER_APPICON_NAME. message XcodeprojBuildSetting { optional string name = 1; optional string value = 2; }