From 96a651cfa70e057d9c3cdda9ad055fc031a0232f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20P=C3=B6chtrager?= Date: Thu, 17 Aug 2023 21:52:37 +0200 Subject: [PATCH] Support both short and full SDK version naming (e.g., 14 and 14.0) (closes #377) Remove troublesome libc++ IWYU mapping file which may cause compiler errors (https://github.com/include-what-you-use/include-what-you-use/tree/master) Update build_compiler_rt.sh --- build.sh | 20 ++++++++++++++------ build_compiler_rt.sh | 3 ++- wrapper/target.cpp | 11 +++++++++-- wrapper/target.h | 2 +- wrapper/tools.h | 6 ++++++ 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/build.sh b/build.sh index d08ef2a..dec1106 100755 --- a/build.sh +++ b/build.sh @@ -40,20 +40,20 @@ case $SDK_VERSION in 10.14*) TARGET=darwin18; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=0; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 10.15*) TARGET=darwin19; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=0; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 10.16*) TARGET=darwin20; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; - 11.0*) TARGET=darwin20.1; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; + 11|11.0*) TARGET=darwin20.1; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 11.1*) TARGET=darwin20.2; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 11.2*) TARGET=darwin20.3; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 11.3*) TARGET=darwin20.4; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; - 12.0*) TARGET=darwin21.1; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; + 12|12.0*) TARGET=darwin21.1; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 12.1*) TARGET=darwin21.2; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 12.2*) TARGET=darwin21.3; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 12.3*) TARGET=darwin21.4; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 12.4*) TARGET=darwin21.5; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; - 13.0*) TARGET=darwin22; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; + 13|13.0*) TARGET=darwin22; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 13.1*) TARGET=darwin22.2; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 13.2*) TARGET=darwin22.3; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; 13.3*) TARGET=darwin22.4; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.9; ;; - 14.0*) TARGET=darwin23; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.13; ;; + 14|14.0*) TARGET=darwin23; X86_64H_SUPPORTED=1; I386_SUPPORTED=0; ARM_SUPPORTED=1; NEED_TAPI_SUPPORT=1; OSX_VERSION_MIN_INT=10.13; ;; *) echo "Unsupported SDK"; exit 1 ;; esac @@ -185,7 +185,12 @@ popd &>/dev/null ## Extract SDK and move it to $SDK_DIR ## -SDK=$(ls $TARBALL_DIR/MacOSX$SDK_VERSION*) +if [[ $SDK_VERSION == *.* ]]; then + SDK=$(ls $TARBALL_DIR/MacOSX$SDK_VERSION*) +else + SDK=$(ls $TARBALL_DIR/MacOSX$SDK_VERSION.*| grep -v "\.0") +fi + echo "" extract $SDK @@ -198,7 +203,10 @@ fi ## Fix broken SDKs ## -pushd $SDK_DIR/MacOSX$SDK_VERSION.sdk &>/dev/null +pushd $SDK_DIR/MacOSX$SDK_VERSION*.sdk &>/dev/null +# Remove troublesome libc++ IWYU mapping file that may cause compiler errors +# https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUMappings.md +rm -f usr/include/c++/v1/libcxx.imp set +e files=$(echo $BASE_DIR/oclang/quirks/*.h) for file in $files; do diff --git a/build_compiler_rt.sh b/build_compiler_rt.sh index c7127b8..e0b6b91 100755 --- a/build_compiler_rt.sh +++ b/build_compiler_rt.sh @@ -57,7 +57,8 @@ case $CLANG_VERSION in 15.* ) BRANCH=release/15.x; USE_CMAKE=1; ;; 16.* ) BRANCH=release/16.x; USE_CMAKE=1; ;; 17.* ) BRANCH=main; USE_CMAKE=1; ;; - * ) echo "Unsupported Clang version, must be >= 3.2 and <= 15.0" 1>&2; exit 1; + 18.* ) BRANCH=main; USE_CMAKE=1; ;; + * ) echo "Unsupported Clang version, must be >= 3.2 and <= 18.0" 1>&2; exit 1; esac if [ $(osxcross-cmp $CLANG_VERSION ">=" 3.5) -eq 1 ]; then diff --git a/wrapper/target.cpp b/wrapper/target.cpp index 7fadfb1..5d2d938 100644 --- a/wrapper/target.cpp +++ b/wrapper/target.cpp @@ -140,7 +140,7 @@ void Target::overrideDefaultSDKPath(const char *SDKSearchDir) { } } -bool Target::getSDKPath(std::string &path, bool MacOSX10_16Fix) const { +bool Target::getSDKPath(std::string &path, bool MacOSX10_16Fix, bool majorVersionOnly) const { OSVersion SDKVer = getSDKOSNum(); if (SDK) { @@ -150,7 +150,11 @@ bool Target::getSDKPath(std::string &path, bool MacOSX10_16Fix) const { SDKVer = OSVersion(10, 16); path = execpath; path += "/../SDK/MacOSX"; - path += SDKVer.shortStr(); + if (majorVersionOnly) { + path += SDKVer.majorStr(); + } else { + path += SDKVer.shortStr(); + } if (SDKVer <= OSVersion(10, 4)) path += "u"; path += ".sdk"; @@ -161,6 +165,9 @@ bool Target::getSDKPath(std::string &path, bool MacOSX10_16Fix) const { if (SDKVer == OSVersion(11, 0) && !MacOSX10_16Fix) return getSDKPath(path, true); + if (SDKVer.minor == 0 && !majorVersionOnly) + return getSDKPath(path, false, true); + err << "cannot find macOS SDK (expected in: " << path << ")" << err.endl(); diff --git a/wrapper/target.h b/wrapper/target.h index fc5f526..36728bd 100644 --- a/wrapper/target.h +++ b/wrapper/target.h @@ -96,7 +96,7 @@ struct Target { OSVersion getSDKOSNum() const; void overrideDefaultSDKPath(const char *SDKSearchDir); - bool getSDKPath(std::string &path, bool MacOSX10_16Fix = false) const; + bool getSDKPath(std::string &path, bool MacOSX10_16Fix = false, bool majorVersionOnly = false) const; bool getMacPortsDir(std::string &path) const; bool getMacPortsSysRootDir(std::string &path) const; diff --git a/wrapper/tools.h b/wrapper/tools.h index 86ad4ae..dfe35b0 100644 --- a/wrapper/tools.h +++ b/wrapper/tools.h @@ -326,6 +326,12 @@ struct OSVersion { return tmp.str(); } + std::string majorStr() const { + std::stringstream tmp; + tmp << major; + return tmp.str(); + } + int major; int minor; int patch;