summaryrefslogtreecommitdiff
path: root/makefile
blob: bd93acfaa49a4733ca4e2dc48f421850113bca11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
MAKE:=$(MAKE) MAKEFLAGS=-j8
M=mkdir -p $(@D)
0:;$(MAKE) k && $(MAKE) t #default target
k:;$(MAKE) a N=$@ R=k O='-O3 -march=native' L='-lm -ldl' #for calling k from dynamic libs, add: L='... -Wl,-E'
libk.so:;$(MAKE) a N=$@ R=$@ O='-fPIC -Dshared -fvisibility=hidden' L='-lm -ldl -shared'
libk.a:;$(MAKE) b N=$@ R=$@ O='-O3 -march=native -ffreestanding -lm -ldl -Dldstatic'
o/$N/%.o:%.c *.h;$M;$(CC) @opts $O -o $@ -c $<
o/$N/bin:$(patsubst %.c,o/$N/%.o,$(wildcard *.c));$(CC) $O -o $@ $^ @lopts $L # ;$(STRIP) -R .comment $@ -R '.note*'
a:o/$N/bin;cp o/$N/bin $R
b:$(patsubst %.c,o/$N/%.o,$(wildcard *.c));ar rcs o/$R/libk.a o/$N/*.o && cp o/$N/libk.a $R

o/asm/%.s:%.c *.h;$M;$(CC) -O3 @opts -march=native -nostdlib -ffreestanding -c $< -o $@ -S -masm=intel

#/usr/lib/llvm-17/bin/wasm-ld must be on $PATH
#apt-get install gcc-multilib-x86-64-linux-gnux32
w:k o/w/fs.h o/w/k.wasm.lz4 o/w/index.html $(patsubst w/x/%.k,o/w/x/%.k,$(wildcard w/x/*.k)) #wasm
h:w o/w/http;cd o/w;./http
O_WASM=@opts -Oz -nostdlib -ffreestanding --target=wasm32 -U __SIZEOF_INT128__ -Dwasm -I/usr/x86_64-linux-gnux32/include/
o/w/%.o:%.c *.h o/w/fs.h;$M;clang-17 $(O_WASM) -o $@ -c $<
o/w/k.wasm0:$(patsubst %.c,o/w/%.o,$(wildcard *.c));clang-17 $(O_WASM) -o $@ $^\
 -Wl,--export=main,--export=kinit,--export=kargs,--export=rep,--export=open,--export=close,--export=write,--export=evs\
 -Wl,--export=__heap_base,--no-entry,--initial-memory=33554432,-z,stack-size=8388608,--allow-undefined
o/w/k.wasm:o/w/k.wasm0;wasm-opt -Oz $< -o $@
o/w/k.wasm.lz4:o/w/k.wasm;lz4 -12 <$< >$@
o/w/fs.h:repl.k LICENSE|k w/fs.k;$M;./k w/fs.k $^ >$@
o/w/x/%.k:w/x/%.k;$M;ln -f $< $@
o/w/index.html:w/index.html k w/inl.k w/*.js;$M;cd w && ./inl.k index.html *.js >../$@ && cd -
o/w/http:w/http.c;$(CC) $< -o $@

#nyi
O_32=@opts -m32
o/32/%.o:%.c *.h;$M;$(CC) $(O_32) -o $@ -c $<
k32:$(patsubst %.c,o/32/%.o,$(wildcard *.c));$(CC) $(O_32) -o $@ $^ -lgcc -lm -ldl

o/t:t/t.c;$(CC) $< -o $@ -Wall -Wno-unused-result -Werror

t:tu tr td tg te ta                       #all tests
tu:k o/t;o/t               ;echo tu  done #unit
tr:k;cd t;./repltest.k     ;echo tr  done #repl
td:k;cd dy;./a.k           ;echo td  done #dyalog
tg:k;cd g;./a.k            ;echo tg  done #codegolf
te:te0 te1 te2                            #projecteuler
te0:k;l/runparts.k e  1 50 ;echo te0 done
te1:k;l/runparts.k e 50 90 ;echo te1 done
te2:k;l/runparts.k e 90    ;echo te2 done
ta:t15 t16 t17 t18 t19 t20 t21 t22 t23    #adventofcode
t15:k;l/runparts.k aoc/15  ;echo t15 done
t16:k;l/runparts.k aoc/16  ;echo t16 done
t17:k;l/runparts.k aoc/17  ;echo t17 done
t18:k;l/runparts.k aoc/18  ;echo t18 done
t19:k;l/runparts.k aoc/19  ;echo t19 done
t20:k;l/runparts.k aoc/20  ;echo t20 done
t21:k;l/runparts.k aoc/21  ;echo t21 done
t22:k;l/runparts.k aoc/22  ;echo t22 done
t23:k;l/runparts.k aoc/23  ;echo t23 done

c:;rm -rf o k libk.so libk.a #clean
.PHONY: 0 c k w h a t tu td tg te te0 te1 te2 ta t15 t16 t17 t18 t19 t20 t21 t22 t23