summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--translate/ghdldrv/Makefile4
-rw-r--r--translate/ghdldrv/ghdldrv.adb40
-rw-r--r--translate/ghdldrv/ghdllocal.adb20
-rw-r--r--translate/ghdldrv/ghdllocal.ads3
-rw-r--r--translate/ghdldrv/ghdlmain.adb2
5 files changed, 53 insertions, 16 deletions
diff --git a/translate/ghdldrv/Makefile b/translate/ghdldrv/Makefile
index e9b38f4..2549362 100644
--- a/translate/ghdldrv/Makefile
+++ b/translate/ghdldrv/Makefile
@@ -36,7 +36,7 @@ GRTSRCDIR=../grt
include $(GRTSRCDIR)/Makefile.inc
ghdl_mcode: default_pathes.ads $(GRT_ADD_OBJS) mmap_binding.o force
- gnatmake -aI../../ortho/mcode $(GNATFLAGS) ghdl_mcode $(GNAT_BARGS) -largs mmap_binding.o $(GNAT_LARGS) $(GRT_ADD_OBJS) $(GRT_EXTRA_LIB) -Wl,--version-script=$(GRTSRCDIR)/grt.ver -Wl,--export-dynamic
+ gnatmake -aI../../ortho/mcode $(GNATFLAGS) ghdl_mcode $(GNAT_BARGS) -largs mmap_binding.o $(GNAT_LARGS) $(GRT_ADD_OBJS) $(subst @,$(GRTSRCDIR),$(GRT_EXTRA_LIB))
mmap_binding.o: ../../ortho/mcode/mmap_binding.c
$(CC) -c -g -o $@ $<
@@ -103,7 +103,7 @@ install.standard: $(LIB93_DIR)/std/std_standard.o \
$(LIB87_DIR)/std/std_standard.o
make-lib-links:
- cd ../lib; ln -sf ../grt/grt.lst .; ln -sf ../grt/libgrt.a .
+ cd ../lib; ln -sf $(GRTSRCDIR)/grt.lst .; ln -sf $(GRTSRCDIR)/libgrt.a .; ln -sf $(GRTSRCDIR)/grt.ver .
install.all: install.v87 install.v93 install.standard
install.mcode: install.v87 install.v93
diff --git a/translate/ghdldrv/ghdldrv.adb b/translate/ghdldrv/ghdldrv.adb
index 5b9b8ad..14e6129 100644
--- a/translate/ghdldrv/ghdldrv.adb
+++ b/translate/ghdldrv/ghdldrv.adb
@@ -272,6 +272,20 @@ package body Ghdldrv is
use System;
use Ada.Characters.Latin_1;
+ -- Replace the first '@' with the machine path.
+ function Substitute (Str : String) return String
+ is
+ begin
+ for I in Str'Range loop
+ if Str (I) = '@' then
+ return Str (Str'First .. I - 1)
+ & Get_Machine_Path_Prefix
+ & Str (I + 1 .. Str'Last);
+ end if;
+ end loop;
+ return Str;
+ end Substitute;
+
Dir : String (1 .. max_path_len);
Dir_Len : Natural;
Line : String (1 .. max_path_len);
@@ -306,16 +320,12 @@ package body Ghdldrv is
Dir_Len := L - 1;
Dir (1 .. Dir_Len) := Line (2 .. L);
else
- if Line (1) = '@' then
- File := new String'(Prefix_Path.all & Line (2 .. L));
+ if To_Obj then
+ File := new String'(Dir (1 .. Dir_Len)
+ & Get_Base_Name (Line (1 .. L))
+ & Get_Object_Suffix.all);
else
- if To_Obj then
- File := new String'(Dir (1 .. Dir_Len)
- & Get_Base_Name (Line (1 .. L))
- & Get_Object_Suffix.all);
- else
- File := new String'(Line (1 .. L));
- end if;
+ File := new String'(Substitute (Line (1 .. L)));
end if;
Filelist.Increment_Last;
@@ -614,6 +624,11 @@ package body Ghdldrv is
Output_File := new String'(Arg);
Res := Option_Arg;
end if;
+ elsif Option = "-m32" then
+ Add_Argument (Compiler_Args, new String'("-m32"));
+ Add_Argument (Assembler_Args, new String'("--32"));
+ Add_Argument (Linker_Args, new String'("-m32"));
+ Decode_Option (Command_Lib (Cmd), Option, Arg, Res);
elsif Option'Length > 4
and then Option (2) = 'W' and then Option (4) = ','
then
@@ -669,6 +684,7 @@ package body Ghdldrv is
Put_Line (" --GHDL1=PATH Set the path of the ghdl1 compiler");
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");
Put_Line (" -WX,OPTION Pass OPTION to X, where X is one of");
Put_Line (" c: compiler, a: assembler, l: linker");
Put_Line (" -g[XX] Pass debugging option to the compiler");
@@ -727,7 +743,7 @@ package body Ghdldrv is
Put_Line (Linker_Cmd);
Setup_Libraries (False);
Put ("library directory: ");
- Put_Line (Prefix_Path.all);
+ Put_Line (Get_Machine_Path_Prefix);
Locate_Tools;
Put ("compiler path: ");
Put_Line (Compiler_Path.all);
@@ -873,7 +889,7 @@ package body Ghdldrv is
Add_File_List (Filelist_Name.all, True);
end if;
Last_File := Filelist.Last;
- Add_File_List (Prefix_Path.all & "grt" & List_Suffix, False);
+ Add_File_List (Get_Machine_Path_Prefix & "grt" & List_Suffix, False);
-- call the linker
declare
@@ -892,7 +908,7 @@ package body Ghdldrv is
P := P + 3;
if Add_Std then
Std_File := new
- String'(Prefix_Path.all
+ String'(Get_Machine_Path_Prefix
& Get_Version_Path & Directory_Separator
& "std" & Directory_Separator
& "std_standard" & Get_Object_Suffix.all);
diff --git a/translate/ghdldrv/ghdllocal.adb b/translate/ghdldrv/ghdllocal.adb
index 3abd555..4a9f62f 100644
--- a/translate/ghdldrv/ghdllocal.adb
+++ b/translate/ghdldrv/ghdllocal.adb
@@ -42,6 +42,9 @@ package body Ghdllocal is
Flag_Create_Default_Config : Boolean := True;
+ -- If TRUE, generate 32bits code on 64bits machines.
+ Flag_32bit : Boolean := False;
+
procedure Finish_Compilation
(Unit : Iir_Design_Unit; Main : Boolean := False)
is
@@ -125,6 +128,9 @@ package body Ghdllocal is
elsif Option = "--ieee=standard" then
Flag_Ieee := Lib_Standard;
Res := Option_Ok;
+ elsif Option = "-m32" then
+ Flag_32bit := True;
+ Res := Option_Ok;
elsif Option'Length >= 2
and then (Option (2) = 'g' or Option (2) = 'O')
then
@@ -169,11 +175,20 @@ package body Ghdllocal is
end case;
end Get_Version_Path;
+ function Get_Machine_Path_Prefix return String is
+ begin
+ if Flag_32bit then
+ return Prefix_Path.all & "32" & Directory_Separator;
+ else
+ return Prefix_Path.all;
+ end if;
+ end Get_Machine_Path_Prefix;
+
procedure Add_Library_Path (Name : String)
is
begin
Libraries.Add_Library_Path
- (Prefix_Path.all & Get_Version_Path & Directory_Separator
+ (Get_Machine_Path_Prefix & Get_Version_Path & Directory_Separator
& Name & Directory_Separator);
end Add_Library_Path;
@@ -182,6 +197,9 @@ package body Ghdllocal is
begin
if Prefix_Path = null then
Prefix_Path := new String'(Default_Pathes.Prefix);
+ else
+ -- assume the user has set the correct path, so do not insert 32
+ Flag_32bit := False;
end if;
-- Add pathes for predefined libraries.
diff --git a/translate/ghdldrv/ghdllocal.ads b/translate/ghdldrv/ghdllocal.ads
index e1c2baa..817cc8f 100644
--- a/translate/ghdldrv/ghdllocal.ads
+++ b/translate/ghdldrv/ghdllocal.ads
@@ -72,6 +72,9 @@ package Ghdllocal is
-- Used to search Std and IEEE libraries.
function Get_Version_Path return String;
+ -- Get Prefix_Path, but with 32 added if -m32 is requested
+ function Get_Machine_Path_Prefix return String;
+
-- Setup standard libaries path. If LOAD is true, then load them now.
procedure Setup_Libraries (Load : Boolean);
diff --git a/translate/ghdldrv/ghdlmain.adb b/translate/ghdldrv/ghdlmain.adb
index 717e4fc..fa6f757 100644
--- a/translate/ghdldrv/ghdlmain.adb
+++ b/translate/ghdldrv/ghdlmain.adb
@@ -136,7 +136,7 @@ package body Ghdlmain is
("To display the options of a GHDL program, run your program");
Put_Line (" with the --help option.");
Put_Line ("Please, refer to the GHDL manual for more information.");
- Put_Line ("Report bugs to <ghdl@free.fr>.");
+ Put_Line ("Report bugs on http://gna.org/projects/ghdl");
elsif Args'Length = 1 then
C := Find_Command (Args (1).all);
if C = null then