// Copyright (C) 2014 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. 

// A bmalloc modulemap confuses the building of PALSwift on older SDKs
// For now we enable only on the most recent macOS SDKs and we will
// gradually expand to the most recent of all platforms.
GENERATE_BMALLOC_MODULEMAP = NO
GENERATE_BMALLOC_MODULEMAP[sdk=macosx*] = $(GENERATE_BMALLOC_MODULEMAP$(WK_MACOS_2600));
GENERATE_BMALLOC_MODULEMAP[sdk=iphone*] = $(GENERATE_BMALLOC_MODULEMAP$(WK_IOS_26));
GENERATE_BMALLOC_MODULEMAP_MACOS_SINCE_2600 = YES;
GENERATE_BMALLOC_MODULEMAP_MACOS_BEFORE_2600 = NO;
GENERATE_BMALLOC_MODULEMAP_IOS_SINCE_26 = YES;
GENERATE_BMALLOC_MODULEMAP_IOS_BEFORE_26 = NO;

EXCLUDED_SOURCE_FILE_NAMES = $(inherited) $(EXCLUDED_SOURCE_FILE_NAMES_$(GENERATE_BMALLOC_MODULEMAP));
EXCLUDED_SOURCE_FILE_NAMES_NO = module.modulemap;

EXECUTABLE_PREFIX = lib;
INSTALL_PATH = $(BMALLOC_INSTALL_PATH_PREFIX)$(WK_LIBRARY_INSTALL_PATH);
INSTALLHDRS_SCRIPT_PHASE = YES;
PRIVATE_HEADERS_FOLDER_PATH = $(BMALLOC_INSTALL_PATH_PREFIX)$(WK_LIBRARY_HEADERS_FOLDER_PATH)/bmalloc;
PRODUCT_NAME = bmalloc;

GCC_SYMBOLS_PRIVATE_EXTERN = YES;
STRIP_INSTALLED_PRODUCT = NO;

// Used to generate headers filelist for TAPI in JavaScriptCore. CPP_HEADERMAP_PRODUCT_HEADERS_VFS_FILE
// is not exported to script phases, so it must be bound to a different name.
WK_HEADERS_VFS_FILE = $(CPP_HEADERMAP_PRODUCT_HEADERS_VFS_FILE);
