Re: [PATCH] LoongArch: Link c++ header directory in the default ABI to the toplevel.
On Wed, Sep 06, 2023 at 06:38:25PM +0800, Xi Ruoyao wrote: > On Wed, 2023-09-06 at 18:06 +0800, Yang Yujie wrote: > > When multilib is enabled, the c++ header directory of the default multilib > > variant needs to be linked to the toplevel since g++ does not search the > > toplevel in this case. > > > > libstdc++-v3/ChangeLog: > > > > * configure.host: Register t-loongarch in tmake_file. > > * config/cpu/loongarch/t-loongarch: New file. Link c++ header > > directory in the default ABI to the toplevel. > > --- > > libstdc++-v3/config/cpu/loongarch/t-loongarch | 12 > > libstdc++-v3/configure.host | 5 - > > 2 files changed, 16 insertions(+), 1 deletion(-) > > create mode 100644 libstdc++-v3/config/cpu/loongarch/t-loongarch > > > > diff --git a/libstdc++-v3/config/cpu/loongarch/t-loongarch > > b/libstdc++-v3/config/cpu/loongarch/t-loongarch > > new file mode 100644 > > index 000..942eddeb3be > > --- /dev/null > > +++ b/libstdc++-v3/config/cpu/loongarch/t-loongarch > > @@ -0,0 +1,12 @@ > > +LA_DEFAULT_MULTIDIR = $(shell $(CXX) --print-multi-directory) > > +TOPLEV_HEADERS = > > $(DESTDIR)${gxx_include_dir}/${host_alias}/$(LA_DEFAULT_MULTIDIR) > > + > > +.PHONY: install-toplevel-link > > +install: install-toplevel-link > > +install-toplevel-link: > > + if test x$(MULTIDO) != xtrue && \ > > + test x$(LA_DEFAULT_MULTIDIR) != x.; then \ > > + $(MKDIR_P) "$(dir $(TOPLEV_HEADERS))"; \ > > + rm -rf "$(TOPLEV_HEADERS)"; \ > > + $(LN_S) ../ "$(TOPLEV_HEADERS)"; \ > > From autoconf info page: > > -- Macro: AC_PROG_LN_S > If ‘ln -s’ works on the current file system (the operating system > and file system support symbolic links), set the output variable > ‘LN_S’ to ‘ln -s’; otherwise, if ‘ln’ works, set ‘LN_S’ to ‘ln’, > and otherwise set it to ‘cp -pR’. > > If you make a link in a directory other than the current directory, > its meaning depends on whether ‘ln’ or ‘ln -s’ is used. To safely > create links using ‘$(LN_S)’, either find out which form is used > and adjust the arguments, or always invoke ‘ln’ in the directory > where the link is to be created. > > In other words, it does not work to do: > $(LN_S) foo /x/bar > > Instead, do: > > (cd /x && $(LN_S) foo bar) > > But for this special case we cannot "cp -pR ../ $(TOPLEV_HEADERS)" > either: > > $ cp ../* -pR something > cp: cannot copy a directory, '../g', into itself, 'h/g' > > So I guess we'll need something like > > if ln -s ../ "$(TOPLEV_HEADERS)"; then > # OK! > true > else > # system does not support symlink :( > # install another copy of toplevel headers into default multilib subdir > TODO: > fi > > And all libstdc++ patches should Cc: libstd...@gcc.gnu.org. > > > + fi > > diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host > > index 9e7c7f02dfd..9dc42ad3edb 100644 > > --- a/libstdc++-v3/configure.host > > +++ b/libstdc++-v3/configure.host > > @@ -315,7 +315,10 @@ esac > > # Set any OS-dependent and CPU-dependent bits. > > # THIS TABLE IS SORTED. KEEP IT THAT WAY. > > case "${host}" in > > - *-*-linux* | *-*-uclinux*) > > + loongarch*) > > + tmake_file="cpu/loongarch/t-loongarch" > > + ;; > > + *-*-linux* | *-*-uclinux*) > > case "${host_cpu}" in > > i[567]86) > > abi_baseline_pair=i486-linux-gnu > > -- > Xi Ruoyao > School of Aerospace Science and Technology, Xidian University Thanks for the review! After some tweaking, it appeared that we can simply override ${multisubdir} in configure.host and achieve the same. I will upload another patch soon. Yujie
Re: [PATCH] LoongArch: Link c++ header directory in the default ABI to the toplevel.
On Wed, 2023-09-06 at 18:06 +0800, Yang Yujie wrote: > When multilib is enabled, the c++ header directory of the default multilib > variant needs to be linked to the toplevel since g++ does not search the > toplevel in this case. > > libstdc++-v3/ChangeLog: > > * configure.host: Register t-loongarch in tmake_file. > * config/cpu/loongarch/t-loongarch: New file. Link c++ header > directory in the default ABI to the toplevel. > --- > libstdc++-v3/config/cpu/loongarch/t-loongarch | 12 > libstdc++-v3/configure.host | 5 - > 2 files changed, 16 insertions(+), 1 deletion(-) > create mode 100644 libstdc++-v3/config/cpu/loongarch/t-loongarch > > diff --git a/libstdc++-v3/config/cpu/loongarch/t-loongarch > b/libstdc++-v3/config/cpu/loongarch/t-loongarch > new file mode 100644 > index 000..942eddeb3be > --- /dev/null > +++ b/libstdc++-v3/config/cpu/loongarch/t-loongarch > @@ -0,0 +1,12 @@ > +LA_DEFAULT_MULTIDIR = $(shell $(CXX) --print-multi-directory) > +TOPLEV_HEADERS = > $(DESTDIR)${gxx_include_dir}/${host_alias}/$(LA_DEFAULT_MULTIDIR) > + > +.PHONY: install-toplevel-link > +install: install-toplevel-link > +install-toplevel-link: > + if test x$(MULTIDO) != xtrue && \ > + test x$(LA_DEFAULT_MULTIDIR) != x.; then \ > + $(MKDIR_P) "$(dir $(TOPLEV_HEADERS))"; \ > + rm -rf "$(TOPLEV_HEADERS)"; \ > + $(LN_S) ../ "$(TOPLEV_HEADERS)"; \ >From autoconf info page: -- Macro: AC_PROG_LN_S If ‘ln -s’ works on the current file system (the operating system and file system support symbolic links), set the output variable ‘LN_S’ to ‘ln -s’; otherwise, if ‘ln’ works, set ‘LN_S’ to ‘ln’, and otherwise set it to ‘cp -pR’. If you make a link in a directory other than the current directory, its meaning depends on whether ‘ln’ or ‘ln -s’ is used. To safely create links using ‘$(LN_S)’, either find out which form is used and adjust the arguments, or always invoke ‘ln’ in the directory where the link is to be created. In other words, it does not work to do: $(LN_S) foo /x/bar Instead, do: (cd /x && $(LN_S) foo bar) But for this special case we cannot "cp -pR ../ $(TOPLEV_HEADERS)" either: $ cp ../* -pR something cp: cannot copy a directory, '../g', into itself, 'h/g' So I guess we'll need something like if ln -s ../ "$(TOPLEV_HEADERS)"; then # OK! true else # system does not support symlink :( # install another copy of toplevel headers into default multilib subdir TODO: fi And all libstdc++ patches should Cc: libstd...@gcc.gnu.org. > + fi > diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host > index 9e7c7f02dfd..9dc42ad3edb 100644 > --- a/libstdc++-v3/configure.host > +++ b/libstdc++-v3/configure.host > @@ -315,7 +315,10 @@ esac > # Set any OS-dependent and CPU-dependent bits. > # THIS TABLE IS SORTED. KEEP IT THAT WAY. > case "${host}" in > - *-*-linux* | *-*-uclinux*) > + loongarch*) > + tmake_file="cpu/loongarch/t-loongarch" > + ;; > + *-*-linux* | *-*-uclinux*) > case "${host_cpu}" in > i[567]86) > abi_baseline_pair=i486-linux-gnu -- Xi Ruoyao School of Aerospace Science and Technology, Xidian University
[PATCH] LoongArch: Link c++ header directory in the default ABI to the toplevel.
When multilib is enabled, the c++ header directory of the default multilib variant needs to be linked to the toplevel since g++ does not search the toplevel in this case. libstdc++-v3/ChangeLog: * configure.host: Register t-loongarch in tmake_file. * config/cpu/loongarch/t-loongarch: New file. Link c++ header directory in the default ABI to the toplevel. --- libstdc++-v3/config/cpu/loongarch/t-loongarch | 12 libstdc++-v3/configure.host | 5 - 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/config/cpu/loongarch/t-loongarch diff --git a/libstdc++-v3/config/cpu/loongarch/t-loongarch b/libstdc++-v3/config/cpu/loongarch/t-loongarch new file mode 100644 index 000..942eddeb3be --- /dev/null +++ b/libstdc++-v3/config/cpu/loongarch/t-loongarch @@ -0,0 +1,12 @@ +LA_DEFAULT_MULTIDIR = $(shell $(CXX) --print-multi-directory) +TOPLEV_HEADERS = $(DESTDIR)${gxx_include_dir}/${host_alias}/$(LA_DEFAULT_MULTIDIR) + +.PHONY: install-toplevel-link +install: install-toplevel-link +install-toplevel-link: + if test x$(MULTIDO) != xtrue && \ + test x$(LA_DEFAULT_MULTIDIR) != x.; then \ + $(MKDIR_P) "$(dir $(TOPLEV_HEADERS))"; \ + rm -rf "$(TOPLEV_HEADERS)"; \ + $(LN_S) ../ "$(TOPLEV_HEADERS)"; \ + fi diff --git a/libstdc++-v3/configure.host b/libstdc++-v3/configure.host index 9e7c7f02dfd..9dc42ad3edb 100644 --- a/libstdc++-v3/configure.host +++ b/libstdc++-v3/configure.host @@ -315,7 +315,10 @@ esac # Set any OS-dependent and CPU-dependent bits. # THIS TABLE IS SORTED. KEEP IT THAT WAY. case "${host}" in - *-*-linux* | *-*-uclinux*) + loongarch*) +tmake_file="cpu/loongarch/t-loongarch" +;; + *-*-linux* | *-*-uclinux*) case "${host_cpu}" in i[567]86) abi_baseline_pair=i486-linux-gnu -- 2.36.0