summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Dockerfile8
-rw-r--r--k.h9
-rw-r--r--m.c4
-rw-r--r--makefile2
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
diff --git a/k.h b/k.h
index ef666db9..2c81f17b 100644
--- a/k.h
+++ b/k.h
@@ -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));})
diff --git a/m.c b/m.c
index 1c72aba5..bf10f8bd 100644
--- a/m.c
+++ b/m.c
@@ -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"))
diff --git a/makefile b/makefile
index 9b2e16a2..bd93acfa 100644
--- a/makefile
+++ b/makefile
@@ -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*'