> Hi there,
> 
> > 
> > Simply submit the patches to this mailing list.  Please, put
> > the patches in the body (no attachement), so that it is easier
> > to comment them.
> > 
> 
> I'll take this as an invitation to post the current patch (against
> changeset 330) for the recently discussed cross compilation support
> for mingw32msvc.

Fine.  What is the difference between mingw32 and mingw32msvc ?

> Relevant changes:
> - Added --AS and --LD options to ghdl1 for explicit asm/linker
> specification

Why not, but I think there should be default for AS and GCC in
default_pathes.ads

I think you should use --LINKER instead of --LD, as the program
spawned is not ld but gcc.


> - *_FOR_TARGET defines introduced

Yes.

> Compiling the cross ghdl for mingw32-mvsc can be a bit of a bitch
> (depending on preinstalled support) and isn't fully automated yet, so
> for now it will remain a rather undocumented multi stage procedure.
> 
> Cheers,
> 
> - Martin
> 
> 
> --
> 
> diff -r 6de9ed66d019 ortho/gcc/Makefile.inc
> --- a/ortho/gcc/Makefile.inc  Sat Feb 01 04:43:41 2014 +0100
> +++ b/ortho/gcc/Makefile.inc  Sun Feb 02 16:56:41 2014 +0100
> @@ -31,16 +31,16 @@
> 
>  AGCC_DEPS := $(AGCC_LOCAL_OBJS)
>  AGCC_OBJS := $(AGCC_LOCAL_OBJS) \
> -     $(AGCC_GCCOBJ_DIR)gcc/toplev.o \
> -     $(AGCC_GCCOBJ_DIR)gcc/vec.o \
> -     $(AGCC_GCCOBJ_DIR)gcc/attribs.o \
> -     $(AGCC_GCCOBJ_DIR)gcc/libbackend.a \
> -     $(AGCC_GCCOBJ_DIR)libcpp/libcpp.a \
> -     $(AGCC_GCCOBJ_DIR)libiberty/libiberty.a
> +     $(AGCC_GCCOBJ_DIR)/gcc/toplev.o \
> +     $(AGCC_GCCOBJ_DIR)/gcc/vec.o \
> +     $(AGCC_GCCOBJ_DIR)/gcc/attribs.o \
> +     $(AGCC_GCCOBJ_DIR)/gcc/libbackend.a \
> +     $(AGCC_GCCOBJ_DIR)/libcpp/libcpp.a \
> +     $(AGCC_GCCOBJ_DIR)/libiberty/libiberty.a
> 
>  ortho-lang.o: $(agcc_srcdir)/ortho-lang.c \
> - $(AGCC_GCCOBJ_DIR)gcc/gtype-vhdl.h \
> - $(AGCC_GCCOBJ_DIR)gcc/gt-vhdl-ortho-lang.h
> + $(AGCC_GCCOBJ_DIR)/gcc/gtype-vhdl.h \
> + $(AGCC_GCCOBJ_DIR)/gcc/gt-vhdl-ortho-lang.h
>       $(COMPILER) -c -o $@ $< $(AGCC_CFLAGS) $(INCLUDES)

Unrelated, but why not.


>  agcc-clean: force
> diff -r 6de9ed66d019 translate/gcc/Make-lang.in
> --- a/translate/gcc/Make-lang.in      Sat Feb 01 04:43:41 2014 +0100
> +++ b/translate/gcc/Make-lang.in      Sun Feb 02 16:56:41 2014 +0100
> @@ -48,6 +48,10 @@
>       "GHDL_ADAFLAGS=$(GHDL_ADAFLAGS)" \
>       "GNATMAKE=$(GNATMAKE)" \
>       "GNATBIND=$(GNATBIND)" \
> +     "GNATMAKE_FOR_TARGET=$(GNATMAKE_FOR_TARGET)" \
> +     "GNATBIND_FOR_TARGET=$(GNATBIND_FOR_TARGET)" \
> +     "ADAC=$(TARGET_CC)" \
> +     "GRT_TARGET_CC=$(TARGET_CC)" \

Is TARGET_CC correct ? Shouldn't that be named GCC_FOR_TARGET ?

