Merge pull request #970 from abrodkin/topic-uclibc-multilib

Add support and sample for uclibc multilib toolchain for ARC
This commit is contained in:
Alexey Neyman 2018-05-21 08:49:42 -07:00 committed by GitHub
commit ab3c204aee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 82 additions and 6 deletions

View File

@ -0,0 +1,76 @@
From 0eacfbcb2bf1834294f468a2bb41fe5d5e8d3883 Mon Sep 17 00:00:00 2001
From: claziss <claziss@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 21 May 2018 09:56:57 +0000
Subject: [PATCH] [ARC] Add multilib support for linux targets
We used to build baremetal (AKA Elf32) multilibbed toolchains for years
now but never made that for Linux targets since there were problems with
uClibc n multilib setup. Now with help of Crosstool-NG it is finally
possible to create uClibc-based multilibbed toolchains and so we add
relevant CPUs for multilib in case of configuration for "arc*-*-linux*".
This will be essentially useful for glibc-based multilibbbed toolchains
in the future.
gcc/
2018-05-16 Alexey Brodkin <abrodkin@synopsys.com>
* config.gcc: Add arc/t-multilib-linux to tmake_file for
arc*-*-linux*.
* config/arc/t-multilib-linux: Specify MULTILIB_OPTIONS and
MULTILIB_DIRNAMES
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@260434 138bc75d-0d04-0410-961f-82ee72b054a4
---
gcc/config.gcc | 2 +-
gcc/config/arc/t-multilib-linux | 25 +++++++++++++++++++++++++
2 files changed, 26 insertions(+), 1 deletion(-)
create mode 100644 gcc/config/arc/t-multilib-linux
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 96ae6a88a0db..d73e2cbc99a1 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1061,7 +1061,7 @@ arc*-*-elf*)
;;
arc*-*-linux*)
tm_file="arc/arc-arch.h dbxelf.h elfos.h gnu-user.h linux.h linux-android.h glibc-stdint.h arc/linux.h ${tm_file}"
- tmake_file="${tmake_file} arc/t-arc"
+ tmake_file="${tmake_file} arc/t-multilib-linux arc/t-arc"
extra_gcc_objs="driver-arc.o"
if test "x$with_cpu" != x; then
tm_defines="${tm_defines} TARGET_CPU_BUILD=PROCESSOR_$with_cpu"
diff --git a/gcc/config/arc/t-multilib-linux b/gcc/config/arc/t-multilib-linux
new file mode 100644
index 000000000000..f357cfc3f926
--- /dev/null
+++ b/gcc/config/arc/t-multilib-linux
@@ -0,0 +1,25 @@
+# Copyright (C) 2018 Free Software Foundation, Inc.
+#
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any later
+# version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+MULTILIB_OPTIONS = mcpu=hs/mcpu=archs/mcpu=hs38/mcpu=hs38_linux/mcpu=arc700/mcpu=nps400
+
+MULTILIB_DIRNAMES = hs archs hs38 hs38_linux arc700 nps400
+
+# Aliases:
+MULTILIB_MATCHES += mcpu?arc700=mA7
+MULTILIB_MATCHES += mcpu?arc700=mARC700
--
2.17.0

View File

@ -1,6 +1,6 @@
CT_ARCH_ARC=y
CT_TARGET_ALIAS="arc-linux"
CT_TARGET_CFLAGS="-matomic"
CT_TARGET_CFLAGS="-mno-atomic"
CT_TARGET_VENDOR="snps"
CT_KERNEL_LINUX=y
CT_LIBC_UCLIBC=y

View File

@ -1,3 +1,3 @@
reporter_name="Alexey Brodkin"
reporter_url="http://embarc.org"
reporter_comment="ARCompact default Linux toolchain"
reporter_comment="ARCompact uClibc Linux toolchain without atomics"

View File

@ -1,7 +1,7 @@
CT_ARCH_ARC=y
CT_TARGET_ALIAS="arc-linux"
CT_TARGET_CFLAGS="-matomic"
CT_TARGET_VENDOR="snps"
CT_TARGET_VENDOR="multilib"
CT_KERNEL_LINUX=y
CT_LIBC_UCLIBC=y
CT_ARCH_CPU="hs38"
CT_MULTILIB=y

View File

@ -1,3 +1,3 @@
reporter_name="Alexey Brodkin"
reporter_url="http://embarc.org"
reporter_comment="ARCv2 default Linux toolchain"
reporter_comment="ARC multilib uClibc Linux toolchain"

View File

@ -22,7 +22,7 @@ CT_DoArchUClibcCflags() {
local cflags="${2}"
local f
CT_KconfigDeleteOption "CONFIG_ARC_HAS_ATOMICS" "${cfg}"
CT_KconfigDisableOption "CONFIG_ARC_HAS_ATOMICS" "${cfg}"
for f in ${cflags}; do
case "${f}" in