Merge pull request #1028 from billhollings/xcode12
Support fat platform libraries in XCFrameworks and dylibs.
This commit is contained in:
commit
36803088cd
@ -722,11 +722,6 @@
|
|||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = c99;
|
GCC_C_LANGUAGE_STANDARD = c99;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
@ -757,11 +752,6 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = NO;
|
CLANG_ENABLE_OBJC_ARC = NO;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = c99;
|
GCC_C_LANGUAGE_STANDARD = c99;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
@ -459,11 +459,6 @@
|
|||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = c99;
|
GCC_C_LANGUAGE_STANDARD = c99;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
@ -497,11 +492,6 @@
|
|||||||
CLANG_ENABLE_OBJC_ARC = NO;
|
CLANG_ENABLE_OBJC_ARC = NO;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = c99;
|
GCC_C_LANGUAGE_STANDARD = c99;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||||
|
@ -457,11 +457,6 @@
|
|||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = c99;
|
GCC_C_LANGUAGE_STANDARD = c99;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
@ -493,11 +488,6 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CLANG_ENABLE_OBJC_ARC = NO;
|
CLANG_ENABLE_OBJC_ARC = NO;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_C_LANGUAGE_STANDARD = c99;
|
GCC_C_LANGUAGE_STANDARD = c99;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREPROCESSOR_DEFINITIONS = GLM_FORCE_RADIANS;
|
GCC_PREPROCESSOR_DEFINITIONS = GLM_FORCE_RADIANS;
|
||||||
|
@ -5404,11 +5404,6 @@
|
|||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
@ -5458,11 +5453,6 @@
|
|||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
@ -1629,11 +1629,6 @@
|
|||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
@ -1662,6 +1657,9 @@
|
|||||||
);
|
);
|
||||||
MACH_O_TYPE = staticlib;
|
MACH_O_TYPE = staticlib;
|
||||||
MTL_ENABLE_DEBUG_INFO = YES;
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
MVK_SKIP_DYLIB = "";
|
||||||
|
"MVK_SKIP_DYLIB[sdk=appletvsimulator*]" = YES;
|
||||||
|
"MVK_SKIP_DYLIB[sdk=iphonesimulator*]" = YES;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PRELINK_LIBS = "${CONFIGURATION_BUILD_DIR}/libMoltenVKSPIRVToMSLConverter.a ${CONFIGURATION_BUILD_DIR}/libMoltenVKGLSLToSPIRVConverter.a";
|
PRELINK_LIBS = "${CONFIGURATION_BUILD_DIR}/libMoltenVKSPIRVToMSLConverter.a ${CONFIGURATION_BUILD_DIR}/libMoltenVKGLSLToSPIRVConverter.a";
|
||||||
PRODUCT_NAME = MoltenVK;
|
PRODUCT_NAME = MoltenVK;
|
||||||
@ -1697,11 +1695,6 @@
|
|||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
@ -1728,6 +1721,9 @@
|
|||||||
);
|
);
|
||||||
MACH_O_TYPE = staticlib;
|
MACH_O_TYPE = staticlib;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MVK_SKIP_DYLIB = "";
|
||||||
|
"MVK_SKIP_DYLIB[sdk=appletvsimulator*]" = YES;
|
||||||
|
"MVK_SKIP_DYLIB[sdk=iphonesimulator*]" = YES;
|
||||||
PRELINK_LIBS = "${CONFIGURATION_BUILD_DIR}/libMoltenVKSPIRVToMSLConverter.a ${CONFIGURATION_BUILD_DIR}/libMoltenVKGLSLToSPIRVConverter.a";
|
PRELINK_LIBS = "${CONFIGURATION_BUILD_DIR}/libMoltenVKSPIRVToMSLConverter.a ${CONFIGURATION_BUILD_DIR}/libMoltenVKGLSLToSPIRVConverter.a";
|
||||||
PRODUCT_NAME = MoltenVK;
|
PRODUCT_NAME = MoltenVK;
|
||||||
SKIP_INSTALL = YES;
|
SKIP_INSTALL = YES;
|
||||||
|
@ -989,11 +989,6 @@
|
|||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
@ -1050,11 +1045,6 @@
|
|||||||
COPY_PHASE_STRIP = YES;
|
COPY_PHASE_STRIP = YES;
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
"EXCLUDED_ARCHS[sdk=appletvos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=appletvsimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphoneos*]" = arm64e;
|
|
||||||
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
|
|
||||||
"EXCLUDED_ARCHS[sdk=macosx*]" = arm64;
|
|
||||||
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
|
||||||
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
|
||||||
GCC_NO_COMMON_BLOCKS = YES;
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
@ -1,25 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Query the architectures in the built static library. If it contains only a single architecture,
|
# Copy the static library file to its own directory within the XCFrameworkStaging directory.
|
||||||
# copy the file into a separate file in its own directory within the XCFrameworkStaging directory.
|
|
||||||
# If it contains mulitple architectures, extract each architecture into a separate file in its own
|
|
||||||
# directory within the XCFrameworkStaging directory.
|
|
||||||
#
|
#
|
||||||
# Requires the variable MVK_XCFWK_STAGING_DIR.
|
# Requires the variable MVK_XCFWK_STAGING_DIR.
|
||||||
#
|
#
|
||||||
export MVK_PROD_FILENAME="lib${PRODUCT_NAME}.a"
|
export MVK_PROD_FILENAME="lib${PRODUCT_NAME}.a"
|
||||||
export MVK_BUILT_PROD_FILE="${BUILT_PRODUCTS_DIR}/${MVK_PROD_FILENAME}"
|
export MVK_BUILT_PROD_FILE="${BUILT_PRODUCTS_DIR}/${MVK_PROD_FILENAME}"
|
||||||
|
|
||||||
IFS=' ' read -ra archs <<< $(lipo -archs "${MVK_BUILT_PROD_FILE}")
|
staging_dir="${MVK_XCFWK_STAGING_DIR}/Platform${EFFECTIVE_PLATFORM_NAME}"
|
||||||
if [ ${#archs[@]} -eq '1' ]; then
|
|
||||||
arch="${archs[0]}"
|
|
||||||
staging_dir="${MVK_XCFWK_STAGING_DIR}/${arch}${EFFECTIVE_PLATFORM_NAME}"
|
|
||||||
mkdir -p "${staging_dir}"
|
mkdir -p "${staging_dir}"
|
||||||
cp -a "${MVK_BUILT_PROD_FILE}" "${staging_dir}/${MVK_PROD_FILENAME}"
|
cp -a "${MVK_BUILT_PROD_FILE}" "${staging_dir}/${MVK_PROD_FILENAME}"
|
||||||
else
|
|
||||||
for arch in ${archs[@]}; do
|
|
||||||
staging_dir="${MVK_XCFWK_STAGING_DIR}/${arch}${EFFECTIVE_PLATFORM_NAME}"
|
|
||||||
mkdir -p "${staging_dir}"
|
|
||||||
lipo "${MVK_BUILT_PROD_FILE}" -thin ${arch} -output "${staging_dir}/${MVK_PROD_FILENAME}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
@ -1,6 +1,12 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
set -e
|
# Allow dylib building to be skipped based on bulid setting.
|
||||||
|
# For example, skipping the build of a dylib for Simulator builds
|
||||||
|
# because Xcode cannot currently handle creating a Simulator dylib
|
||||||
|
# containing both x86_64 and arm64 (Apple Silicon) architectures.
|
||||||
|
if [ "${MVK_SKIP_DYLIB}" == "YES" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
export MVK_BUILT_PROD_DIR="${BUILT_PRODUCTS_DIR}"
|
export MVK_BUILT_PROD_DIR="${BUILT_PRODUCTS_DIR}"
|
||||||
export MVK_DYLIB_NAME="lib${PRODUCT_NAME}.dylib"
|
export MVK_DYLIB_NAME="lib${PRODUCT_NAME}.dylib"
|
||||||
|
@ -8,19 +8,21 @@ function copy_dylib() {
|
|||||||
src_dir="${BUILD_DIR}/${CONFIGURATION}${1}/dynamic"
|
src_dir="${BUILD_DIR}/${CONFIGURATION}${1}/dynamic"
|
||||||
dst_dir="${MVK_PKG_PROD_PATH}/dylib/${2}"
|
dst_dir="${MVK_PKG_PROD_PATH}/dylib/${2}"
|
||||||
|
|
||||||
echo Copying dylib from "${src_dir}" to "${dst_dir}"
|
# If dylib file exists, copy it, any debug symbol file, and the Vulkan layer JSON file
|
||||||
|
src_file="${src_dir}/lib${MVK_PROD_NAME}.dylib"
|
||||||
if [[ -e "${src_dir}" ]]; then
|
if [[ -e "${src_file}" ]]; then
|
||||||
rm -rf "${dst_dir}"
|
rm -rf "${dst_dir}"
|
||||||
mkdir -p "${dst_dir}"
|
mkdir -p "${dst_dir}"
|
||||||
|
|
||||||
cp -a "${src_dir}/lib${MVK_PROD_NAME}.dylib" "${dst_dir}"
|
cp -a "${src_file}" "${dst_dir}"
|
||||||
|
|
||||||
if [[ -e "${src_dir}/lib${MVK_PROD_NAME}.dylib.dSYM" ]]; then
|
src_file+=".dSYM"
|
||||||
cp -a "${src_dir}/lib${MVK_PROD_NAME}.dylib.dSYM" "${dst_dir}"
|
if [[ -e "${src_file}" ]]; then
|
||||||
|
cp -a "${src_file}" "${dst_dir}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp -a "${MVK_PROD_PROJ_PATH}/icd/${MVK_PROD_NAME}_icd.json" "${dst_dir}"
|
cp -a "${MVK_PROD_PROJ_PATH}/icd/${MVK_PROD_NAME}_icd.json" "${dst_dir}"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user