>       "CFLAGS=$(CFLAGS)" \
>       "VHDL_LIB_DIR=$(VHDL_LIB_DIR)" \
>       "INSTALL_DATA=$(INSTALL_DATA)" \
> @@ -95,8 +99,6 @@
>  vhdl.all.build:
> 
>  vhdl.all.cross:
> -     @echo "No support for building vhdl cross-compiler"
> -     exit 1
> 
>  vhdl.start.encap:
>  vhdl.rest.encap:
> @@ -124,11 +126,23 @@
> 
>  vhdl.install-plugin:
> 
> -# Install the driver program as ghdl.
> +GHDL_INSTALL_NAME = $(shell echo ghdl$(exeext) | \
> +     sed '$(program_transform_name)')
> +

Ok.

> +GNATMAKE_FOR_TARGET = $(shell echo gnatmake | \
> +     sed '$(program_transform_name)')
> +
> +GNATBIND_FOR_TARGET = $(shell echo gnatbind | \
> +     sed '$(program_transform_name)')

I think this is not correct.  program_transform_name is independent
from cross configuration.  OTOH, I don't know the correct notation.

Maybe replace gcc by gnatmake in GCC_FOR_TARGET (although might be
a problem with other compilers)

> +TARGET_CC = $(shell echo gcc | \
> +     sed '$(program_transform_name)')
> +
> +# Install the driver program as ghdl or $(CROSS)-ghdl.
>  vhdl.install-common: ghdl$(exeext)
>       -mkdir $(DESTDIR)$(bindir)
>       -$(RM) $(DESTDIR)$(bindir)/ghdl$(exeext)
> -     $(INSTALL_PROGRAM) ghdl$(exeext) $(DESTDIR)$(bindir)/ghdl$(exeext)
> +     $(INSTALL_PROGRAM) ghdl$(exeext)
> $(DESTDIR)$(bindir)/$(GHDL_INSTALL_NAME)
>  # Install the library
>       $(MAKE_IN_VHDL) install-ghdllib
> 
> diff -r 6de9ed66d019 translate/gcc/Makefile.in
> --- a/translate/gcc/Makefile.in       Sat Feb 01 04:43:41 2014 +0100
> +++ b/translate/gcc/Makefile.in       Sun Feb 02 16:56:41 2014 +0100
> @@ -80,7 +80,7 @@
>  X_ADAFLAGS =
>  T_ADAFLAGS =
> 
> -ADAC = $(CC)
> +ADAC ?= $(CC)
> 
>  ECHO = echo
>  CHMOD = chmod
> @@ -122,8 +122,8 @@
>  # We don't use cross-make.  Instead we use the tools from the build
>  tree,
>  # if they are available.
>  # program_transform_name and objdir are set by configure.in.
> -program_transform_name =
> -objdir = .
> +# program_transform_name =
> +# objdir = .
> 
>  target=@target@
>  target_alias=@target_alias@
> @@ -197,7 +197,8 @@
>  LIB93_DIR:=./lib/v93
>  LIB87_DIR:=./lib/v87
>  LIBSRC_DIR:=$(srcdir)/libraries
> -ANALYZE=../ghdl -a --GHDL1=../ghdl1 --ieee=none
> +ANALYZE=../ghdl -a --GHDL1=../ghdl1 --ieee=none \
> +      --AS=$(AS_FOR_TARGET) --LD=$(LD_FOR_TARGET)

That shouldn't be necessary.

>  $(LIB93_DIR) $(LIB87_DIR):
>       $(srcdir)/../../mkinstalldirs $@
> @@ -223,7 +224,7 @@
> 
>  GHDL1=../ghdl1
>  GRTSRCDIR=$(srcdir)/grt
> -GRT_RANLIB=$(RANLIB)
> +GRT_RANLIB=$(RANLIB_FOR_TARGET)

Ok.

> 
>  ####grt Makefile.inc
> 
> @@ -269,7 +270,8 @@
>       PDIR=`pwd` && cd $(DESTDIR)$(VHDL_LIB_DIR) && \
>       $(MAKE) -f $$PDIR/Makefile REL_DIR=../../.. \
>        LIBSRC_DIR="src" LIB93_DIR=lib/v93 LIB87_DIR=lib/v87 \
> -      ANALYZE="$$PDIR/../ghdl -a --GHDL1=$$PDIR/../ghdl1 --ieee=none" \
> +      ANALYZE="$$PDIR/../ghdl -a --GHDL1=$$PDIR/../ghdl1 --ieee=none \
> +      --AS=$(AS_FOR_TARGET) --LD=$(LD_FOR_TARGET) -O" \

Idem.


