Dunify tutorial

Signed-off-by: Kakadu <Kakadu@pm.me>
This commit is contained in:
Kakadu 2024-09-05 14:51:37 +03:00
parent 3f7f51b2f0
commit a91f4824c4
6 changed files with 262 additions and 51 deletions

1
tutorial/.gitignore vendored
View file

@ -1 +0,0 @@
../stdlib/.gitignore

9
tutorial/.gitignore vendored Normal file
View file

@ -0,0 +1,9 @@
*.html
*.sm
/*.log
*.i
*.s
*.exe
*.x32.exe
*.x64.exe

View file

@ -1,19 +0,0 @@
FILES=$(wildcard *.lama)
ALL=$(sort $(FILES:.lama=))
EXTRA_TARGETS =
ifeq ($(LAMAC),)
LAMAC := LAMA=../runtime ../src/lamac -I ../stdlib
EXTRA_TARGETS += ../src/lamac
endif
all: $(EXTRA_TARGETS) $(ALL)
../src/lamac:
$(MAKE) -C ../src
%: %.lama
$(LAMAC) $<
clean:
$(RM) -R *.s *.o *.i *~ $(ALL)

View file

@ -1,6 +1,7 @@
(rule
(targets Hello.exe)
(deps Hello.lama)
(targets Expressions.x32.exe)
(deps (:lama Expressions.lama) ../runtime32/runtime.a)
(mode
(promote (until-clean)))
(action
@ -9,11 +10,191 @@
"../runtime32"
(run
%{project_root}/src/Driver.exe
%{deps}
-march=x86
%{lama}
-I
../stdlib/x32
-I
../runtime32
-o
%{targets}))))
(rule
(targets Expressions.x64.exe)
(deps (:lama Expressions.lama) ../runtime/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime"
(run
%{project_root}/src/Driver.exe
-march=x86_64
%{lama}
-I
../stdlib/x64
-I
../runtime
-o
%{targets}))))
(rule
(targets Functions.x32.exe)
(deps (:lama Functions.lama) ../runtime32/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime32"
(run
%{project_root}/src/Driver.exe
-march=x86
%{lama}
-I
../stdlib/x32
-I
../runtime32
-o
%{targets}))))
(rule
(targets Functions.x64.exe)
(deps (:lama Functions.lama) ../runtime/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime"
(run
%{project_root}/src/Driver.exe
-march=x86_64
%{lama}
-I
../stdlib/x64
-I
../runtime
-o
%{targets}))))
(rule
(targets Hello.x32.exe)
(deps (:lama Hello.lama) ../runtime32/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime32"
(run
%{project_root}/src/Driver.exe
-march=x86
%{lama}
-I
../stdlib/x32
-I
../runtime32
-o
%{targets}))))
(rule
(targets Hello.x64.exe)
(deps (:lama Hello.lama) ../runtime/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime"
(run
%{project_root}/src/Driver.exe
-march=x86_64
%{lama}
-I
../stdlib/x64
-I
../runtime
-o
%{targets}))))
(rule
(targets PatternMatching.x32.exe)
(deps (:lama PatternMatching.lama) ../runtime32/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime32"
(run
%{project_root}/src/Driver.exe
-march=x86
%{lama}
-I
../stdlib/x32
-I
../runtime32
-o
%{targets}))))
(rule
(targets PatternMatching.x64.exe)
(deps (:lama PatternMatching.lama) ../runtime/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime"
(run
%{project_root}/src/Driver.exe
-march=x86_64
%{lama}
-I
../stdlib/x64
-I
../runtime
-o
%{targets}))))
(rule
(targets Values.x32.exe)
(deps (:lama Values.lama) ../runtime32/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime32"
(run
%{project_root}/src/Driver.exe
-march=x86
%{lama}
-I
../stdlib/x32
-I
../runtime32
-o
%{targets}))))
(rule
(targets Values.x64.exe)
(deps (:lama Values.lama) ../runtime/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"../runtime"
(run
%{project_root}/src/Driver.exe
-march=x86_64
%{lama}
-I
../stdlib/x64
-I
../runtime
-o
%{targets}))))

44
tutorial/gen.ml Normal file
View file

@ -0,0 +1,44 @@
#use "topfind";;
#require "str";;
let demos = ["Expressions"; "Functions"; "Hello"; "PatternMatching"; "Values"]
let template = {|
(rule
(targets %DEMO%.exe)
(deps (:lama %DEMOSRC%.lama) %RUNTIME%/runtime.a)
(mode
(promote (until-clean)))
(action
(setenv
LAMA
"%RUNTIME%"
(run
%{project_root}/src/Driver.exe
%EXTRASWITCHES%
%{lama}
-I
%STDLIB%
-I
%RUNTIME%
-o
%{targets}))))
|}
let () =
Out_channel.with_open_text "dune" (fun ch ->
List.iter (fun demo ->
template
|> Str.global_replace (Str.regexp "%DEMO%") (demo^".x32")
|> Str.global_replace (Str.regexp "%DEMOSRC%") demo
|> Str.global_replace (Str.regexp "%RUNTIME%") "../runtime32"
|> Str.global_replace (Str.regexp "%STDLIB%") "../stdlib/x32"
|> Str.global_replace (Str.regexp "%EXTRASWITCHES%") "-march=x86"
|> output_string ch;
template
|> Str.global_replace (Str.regexp "%DEMO%") (demo^".x64")
|> Str.global_replace (Str.regexp "%DEMOSRC%") demo
|> Str.global_replace (Str.regexp "%RUNTIME%") "../runtime"
|> Str.global_replace (Str.regexp "%STDLIB%") "../stdlib/x64"
|> Str.global_replace (Str.regexp "%EXTRASWITCHES%") "-march=x86_64"
|> output_string ch;
) demos)