// Copyright (C) 2020 Apple Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#include "../Configurations/SDKVariant.xcconfig"
#include "../Configurations/Version.xcconfig"

ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
ENABLE_TESTABILITY[config=Debug] = YES;
ONLY_ACTIVE_ARCH[config=Debug] = YES;
SWIFT_COMPILATION_MODE[config=Release] = wholemodule;
SWIFT_VERSION = 5.0;

SWIFT_OPTIMIZATION_LEVEL[config=Debug] = -Onone;
SWIFT_OPTIMIZATION_LEVEL[config=Release] = -O;

DEBUG_INFORMATION_FORMAT[config=Debug] = dwarf;
DEBUG_INFORMATION_FORMAT[config=Release] = dwarf-with-dsym;

ONLY_ACTIVE_ARCH[config=Debug] = YES;
ONLY_ACTIVE_ARCH[config=Release] = NO;

SDKROOT = macosx.internal;
SDKROOT[sdk=iphoneos*] = iphoneos.internal;
SDKROOT[sdk=appletv*] = appletvos.internal;
SDKROOT[sdk=watchos*] = watchos.internal;