>        std.v93 std.v87 ieee.v93 ieee.v87 synopsys.v93 synopsys.v87
>        mentor.v93
>  # Copy std_standard (this is done after libraries, since they remove
>  dirs).
>       $(INSTALL_DATA) std87_standard.o \
> diff -r 6de9ed66d019 translate/ghdldrv/ghdldrv.adb
> --- a/translate/ghdldrv/ghdldrv.adb   Sat Feb 01 04:43:41 2014 +0100
> +++ b/translate/ghdldrv/ghdldrv.adb   Sun Feb 02 16:56:41 2014 +0100
> @@ -40,11 +40,13 @@
> 
>  package body Ghdldrv is
>     --  Name of the tools used.
> +   Assembler_Cmd : String_Access := null;
> +   Linker_Cmd : String_Access := null;
>     Compiler_Cmd : String_Access := null;
>     Post_Processor_Cmd : String_Access := null;
> -   Assembler_Cmd : constant String := "as";
> -   Linker_Cmd : constant String := "gcc";
> -
> +   Default_Assembler_Cmd : constant String := "as";
> +   Default_Linker_Cmd : constant String := "gcc";
> +
>     --  Path of the tools.
>     Compiler_Path : String_Access;
>     Post_Processor_Path : String_Access;
> @@ -506,6 +508,12 @@
>     procedure Set_Tools_Name
>     is
>     begin
> +      if Assembler_Cmd = null then
> +         Assembler_Cmd := new String'(Default_Assembler_Cmd);
> +      end if;
> +      if Linker_Cmd = null then
> +         Linker_Cmd := new String'(Default_Linker_Cmd);
> +      end if;
>        --  Set tools name.
>        if Compiler_Cmd = null then
>           case Compile_Kind is
> @@ -537,9 +545,9 @@
>           end if;
>        end if;
>        if Compile_Kind >= Compile_Gcc then
> -         Assembler_Path := Locate_Exec_On_Path (Assembler_Cmd);
> +         Assembler_Path := Locate_Exec_On_Path (Assembler_Cmd.all);
>           if Assembler_Path = null and not Flag_Asm then
> -            Tool_Not_Found (Assembler_Cmd);
> +            Tool_Not_Found (Assembler_Cmd.all);
>           end if;
>        end if;
>        Linker_Path := Locate_Exec_On_Path (Linker_Cmd);
> @@ -613,6 +621,12 @@
>        elsif Opt'Length > 8 and then Opt (1 .. 8) = "--GHDL1=" then
>           Compiler_Cmd := new String'(Opt (9 .. Opt'Last));
>           Res := Option_Ok;
> +      elsif Opt'Length > 5 and then Opt (1 .. 5) = "--LD=" then
> +         Linker_Cmd := new String'(Opt (6 .. Opt'Last));
> +         Res := Option_Ok;
> +      elsif Opt'Length > 5 and then Opt (1 .. 5) = "--AS=" then
> +         Assembler_Cmd := new String'(Opt (6 .. Opt'Last));
> +         Res := Option_Ok;
>        elsif Opt = "-S" then
>           Flag_Asm := True;
>           Res := Option_Ok;
> @@ -693,6 +707,8 @@
>        Disp_Long_Help (Command_Lib (Cmd));
>        Put_Line (" -v             Be verbose");
>        Put_Line (" --GHDL1=PATH   Set the path of the ghdl1
>        compiler");
> +      Put_Line (" --AS=PATH      explicitely specify assembler");
> +      Put_Line (" --LD=PATH      explicitely specify linker");
>        Put_Line (" -S             Do not assemble");
>        Put_Line (" -o FILE        Set the name of the output file");
>     -- Put_Line (" -m32           Generate 32bit code on 64bit
>     machines");
> @@ -747,10 +763,10 @@
>        end if;
>        if Compile_Kind >= Compile_Gcc then
>           Put ("assembler command: ");
> -         Put_Line (Assembler_Cmd);
> +         Put_Line (Assembler_Cmd.all);
>        end if;
>        Put ("linker command: ");
> -      Put_Line (Linker_Cmd);
> +      Put_Line (Linker_Cmd.all);
> 
>        Put ("command line prefix (--PREFIX): ");
>        if Prefix_Path = null then

This is ok (just replace --LD by --LINKER)

> diff -r 6de9ed66d019 translate/grt/Makefile.inc
> --- a/translate/grt/Makefile.inc      Sat Feb 01 04:43:41 2014 +0100
> +++ b/translate/grt/Makefile.inc      Sun Feb 02 16:56:41 2014 +0100
> @@ -86,6 +86,9 @@
>  ifeq ($(filter-out i%86 mingw32,$(arch) $(osys)),)
>    GRT_TARGET_OBJS=win32.o clock.o
>  endif
> +ifeq ($(filter-out i%86 mingw32msvc,$(arch) $(osys)),)
> +  GRT_TARGET_OBJS=win32.o clock.o
> +endif

If mingw32 is the same as mingw32msvc, merge both configs.

>  # Doesn't work for unknown reasons.
>  #ifeq ($(filter-out i%86 cygwin,$(arch) $(osys)),)
>  #  GRT_TARGET_OBJS=win32.o clock.o
> @@ -106,6 +109,15 @@
>   GRT_EXTRA_LIB+=-lpthread
>  endif
> 
> +GNATMAKE ?= gnatmake
> +GNATBIND ?= gnatbind
> +
> +GNATMAKE_FOR_TARGET ?= $(GNATMAKE)
> +GNATBIND_FOR_TARGET ?= $(GNATBIND)
> +
> +GRT_TARGET_CC ?= $(CC)
> +
> +
>  GRT_ARCH?=None
> 
>  # Configuration pragmas.
> @@ -118,14 +130,14 @@
> 
>  libgrt.a: $(GRT_ADD_OBJS) run-bind.o main.o grt-files # grt-arch.ads
>       $(RM) -f $@
> -     $(AR) rcv $@ `sed -e "/^-/d" < grt-files` $(GRT_ADD_OBJS) \
> +     $(AR_FOR_TARGET) rcv $@ `sed -e "/^-/d" < grt-files`
> $(GRT_ADD_OBJS) \
>        run-bind.o main.o
>       $(GRT_RANLIB) $@
> 
>  run-bind.adb: grt-force
> -     gnatmake -c $(GNATFLAGS) -aI$(GRTSRCDIR) $(GRT_PRAGMA_FLAG) \
> +     $(GNATMAKE_FOR_TARGET) -c $(GNATFLAGS) -aI$(GRTSRCDIR)
> $(GRT_PRAGMA_FLAG) \
>         ghdl_main $(GRT_ADAFLAGS) -cargs $(GRT_FLAGS)
> -     gnatbind -Lgrt_ -o run-bind.adb -n ghdl_main.ali
> +     $(GNATBIND_FOR_TARGET) -Lgrt_ -o run-bind.adb -n ghdl_main.ali

Ok.

> 
>  #system.ads:
>  #    sed -e "/Configurable_Run_Time/s/False/True/" \
> @@ -139,49 +151,49 @@
>       $(GRT_ADACOMPILE)
> 
>  i386.o: $(GRTSRCDIR)/config/i386.S
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  chkstk.o: $(GRTSRCDIR)/config/chkstk.S
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  sparc.o: $(GRTSRCDIR)/config/sparc.S
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  ppc.o: $(GRTSRCDIR)/config/ppc.S
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  ia64.o: $(GRTSRCDIR)/config/ia64.S
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  amd64.o: $(GRTSRCDIR)/config/amd64.S
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  linux.o: $(GRTSRCDIR)/config/linux.c
> -     $(CC) -c $(GRT_FLAGS) $(GRT_CFLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) $(GRT_CFLAGS) -o $@ $<
> 
>  win32.o: $(GRTSRCDIR)/config/win32.c
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  win32thr.o: $(GRTSRCDIR)/config/win32thr.c
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  pthread.o: $(GRTSRCDIR)/config/pthread.c
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  times.o : $(GRTSRCDIR)/config/times.c
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  clock.o : $(GRTSRCDIR)/config/clock.c
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  grt-cbinding.o: $(GRTSRCDIR)/grt-cbinding.c
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  grt-cvpi.o: $(GRTSRCDIR)/grt-cvpi.c
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  grt-cthreads.o: $(GRTSRCDIR)/grt-cthreads.c
> -     $(CC) -c $(GRT_FLAGS) -o $@ $<
> +     $(GRT_TARGET_CC) -c $(GRT_FLAGS) -o $@ $<
> 
>  grt-disp-config:
>       @echo "target: $(target)"

I will merge the correct parts.

Thanks,
Tristan.

_______________________________________________
Ghdl-discuss mailing list
[email protected]
https://mail.gna.org/listinfo/ghdl-discuss

Reply via email to