From 7531b539ab5b4725e28d1b81d583968f46a8b79e Mon Sep 17 00:00:00 2001 From: Lain Yang Date: Mon, 20 Feb 2023 14:22:00 +0800 Subject: [PATCH] MIPS: add a new multilib for -mnan=legacy Signed-off-by: Lain Yang --- clang/lib/Driver/ToolChains/Arch/Mips.cpp | 16 ++++++++++++++++ clang/lib/Driver/ToolChains/OHOS.cpp | 9 +++++++++ llvm-build/build.py | 5 +++-- llvm-build/build_musl.sh | 4 ++-- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Arch/Mips.cpp b/clang/lib/Driver/ToolChains/Arch/Mips.cpp index 5a509dbb2bd3..fde42fa885e9 100644 --- a/clang/lib/Driver/ToolChains/Arch/Mips.cpp +++ b/clang/lib/Driver/ToolChains/Arch/Mips.cpp @@ -56,6 +56,13 @@ void mips::getMipsCPUAndABI(const ArgList &Args, const llvm::Triple &Triple, DefMips64CPU = "mips3"; } + // OHOS_LOCAL begin + // TODO: Which mips64 cpu will supported by OHOS? + if (Triple.isOpenHOS()) { + DefMips32CPU = "mips32r2"; + } + // OHOS_LOCAL end + if (Arg *A = Args.getLastArg(clang::driver::options::OPT_march_EQ, options::OPT_mcpu_EQ)) CPUName = A->getValue(); @@ -307,6 +314,10 @@ void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, } else D.Diag(diag::err_drv_unsupported_option_argument) << A->getOption().getName() << Val; + // OHOS_LOCAL begin + } else if (Triple.isOpenHOS()) { + Features.push_back("+nan2008"); + // OHOS_LOCAL end } if (Arg *A = Args.getLastArg(options::OPT_mabs_EQ)) { @@ -356,6 +367,11 @@ void mips::getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, Features.push_back("+nooddspreg"); } else Features.push_back("+fp64"); + // OHOS_LOCAL begin + } else if (Triple.isOpenHOS()) { + // Set FP64 as default in OHOS + Features.push_back("+fp64"); + // OHOS_LOCAL end } else if (mips::shouldUseFPXX(Args, Triple, CPUName, ABIName, FloatABI)) { Features.push_back("+fpxx"); Features.push_back("+nooddspreg"); diff --git a/clang/lib/Driver/ToolChains/OHOS.cpp b/clang/lib/Driver/ToolChains/OHOS.cpp index 80ff978d48cd..fe952bbf9b7e 100644 --- a/clang/lib/Driver/ToolChains/OHOS.cpp +++ b/clang/lib/Driver/ToolChains/OHOS.cpp @@ -53,6 +53,9 @@ static bool findOHOSMuslMultilibs(const Multilib::flags_list &Flags, .flag("+mfloat-abi=hard") .flag("+mfpu=neon-vfpv4")); + Multilibs.push_back(Multilib("nanlegacy", {}, {}, 1) + .flag("+mnan=legacy")); + if (Multilibs.select(Flags, Result.SelectedMultilib)) { Result.Multilibs = Multilibs; return true; @@ -66,6 +69,7 @@ static bool findOHOSMultilibs(const Driver &D, StringRef Path, const ArgList &Args, DetectedMultilibs &Result) { Multilib::flags_list Flags; + bool IsA7 = false; if (const Arg *A = Args.getLastArg(options::OPT_mcpu_EQ)) IsA7 = A->getValue() == StringRef("cortex-a7"); @@ -84,6 +88,11 @@ static bool findOHOSMultilibs(const Driver &D, addMultilibFlag((ARMFloatABI == tools::arm::FloatABI::Hard), "mfloat-abi=hard", Flags); + bool IsLegacy = false; + if (const Arg *A = Args.getLastArg(options::OPT_mnan_EQ)) + IsLegacy = A->getValue() != StringRef("2008"); + addMultilibFlag(IsLegacy, "mnan=legacy", Flags); + return findOHOSMuslMultilibs(Flags, Result); } diff --git a/llvm-build/build.py b/llvm-build/build.py index 9df15f4f4921..7b12d3519365 100755 --- a/llvm-build/build.py +++ b/llvm-build/build.py @@ -880,7 +880,8 @@ class LlvmLibs(BuildUtils): '-march=armv7-a -mcpu=cortex-a7 -mfloat-abi=hard -mfpu=neon-vfpv4', 'a7_hard_neon-vfpv4'), ('aarch64', self.open_ohos_triple('aarch64'), '', ''), ('riscv64', self.open_ohos_triple('riscv64'), '', ''), - ('mipsel', self.open_ohos_triple('mipsel'), '-march=mips32r2', ''), + ('mipsel', self.open_ohos_triple('mipsel'), '', ''), + ('mipsel', self.open_ohos_triple('mipsel'), '-mnan=legacy', 'nanlegacy'), ('x86_64', self.open_ohos_triple('x86_64'), '', ''),] cc = os.path.join(llvm_install, 'bin', 'clang') @@ -1151,7 +1152,7 @@ class LlvmLibs(BuildUtils): libcxx_defines['LIBCXX_CXX_ABI_INCLUDE_PATHS'] = os.path.abspath( os.path.join(self.build_config.LLVM_PROJECT_DIR, 'libcxxabi', 'include')) str_cpp = 'c++' - libcxx_defines['LIBCXX_CXX_ABI_LIBRARY_PATH'] = os.path.join(llvm_install, 'lib', llvm_triple, str_cpp) + libcxx_defines['LIBCXX_CXX_ABI_LIBRARY_PATH'] = os.path.join(llvm_install, 'lib', llvm_triple, str_cpp, multilib_suffix) libcxx_defines['LIBCXX_USE_COMPILER_RT'] = 'ON' libcxx_defines['LIBCXX_HAS_PTHREAD_LIB'] = 'OFF' libcxx_defines['LIBCXX_HAS_RT_LIB'] = 'OFF' diff --git a/llvm-build/build_musl.sh b/llvm-build/build_musl.sh index d6c3a0add8d5..123da9a1eec6 100755 --- a/llvm-build/build_musl.sh +++ b/llvm-build/build_musl.sh @@ -80,7 +80,7 @@ elif [ $TARGET_TRIPLE == "arm-linux-ohos" ]; then elif [ $TARGET_TRIPLE == "mipsel-linux-ohos" ]; then TARGET_USER="linux_user" TARGETS_PREFIX="mips" - CFLAGS_FOR_TARGET=("-march=mips32r2") + CFLAGS_FOR_TARGET=(" " "-mnan=legacy") elif [ $TARGET_TRIPLE == "riscv64-linux-ohos" ]; then TARGET_USER="linux_user" TARGETS_PREFIX="riscv64" @@ -107,7 +107,7 @@ make musl_header_install_for_${TARGET_USER} CLANG="${CLANG_BIN_ROOT}/clang" TOPD # build musl_libs if ((make_libs == 1)); then if [ $TARGET_TRIPLE == "aarch64-linux-ohos" ] || [ $TARGET_TRIPLE == "riscv64-linux-ohos" ] || \ - [ $TARGET_TRIPLE == "mipsel-linux-ohos" ] || [ $TARGET_TRIPLE == "x86_64-linux-ohos" ]; then + [ $TARGET_TRIPLE == "x86_64-linux-ohos" ]; then make CLANG="${CLANG_BIN_ROOT}/clang" TOPDIR=${TOPDIR} SYSROOTDIR=${OUT}/sysroot TARGETS=${TARGET_USER}\ TARGET=${TARGET_TRIPLE} ARCH=${TARGETS_PREFIX} -f Makefile else -- Gitee