# Please read ada-changes-in-autogen-output.diff about src/Makefile.def. # !!! Must be applied after ada-libgnat_util.diff --- /dev/null +++ b/src/libada-sjlj/Makefile.in @@ -0,0 +1,204 @@ +# Makefile for libada. +# Copyright (C) 2003-2017 Free Software Foundation, Inc. +# +# This file 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 of the License, or +# (at your option) any later version. +# +# This program 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 this program; see the file COPYING3. If not see +# . + +# Default target; must be first. +all: gnatlib + $(MULTIDO) $(AM_MAKEFLAGS) DO=all multi-do # $(MAKE) + +.PHONY: all + +## Multilib support variables. +MULTISRCTOP = +MULTIBUILDTOP = +MULTIDIRS = +MULTISUBDIR = +MULTIDO = true +MULTICLEAN = true + +# Standard autoconf-set variables. +SHELL = @SHELL@ +srcdir = @srcdir@ +libdir = @libdir@ +build = @build@ +target = @target@ +prefix = @prefix@ + +# Nonstandard autoconf-set variables. +enable_shared = @enable_shared@ + +LN_S=@LN_S@ +AWK=@AWK@ + +ifeq (cp -p,$(LN_S)) +LN_S_RECURSIVE = cp -pR +else +LN_S_RECURSIVE = $(LN_S) +endif + +# Variables for the user (or the top level) to override. +objext=.o +THREAD_KIND=native +TRACE=no +LDFLAGS= + +# The tedious process of getting CFLAGS right. +CFLAGS=-g +PICFLAG = @PICFLAG@ +GNATLIBFLAGS= -W -Wall -gnatpg -nostdinc +GNATLIBCFLAGS= -g -O2 +GNATLIBCFLAGS_FOR_C = -W -Wall $(GNATLIBCFLAGS) $(CFLAGS_FOR_TARGET) \ + -fexceptions -DIN_RTS @have_getipinfo@ @have_capability@ + +host_subdir = @host_subdir@ +GCC_DIR=$(MULTIBUILDTOP)../../$(host_subdir)/gcc + +target_noncanonical:=@target_noncanonical@ +version := $(shell @get_gcc_base_ver@ $(srcdir)/../gcc/BASE-VER) +libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR) +ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR)) +ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR)) + +# exeext should not be used because it's the *host* exeext. We're building +# a *target* library, aren't we?!? Likewise for CC. Still, provide bogus +# definitions just in case something slips through the safety net provided +# by recursive make invocations in gcc/ada/Makefile.in +LIBADA_FLAGS_TO_PASS = \ + "MAKEOVERRIDES=" \ + "LDFLAGS=$(LDFLAGS) -Wl,--no-allow-shlib-undefined \ + -Wl,--no-copy-dt-needed-entries -Wl,--no-undefined" \ + "LN_S=$(LN_S)" \ + "SHELL=$(SHELL)" \ + "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS) -gnatn" \ + "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \ + "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \ + "PICFLAG_FOR_TARGET=$(PICFLAG)" \ + "THREAD_KIND=$(THREAD_KIND)" \ + "TRACE=$(TRACE)" \ + "MULTISUBDIR=$(MULTISUBDIR)" \ + "libsubdir=$(libsubdir)" \ + "objext=$(objext)" \ + "prefix=$(prefix)" \ + "exeext=.exeext.should.not.be.used " \ + 'CC=the.host.compiler.should.not.be.needed' \ + "GCC_FOR_TARGET=$(CC)" \ + "CFLAGS=$(CFLAGS)" \ + "RTSDIR=rts-sjlj" + +# Rules to build gnatlib. +.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool +gnatlib: gnatlib-sjlj + +gnatlib-plain: osconstool $(GCC_DIR)/ada/Makefile + test -f stamp-libada || \ + $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) gnatlib \ + && touch stamp-libada + -rm -rf adainclude + -rm -rf adalib + $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adainclude + $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adalib + +gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile + test -f stamp-libada || \ + $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \ + && touch stamp-libada-sjlj + -rm -rf adainclude + -rm -rf adalib + $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adainclude + $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adalib + +osconstool: + $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons + +install-gnatlib: $(GCC_DIR)/ada/Makefile + $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) install-gnatlib-sjlj + +# Check uninstalled version. +check: + +# Check installed version. +installcheck: + +# Build info (none here). +info: + +# Build DVI (none here). +dvi: + +# Build PDF (none here). +pdf: + +# Build html (none here). +html: + +# Build TAGS (none here). +TAGS: + +.PHONY: check installcheck info dvi pdf html + +# Installation rules. +install: install-gnatlib + $(MULTIDO) $(AM_MAKEFLAGS) DO=install multi-do # $(MAKE) + +install-strip: install + +install-info: + +install-pdf: + +install-html: + +.PHONY: install install-strip install-info install-pdf install-html + +# Cleaning rules. +mostlyclean: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=mostlyclean multi-clean # $(MAKE) + +clean: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=clean multi-clean # $(MAKE) + +distclean: + $(MULTICLEAN) $(AM_MAKEFLAGS) DO=distclean multi-clean # $(MAKE) + $(RM) Makefile config.status config.log + +maintainer-clean: + +.PHONY: mostlyclean clean distclean maintainer-clean + +# Rules for rebuilding this Makefile. +Makefile: $(srcdir)/Makefile.in config.status + CONFIG_FILES=$@ ; \ + CONFIG_HEADERS= ; \ + $(SHELL) ./config.status + +config.status: $(srcdir)/configure + $(SHELL) ./config.status --recheck + +AUTOCONF = autoconf +configure_deps = \ + $(srcdir)/configure.ac \ + $(srcdir)/../config/acx.m4 \ + $(srcdir)/../config/multi.m4 \ + $(srcdir)/../config/override.m4 \ + $(srcdir)/../config/picflag.m4 \ + $(srcdir)/../config/unwind_ipinfo.m4 + +$(srcdir)/configure: @MAINT@ $(configure_deps) + cd $(srcdir) && $(AUTOCONF) + +# Don't export variables to the environment, in order to not confuse +# configure. +.NOEXPORT: --- /dev/null +++ b/src/libada-sjlj/configure.ac @@ -0,0 +1,156 @@ +# Configure script for libada. +# Copyright (C) 2003-2017 Free Software Foundation, Inc. +# +# This file 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 of the License, or +# (at your option) any later version. +# +# This program 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 this program; see the file COPYING3. If not see +# . + +sinclude(../config/acx.m4) +sinclude(../config/multi.m4) +sinclude(../config/override.m4) +sinclude(../config/picflag.m4) +sinclude(../config/unwind_ipinfo.m4) + +AC_INIT +AC_PREREQ([2.64]) + +AC_CONFIG_SRCDIR([Makefile.in]) + +# Determine the host, build, and target systems +AC_CANONICAL_BUILD +AC_CANONICAL_HOST +AC_CANONICAL_TARGET +target_alias=${target_alias-$host_alias} + +# Determine the noncanonical target name, for directory use. +ACX_NONCANONICAL_TARGET + +# Determine the target- and build-specific subdirectories +GCC_TOPLEV_SUBDIRS + +# Command-line options. +# Very limited version of AC_MAINTAINER_MODE. +AC_ARG_ENABLE([maintainer-mode], + [AC_HELP_STRING([--enable-maintainer-mode], + [enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer])], + [case ${enable_maintainer_mode} in + yes) MAINT='' ;; + no) MAINT='#' ;; + *) AC_MSG_ERROR([--enable-maintainer-mode must be yes or no]) ;; + esac + maintainer_mode=${enableval}], + [MAINT='#']) +AC_SUBST([MAINT])dnl + +AM_ENABLE_MULTILIB(, ..) +# Calculate toolexeclibdir +# Also toolexecdir, though it's only used in toolexeclibdir +case ${enable_version_specific_runtime_libs} in + yes) + # Need the gcc compiler version to know where to install libraries + # and header files if --enable-version-specific-runtime-libs option + # is selected. + toolexecdir='$(libdir)/gcc/$(target_alias)' + toolexeclibdir='$(toolexecdir)/$(gcc_version)$(MULTISUBDIR)' + ;; + no) + if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + # Install a library built with a cross compiler in tooldir, not libdir. + toolexecdir='$(exec_prefix)/$(target_alias)' + toolexeclibdir='$(toolexecdir)/lib' + else + toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + toolexeclibdir='$(libdir)' + fi + multi_os_directory=`$CC -print-multi-os-directory` + case $multi_os_directory in + .) ;; # Avoid trailing /. + *) toolexeclibdir=$toolexeclibdir/$multi_os_directory ;; + esac + ;; +esac +AC_SUBST(toolexecdir) +AC_SUBST(toolexeclibdir) +#TODO: toolexeclibdir is currently disregarded + +# Check the compiler. +# The same as in boehm-gc and libstdc++. Have to borrow it from there. +# We must force CC to /not/ be precious variables; otherwise +# the wrong, non-multilib-adjusted value will be used in multilibs. +# As a side effect, we have to subst CFLAGS ourselves. + +m4_rename([_AC_ARG_VAR_PRECIOUS],[real_PRECIOUS]) +m4_define([_AC_ARG_VAR_PRECIOUS],[]) +AC_PROG_CC +m4_rename_force([real_PRECIOUS],[_AC_ARG_VAR_PRECIOUS]) + +AC_SUBST(CFLAGS) + +AC_ARG_ENABLE([shared], +[AC_HELP_STRING([--disable-shared], + [don't provide a shared libgnat])], +[ +case $enable_shared in + yes | no) ;; + *) + enable_shared=no + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + case $pkg in + ada | libada) + enable_shared=yes ;; + esac + done + IFS="$ac_save_ifs" + ;; +esac +], [enable_shared=yes]) +AC_SUBST([enable_shared]) + +GCC_PICFLAG +AC_SUBST([PICFLAG]) + +# These must be passed down, or are needed by gcc/libgcc.mvars +AC_PROG_AWK +AC_PROG_LN_S + +# Determine what to build for 'gnatlib' +if test ${enable_shared} = yes; then + default_gnatlib_target="gnatlib-shared" +else + default_gnatlib_target="gnatlib-plain" +fi +AC_SUBST([default_gnatlib_target]) + +# Check for _Unwind_GetIPInfo +GCC_CHECK_UNWIND_GETIPINFO +if test x$have_unwind_getipinfo = xyes; then + have_getipinfo=-DHAVE_GETIPINFO +else + have_getipinfo= +fi +AC_SUBST([have_getipinfo]) + +# Check for +AC_CHECK_HEADER([sys/capability.h], have_capability=-DHAVE_CAPABILITY, have_capability=) +AC_SUBST([have_capability]) + +# Determine what GCC version number to use in filesystem paths. +GCC_BASE_VER + +# Output: create a Makefile. +AC_CONFIG_FILES([Makefile]) + +AC_OUTPUT --- a/src/Makefile.def +++ b/src/Makefile.def @@ -194,6 +194,7 @@ target_modules = { module= libgnatvsn; n missing= TAGS; missing= install-info; missing= installcheck; }; +target_modules = { module= libada-sjlj; }; target_modules = { module= libgomp; bootstrap= true; lib_path=.libs; }; target_modules = { module= libitm; lib_path=.libs; }; target_modules = { module= libatomic; lib_path=.libs; }; @@ -394,6 +395,7 @@ dependencies = { module=all-libcpp; on=a dependencies = { module=all-fixincludes; on=all-libiberty; }; dependencies = { module=all-target-libada; on=all-gcc; }; +dependencies = { module=all-target-libada-sjlj; on=all-target-libada; }; dependencies = { module=all-gnattools; on=all-target-libada; }; dependencies = { module=all-gnattools; on=all-target-libstdc++-v3; }; dependencies = { module=all-gnattools; on=all-target-libgnat_util; }; --- a/src/configure.ac +++ b/src/configure.ac @@ -167,6 +167,7 @@ target_libraries="target-libgcc \ target-libffi \ target-libobjc \ target-libada \ + target-libada-sjlj \ ${target_libiberty} \ target-libgnat_util \ target-libgo \ @@ -454,7 +455,7 @@ AC_ARG_ENABLE(libada, ENABLE_LIBADA=$enableval, ENABLE_LIBADA=yes) if test "${ENABLE_LIBADA}" != "yes" ; then - noconfigdirs="$noconfigdirs target-libgnat_util gnattools" + noconfigdirs="$noconfigdirs target-libgnat_util gnattools target-libada-sjlj" fi AC_ARG_ENABLE(libssp, --- a/src/gcc/ada/gcc-interface/Makefile.in +++ b/src/gcc/ada/gcc-interface/Makefile.in @@ -193,7 +193,7 @@ GNAT_SRC=$(fsrcpfx)ada # Multilib handling MULTISUBDIR = -RTSDIR = rts$(subst /,_,$(MULTISUBDIR)) +RTSDIR := rts$(subst /,_,$(MULTISUBDIR)) # Link flags used to build gnat tools. By default we prefer to statically # link with libgcc to avoid a dependency on shared libgcc (which is tricky @@ -561,6 +561,26 @@ install-gnatlib: ../stamp-gnatlib-$(RTSD cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.adb cd $(DESTDIR)$(ADA_INCLUDE_DIR); $(CHMOD) a-wx *.ads +install-gnatlib-sjlj: ../stamp-gnatlib-$(RTSDIR) +# Create the directory before deleting it, in case the directory is +# a list of directories (as it may be on VMS). This ensures we are +# deleting the right one. + -$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR_SJLJ) + -$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ) + $(RMDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR_SJLJ) + $(RMDIR) $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ) + -$(MKDIR) $(DESTDIR)$(ADA_RTL_OBJ_DIR_SJLJ) + -$(MKDIR) $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ) + for file in $(RTSDIR)/*.ali; do \ + $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_RTL_OBJ_DIR_SJLJ); \ + done + # This copy must be done preserving the date on the original file. + for file in $(RTSDIR)/*.ad?; do \ + $(INSTALL_DATA_DATE) $$file $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ); \ + done + cd $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ); $(CHMOD) a-wx *.adb + cd $(DESTDIR)$(ADA_INCLUDE_DIR_SJLJ); $(CHMOD) a-wx *.ads + ../stamp-gnatlib2-$(RTSDIR): $(RM) $(RTSDIR)/s-*.ali $(RM) $(RTSDIR)/s-*$(objext) @@ -826,6 +846,7 @@ gnatlib-shared: gnatlib-sjlj: $(MAKE) $(FLAGS_TO_PASS) \ EH_MECHANISM="" \ + RTSDIR="$(RTSDIR)" \ MULTISUBDIR="$(MULTISUBDIR)" \ THREAD_KIND="$(THREAD_KIND)" \ ../stamp-gnatlib1-$(RTSDIR) @@ -835,6 +856,7 @@ gnatlib-sjlj: $(RTSDIR)/system.ads > $(RTSDIR)/s.ads $(MV) $(RTSDIR)/s.ads $(RTSDIR)/system.ads $(MAKE) $(FLAGS_TO_PASS) \ + RTSDIR="$(RTSDIR)" \ EH_MECHANISM="" \ GNATLIBFLAGS="$(GNATLIBFLAGS)" \ GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \ @@ -889,6 +911,8 @@ b_gnatm.o : b_gnatm.adb ADA_INCLUDE_DIR = $(libsubdir)/adainclude ADA_RTL_OBJ_DIR = $(libsubdir)/adalib +ADA_INCLUDE_DIR_SJLJ = $(libsubdir)/rts-sjlj/adainclude +ADA_RTL_OBJ_DIR_SJLJ = $(libsubdir)/rts-sjlj/adalib # Special flags --- a/src/gcc/ada/gcc-interface/config-lang.in +++ b/src/gcc/ada/gcc-interface/config-lang.in @@ -43,8 +43,8 @@ if test "x$cross_compiling/$build/$host" lang_requires="c c++" fi -target_libs="target-libada target-libgnat_util" -lang_dirs="libada gnattools" +target_libs="target-libada target-libgnat_util target-libada-sjlj" +lang_dirs="libada gnattools libada-sjlj" # Ada is not enabled by default for the time being. build_by_default=no --- a/src/gcc/ada/gcc-interface/Make-lang.in +++ b/src/gcc/ada/gcc-interface/Make-lang.in @@ -837,6 +837,7 @@ ada.install-common: install-gnatlib: $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib$(LIBGNAT_TARGET) + $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) RTSDIR="rts-sjlj" install-gnatlib-sjlj$(LIBGNAT_TARGET) install-gnatlib-obj: $(MAKE) -C ada $(COMMON_FLAGS_TO_PASS) $(ADA_FLAGS_TO_PASS) install-gnatlib-obj