diff options
-rw-r--r-- | Dockerfile | 8 | ||||
-rw-r--r-- | k.h | 9 | ||||
-rw-r--r-- | m.c | 4 | ||||
-rw-r--r-- | makefile | 2 |
4 files changed, 20 insertions, 3 deletions
diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..7d639c9c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,8 @@ +FROM gcc:latest + +COPY . /usr/src/k +WORKDIR /usr/src/k + +RUN echo -std=gnu99 >> /usr/src/k/opts && make c && make k libk.so + +CMD ["./k"]
\ No newline at end of file @@ -1,5 +1,10 @@ // https://github.com/ktye/i/blob/master/%2B/k.h +#ifdef shared +#define WV __attribute((weak, visibility("default"))) +#else +#define WV +#endif typedef long long K;typedef void V;typedef char C;typedef int I;typedef double F;typedef size_t N;typedef const C*S; -V kinit(),unref(K),CK(C*,K),IK(I*,K),FK(F*,K),LK(K*,K),*dK(K),KA(S/*todo*/,K),KR(S,V*,I);C TK(K),cK(K);N NK(K);I iK(K);F fK(K); -K Kc(C),Ks(C*),Ki(I),Kf(F),KC(C*,N),KS(C**,N),KI(I*,N),KF(F*,N),ref(K),Kp(V*),KE(S),KL(K*,N),K0(K*,S,K*,I); +WV V kinit(),unref(K),CK(C*,K),IK(I*,K),FK(F*,K),LK(K*,K),*dK(K),KA(S/*todo*/,K),KR(S,V*,I);WV C TK(K),cK(K);WV N NK(K);WV I iK(K);WV F fK(K); +WV K Kc(C),Ks(C*),Ki(I),Kf(F),KC(C*,N),KS(C**,N),KI(I*,N),KF(F*,N),ref(K),Kp(V*),KE(S),KL(K*,N),K0(K*,S,K*,I); #define Kx(s,a...) ({static K f;K0(&f,s,(K[]){a},sizeof((K[]){a})/sizeof(K));}) @@ -10,6 +10,10 @@ #else #define AP(p) ((A)(U)(p)) //A from pointer #endif +#ifdef shared +__attribute((weak, visibility("default"))) V kinit(); +#endif + Z ST{V*p;W n;B f;}reg[128];Z U nreg;Z UC pnd[128];Z U npnd; Z V mc(){P(!npnd)F(npnd,U j=pnd[i];munmap(reg[j].p,reg[j].n);reg[j].p=0)npnd=0;U j=0;F(nreg,I(reg[i].p,MC(reg+j,reg+i,SZ*reg);j++))nreg=j;} Z A mu(V*p)_(F(nreg,P(reg[i].p==p,pnd[npnd++]=i;0))die("UNMAP")) @@ -2,7 +2,7 @@ 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' L='-lm -ldl -shared' +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*' |