From 3f7f51b2f0868421844b0114c79fc7cad416e894 Mon Sep 17 00:00:00 2001 From: Kakadu Date: Thu, 5 Sep 2024 14:50:27 +0300 Subject: [PATCH] Handle -march properly Signed-off-by: Kakadu --- runtime32/Makefile | 2 +- runtime32/dune | 2 +- src/Driver.ml | 4 ++-- src/Options.ml | 2 +- src/X86_32.ml | 3 +-- src/X86_64.ml | 16 ++++++++++++---- stdlib/.gitignore | 4 ++++ stdlib/Makefile | 4 +++- stdlib/x32/dune | 15 +++++++++++++-- stdlib/{amd64 => x64}/dune | 13 +++++++++++++ 10 files changed, 51 insertions(+), 14 deletions(-) rename stdlib/{amd64 => x64}/dune (77%) diff --git a/runtime32/Makefile b/runtime32/Makefile index 68c5ea8cf..7c48b70fa 100644 --- a/runtime32/Makefile +++ b/runtime32/Makefile @@ -1,4 +1,4 @@ -RUNTIME=runtime32.a +RUNTIME=runtime.a .DEFAULT := $(RUNTIME) diff --git a/runtime32/dune b/runtime32/dune index 27a6cb55c..038bb0a5a 100644 --- a/runtime32/dune +++ b/runtime32/dune @@ -1,5 +1,5 @@ (rule - (target runtime32.a) + (target runtime.a) (mode (promote (until-clean))) (deps Makefile gc_runtime.s runtime.c runtime.h) diff --git a/src/Driver.ml b/src/Driver.ml index c50471552..b0aade41c 100644 --- a/src/Driver.ml +++ b/src/Driver.ml @@ -22,8 +22,8 @@ let[@ocaml.warning "-32"] main = try let r = read_int () in Printf.printf "> "; - read (acc @ [ r ]) - with End_of_file -> acc + read (r :: acc) + with End_of_file -> List.rev acc in let input = read [] in let output = diff --git a/src/Options.ml b/src/Options.ml index 297149d0a..81b48a733 100644 --- a/src/Options.ml +++ b/src/Options.ml @@ -80,7 +80,7 @@ class options args = raise (Commandline_error "Path expected after '-I' specifier") | Some path -> self#add_include_path path) - | "-march=amd64" -> march := `AMD64 + | "-march=x86_64" | "-march=amd64" -> march := `AMD64 | "-march=x86" -> march := `X86_32 | "-s" -> self#set_mode `SM | "-b" -> self#set_mode `BC diff --git a/src/X86_32.ml b/src/X86_32.ml index 10f778dde..ea0c88594 100644 --- a/src/X86_32.ml +++ b/src/X86_32.ml @@ -841,8 +841,7 @@ let build cmd prog = let objs = find_objects (fst @@ fst prog) cmd#get_include_paths in let buf = Buffer.create 255 in List.iter (fun o -> Buffer.add_string buf o; Buffer.add_string buf " ") objs; - let gcc_cmdline = Printf.sprintf "gcc %s -m32 %s %s.s %s %s/runtime32.a" cmd#get_debug cmd#get_output_option cmd#basename (Buffer.contents buf) inc in - Printf.printf " > %s\n%!" gcc_cmdline; + let gcc_cmdline = Printf.sprintf "gcc %s -m32 %s %s.s %s %s/runtime.a" cmd#get_debug cmd#get_output_option cmd#basename (Buffer.contents buf) inc in Sys.command gcc_cmdline | `Compile -> Sys.command (Printf.sprintf "gcc %s -m32 -c %s.s" cmd#get_debug cmd#basename) diff --git a/src/X86_64.ml b/src/X86_64.ml index 93b12e037..9c5845c2e 100644 --- a/src/X86_64.ml +++ b/src/X86_64.ml @@ -1464,7 +1464,13 @@ let build cmd prog = cmd#dump_file "s" (genasm cmd prog); cmd#dump_file "i" (Interface.gen prog); let compiler = - match cmd#target_os with Darwin -> "clang" | Linux -> "gcc" + match (cmd#target_os, cmd#march) with + | Darwin, `AMD64 -> "clang" + | Darwin, `X86_32 -> + Printf.eprintf "X86_32 on darwin is not supported\n"; + exit 1 + | Linux, `AMD64 -> "gcc" + | Linux, `X86_32 -> "gcc -m32" in let compiler_flags, linker_flags = match cmd#target_os with @@ -1489,7 +1495,9 @@ let build cmd prog = in Sys.command gcc_cmdline | `Compile -> - Sys.command - (Printf.sprintf "%s %s %s -c -g %s.s" compiler compiler_flags - debug_flags cmd#basename) + let cmd = + Printf.sprintf "%s %s %s -c -g %s.s" compiler compiler_flags debug_flags + cmd#basename + in + Sys.command cmd | _ -> invalid_arg "must not happen" diff --git a/stdlib/.gitignore b/stdlib/.gitignore index bf30d1b26..67de1047d 100644 --- a/stdlib/.gitignore +++ b/stdlib/.gitignore @@ -3,3 +3,7 @@ /*.log *.i *.s +*.exe +*.x32.exe +*.x64.exe + diff --git a/stdlib/Makefile b/stdlib/Makefile index 1ab0d5faa..546f2af54 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -2,7 +2,9 @@ SHELL := /bin/bash SRCDIR ?= . +$(info SRCDIR = $(SRCDIR)) FILES ?= $(wildcard $(SRCDIR)/*.lama) +$(info FILES = $(FILES)) OFILES = $(FILES:$(SRCDIR)/%=%) OFILES := $(OFILES:.lama=.o) $(info OFILES = $(OFILES)) @@ -11,7 +13,7 @@ LAMAC ?= ../src/lamac BDIR ?= . all: $(addprefix $(BDIR)/,$(ALL)) -$(info ALL = $(ALL)) +$(info ALL = $(ALL), SRCDIR = $(SRCDIR)) $(BDIR)/Fun.o: $(BDIR)/Ref.o $(BDIR)/Data.o: $(BDIR)/Ref.o $(BDIR)/Collection.o diff --git a/stdlib/x32/dune b/stdlib/x32/dune index 9b2623d81..b4f27d222 100644 --- a/stdlib/x32/dune +++ b/stdlib/x32/dune @@ -3,6 +3,19 @@ ../Makefile ../../runtime/Std.i ../List.lama + ../Array.lama + ../Buffer.lama + ../Collection.lama + ../Data.lama + ../Fun.lama + ../Lazy.lama + ../List.lama + ../Matcher.lama + ../Ostap.lama + ../Random.lama + ../Ref.lama + ../STM.lama + ../Timer.lama %{project_root}/src/Driver.exe) (targets List.i @@ -48,5 +61,3 @@ LAMAC "../../src/Driver.exe -march=x86 -I ../runtime32" (run make -j2 -f ../Makefile all))))))) - -;) diff --git a/stdlib/amd64/dune b/stdlib/x64/dune similarity index 77% rename from stdlib/amd64/dune rename to stdlib/x64/dune index c19affc72..8f1ae615f 100644 --- a/stdlib/amd64/dune +++ b/stdlib/x64/dune @@ -3,6 +3,19 @@ ../Makefile ../../runtime/Std.i ../List.lama + ../Array.lama + ../Buffer.lama + ../Collection.lama + ../Data.lama + ../Fun.lama + ../Lazy.lama + ../List.lama + ../Matcher.lama + ../Ostap.lama + ../Random.lama + ../Ref.lama + ../STM.lama + ../Timer.lama %{project_root}/src/Driver.exe) (targets List.i