//
//  StaticLibrary.xcconfig
//
//  Xcode configuration file for a static library target.
//
//  This is a _Target_ config file, for use in the "Based on" popup of the
//  settings dialog for a target. Do not attempt to apply this as the base
//  of an Xcode configuration in the project settings dialog.
//
//  Copyright 2006-2008 Google Inc.
//
//  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.
//

//  Static libs should not have their internal globals or external symbols
//  stripped.
STRIP_STYLE = debugging
