kuroko: use cosmocc instead of custom makefile
This commit is contained in:
parent
e24b6d3f43
commit
b1c09ae02f
3 changed files with 33 additions and 130 deletions
|
@ -26,21 +26,21 @@ WORKDIR /kuroko
|
||||||
RUN : \
|
RUN : \
|
||||||
&& sed -i '/bind(gamma)/{N;N;d;}' src/modules/module_math.c \
|
&& sed -i '/bind(gamma)/{N;N;d;}' src/modules/module_math.c \
|
||||||
&& sed -i '/MATH_ONE(gamma)/d' src/modules/module_math.c \
|
&& sed -i '/MATH_ONE(gamma)/d' src/modules/module_math.c \
|
||||||
\
|
\
|
||||||
&& sed -i 's_.*char \*\* environ.*_/* & */_' src/os.c \
|
&& sed -i 's_.*char \*\* environ.*_/* & */_' src/os.c \
|
||||||
\
|
\
|
||||||
&& sed -i '/FUNC_SIG(list,append)/d' src/vm.c \
|
&& sed -i '/FUNC_SIG(list,append)/d' src/vm.c \
|
||||||
&& sed -i '/void _callSetName/i\\extern FUNC_SIG(list,append);' src/vm.c \
|
&& sed -i '/void _callSetName/i\\extern FUNC_SIG(list,append);' src/vm.c \
|
||||||
\
|
\
|
||||||
&& sed -i '/static.*cache/c\\static KrkClassCacheEntry * cache = 0;' src/vm.c \
|
&& sed -i '/static.*cache/c\\static KrkClassCacheEntry * cache = 0;' src/vm.c \
|
||||||
&& sed -i $'/define CACHE_SIZE/,/nextCount/{N;w /temp\nd}' src/vm.c \
|
&& sed -i $'/define CACHE_SIZE/,/nextCount/{N;w /temp\nd}' src/vm.c \
|
||||||
&& sed -i $'/void krk_initVM/{r /temp\nN}' src/vm.c \
|
&& sed -i $'/void krk_initVM/{r /temp\nN}' src/vm.c \
|
||||||
&& sed -i '/Reset current thread/i\\cache = calloc(CACHE_SIZE, sizeof(KrkClassCacheEntry));' src/vm.c \
|
&& sed -i '/Reset current thread/i\\cache = calloc(CACHE_SIZE, sizeof(KrkClassCacheEntry));' src/vm.c \
|
||||||
&& sed -i '/krk_freeMemoryDebugger/a\\cache = (free(cache), NULL);' src/vm.c \
|
&& sed -i '/krk_freeMemoryDebugger/a\\cache = (free(cache), NULL);' src/vm.c \
|
||||||
\
|
\
|
||||||
&& sed -i '/define gettid/d' src/threads.c \
|
&& sed -i '/define gettid/d' src/threads.c \
|
||||||
&& sed -i '/initial-exec/d' src/vm.c \
|
&& sed -i '/initial-exec/d' src/vm.c \
|
||||||
\
|
\
|
||||||
&& sed -i $'/Ensure we don\'t have a macro/{\ni\\\
|
&& sed -i $'/Ensure we don\'t have a macro/{\ni\\\
|
||||||
\#ifdef KRK_DISABLE_DYNAMIC\\\n\
|
\#ifdef KRK_DISABLE_DYNAMIC\\\n\
|
||||||
KrkValue krk_module_onload_math(void);\\\n\
|
KrkValue krk_module_onload_math(void);\\\n\
|
||||||
|
@ -69,6 +69,8 @@ KrkValue krk_module_onload_wcwidth(void);\\\n\
|
||||||
\t\tBUILTIN_MODULE("timeit", krk_module_onload_timeit)\\\n\
|
\t\tBUILTIN_MODULE("timeit", krk_module_onload_timeit)\\\n\
|
||||||
\t\tBUILTIN_MODULE("wcwidth", krk_module_onload_wcwidth)\n\
|
\t\tBUILTIN_MODULE("wcwidth", krk_module_onload_wcwidth)\n\
|
||||||
}' src/vm.c \
|
}' src/vm.c \
|
||||||
|
\
|
||||||
|
&& sed -i '/netdb\.h/a\#include <netinet/in.h>' src/modules/module_socket.c \
|
||||||
&& sed -i $'/switch (afval)/{\ni\\\
|
&& sed -i $'/switch (afval)/{\ni\\\
|
||||||
\tif (afval == AF_INET) return "AF_INET";\\\n\
|
\tif (afval == AF_INET) return "AF_INET";\\\n\
|
||||||
\tif (afval == AF_INET6) return "AF_INET6";\\\n\
|
\tif (afval == AF_INET6) return "AF_INET6";\\\n\
|
||||||
|
@ -77,7 +79,7 @@ KrkValue krk_module_onload_wcwidth(void);\\\n\
|
||||||
\treturn tmp;\n\
|
\treturn tmp;\n\
|
||||||
}\n\
|
}\n\
|
||||||
/switch (afval)/,/}/d' src/modules/module_socket.c \
|
/switch (afval)/,/}/d' src/modules/module_socket.c \
|
||||||
\
|
\
|
||||||
&& sed -i $'/strlen(buf)-1/{\n\
|
&& sed -i $'/strlen(buf)-1/{\n\
|
||||||
s/if .*/if (buf[buflen-1] == \'\\\\n\') {/\n\
|
s/if .*/if (buf[buflen-1] == \'\\\\n\') {/\n\
|
||||||
i\\\
|
i\\\
|
||||||
|
@ -86,7 +88,20 @@ a\\\
|
||||||
\t\t\t\t\t\\if (buflen >= 2 && buf[buflen-2] == \'\\\\r\') buf[buflen-2] = \'\\\\n\', buf[buflen-1] = \'\\\\0\';\\\n\
|
\t\t\t\t\t\\if (buflen >= 2 && buf[buflen-2] == \'\\\\r\') buf[buflen-2] = \'\\\\n\', buf[buflen-1] = \'\\\\0\';\\\n\
|
||||||
\t\t\t\t} else {\n\
|
\t\t\t\t} else {\n\
|
||||||
}' src/kuroko.c \
|
}' src/kuroko.c \
|
||||||
\
|
\
|
||||||
|
&& sed -i $'/ifdef KRK_DISABLE_THREADS/i\\\
|
||||||
|
ifdef KRK_DISABLE_DYNAMIC\\\n\
|
||||||
|
BIN_OBJS += src/modules/module_math.o src/modules/module_random.o src/modules/module_socket.o src/modules/module_timeit.o src/modules/module_wcwidth.o\\\n\
|
||||||
|
CFLAGS += -DKRK_DISABLE_DYNAMIC -DSTATIC_ONLY\\\n\
|
||||||
|
endif\\\n\
|
||||||
|
\\\n\
|
||||||
|
' Makefile \
|
||||||
|
&& sed -i $'/CFLAGS += -DKRK_DISABLE_THREADS/a\\\
|
||||||
|
else\\\n\
|
||||||
|
CFLAGS += -DKRK_MEDIOCRE_TLS\\\n\
|
||||||
|
\\\n\
|
||||||
|
' Makefile \
|
||||||
|
\
|
||||||
&& { diff -NrU3 /kuroko.orig/ /kuroko/ > /kuroko.patch; [ $? -le 1 ]; }
|
&& { diff -NrU3 /kuroko.orig/ /kuroko/ > /kuroko.patch; [ $? -le 1 ]; }
|
||||||
# diff exit status is normally 0 or 1, anything greater is an error.
|
# diff exit status is normally 0 or 1, anything greater is an error.
|
||||||
|
|
||||||
|
@ -95,6 +110,7 @@ RUN : \
|
||||||
&& sed -i 's/int main/dontinline int _main/' src/kuroko.c \
|
&& sed -i 's/int main/dontinline int _main/' src/kuroko.c \
|
||||||
&& printf %s $'\n\
|
&& printf %s $'\n\
|
||||||
STATIC_YOINK("__die");\n\
|
STATIC_YOINK("__die");\n\
|
||||||
|
void ShowCrashReports(void);\n\
|
||||||
int LoadZipArgs(int *, char ***);\n\
|
int LoadZipArgs(int *, char ***);\n\
|
||||||
int main(int argc, char * argv[]) {\n\
|
int main(int argc, char * argv[]) {\n\
|
||||||
\tShowCrashReports();\n\
|
\tShowCrashReports();\n\
|
||||||
|
@ -103,27 +119,16 @@ int main(int argc, char * argv[]) {\n\
|
||||||
}\n\
|
}\n\
|
||||||
' >> src/kuroko.c
|
' >> src/kuroko.c
|
||||||
|
|
||||||
|
RUN tar zxf /cosmopolitan/dist/headers.tar.gz -C /cosmopolitan
|
||||||
|
COPY --chmod=0755 --from=localhost/notwa-util /usr/local/bin/cosmocc /usr/bin/
|
||||||
RUN : \
|
RUN : \
|
||||||
&& cd /cosmopolitan \
|
&& CC=cosmocc CFLAGS="-Os -g" AR=ar.com ARFLAGS=rcsD \
|
||||||
&& . ./env \
|
make.com kuroko modules/codecs/sbencs.krk modules/codecs/dbdata.krk \
|
||||||
&& cd dist/"$flavor" \
|
-j2 KRK_DISABLE_RLINE=1 KRK_DISABLE_DYNAMIC=1 \
|
||||||
&& mkdir -p /kuroko/libcosmo \
|
&& cp kuroko kuroko.com.dbg \
|
||||||
&& ln ape-copy-self.o ape.lds cosmopolitan.a crt.o ape-no-modify-self.o ape.o cosmopolitan.h \
|
&& objcopy -S -O binary kuroko.com.dbg kuroko.com \
|
||||||
/kuroko/libcosmo/
|
|
||||||
|
|
||||||
COPY super.mk .
|
|
||||||
RUN : \
|
|
||||||
&& CC=x86_64-linux-musl-gcc \
|
|
||||||
make.com -f super.mk -j2 \
|
|
||||||
KRK_DISABLE_RLINE=1 \
|
|
||||||
KRK_DISABLE_DYNAMIC=1 \
|
|
||||||
# KRK_DISABLE_THREADS=1 \
|
|
||||||
# KRK_DISABLE_DEBUG=1 KRK_NO_DISASSEMBLY=1 KRK_NO_TRACING=1 \
|
|
||||||
;
|
|
||||||
|
|
||||||
RUN : \
|
|
||||||
&& make.com -f super.mk test \
|
|
||||||
;
|
;
|
||||||
|
RUN make.com test
|
||||||
|
|
||||||
FROM scratch AS runner
|
FROM scratch AS runner
|
||||||
COPY --chmod=0755 --from=localhost/notwa-util /usr/local/bin/busybox /bin/busybox
|
COPY --chmod=0755 --from=localhost/notwa-util /usr/local/bin/busybox /bin/busybox
|
||||||
|
|
|
@ -1,102 +0,0 @@
|
||||||
CC ?= gcc
|
|
||||||
CFLAGS = -Isrc -Os -fdiagnostics-color=always -fmax-errors=5
|
|
||||||
LDFLAGS =
|
|
||||||
LDLIBS =
|
|
||||||
|
|
||||||
COSMO_LIBDIR = ./libcosmo
|
|
||||||
|
|
||||||
COSMO_PREFLAGS = -g -static -nostdlib -nostdinc -fno-pie -no-pie -mno-red-zone
|
|
||||||
COSMO_PREFLAGS += -fno-omit-frame-pointer -pg -mnop-mcount -mno-tls-direct-seg-refs
|
|
||||||
COSMO_PREFLAGS += -include $(COSMO_LIBDIR)/cosmopolitan.h -Idummy
|
|
||||||
|
|
||||||
COSMO_POSTFLAGS += -Wl,--gc-sections -fuse-ld=bfd -Wl,--gc-sections
|
|
||||||
COSMO_POSTFLAGS += -Wl,-T,$(COSMO_LIBDIR)/ape.lds
|
|
||||||
COSMO_POSTFLAGS += $(COSMO_LIBDIR)/crt.o $(COSMO_LIBDIR)/ape-no-modify-self.o $(COSMO_LIBDIR)/cosmopolitan.a
|
|
||||||
|
|
||||||
COSMO_FILES = $(COSMO_LIBDIR)/ape-copy-self.o $(COSMO_LIBDIR)/ape-no-modify-self.o
|
|
||||||
COSMO_FILES += $(COSMO_LIBDIR)/ape.lds $(COSMO_LIBDIR)/ape.o $(COSMO_LIBDIR)/crt.o
|
|
||||||
COSMO_FILES += $(COSMO_LIBDIR)/cosmopolitan.a $(COSMO_LIBDIR)/cosmopolitan.h
|
|
||||||
|
|
||||||
DUMMY_HEADERS = arpa/inet.h assert.h dirent.h dlfcn.h errno.h fcntl.h inttypes.h limits.h locale.h math.h netdb.h pthread.h sched.h signal.h stdarg.h stddef.h stdint.h stdio.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/stat.h sys/syscall.h sys/time.h sys/types.h sys/utsname.h termios.h time.h unistd.h wchar.h
|
|
||||||
DUMMY_MISSING = $(foreach header,$(DUMMY_HEADERS),$(if $(wildcard dummy/$(header)),,dummy/$(header)))
|
|
||||||
|
|
||||||
TARGET = kuroko
|
|
||||||
OBJS = $(patsubst %.c, %.o, $(filter-out src/kuroko.c,$(sort $(wildcard src/*.c))))
|
|
||||||
HEADERS = $(wildcard src/kuroko/*.h)
|
|
||||||
GENMODS = modules/codecs/sbencs.krk modules/codecs/dbdata.krk
|
|
||||||
|
|
||||||
ifdef KRK_DISABLE_DOCS
|
|
||||||
CFLAGS += -DKRK_NO_DOCUMENTATION -Wno-unused-value
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef KRK_DISABLE_RLINE
|
|
||||||
BIN_OBJS += src/vendor/rline.o
|
|
||||||
else
|
|
||||||
CFLAGS += -DNO_RLINE
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef KRK_DISABLE_DEBUG
|
|
||||||
CFLAGS += -DKRK_DISABLE_DEBUG
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef KRK_DISABLE_DYNAMIC
|
|
||||||
BIN_OBJS += src/modules/module_math.o src/modules/module_random.o src/modules/module_socket.o src/modules/module_timeit.o src/modules/module_wcwidth.o
|
|
||||||
CFLAGS += -DKRK_DISABLE_DYNAMIC -DSTATIC_ONLY
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef KRK_DISABLE_THREADS
|
|
||||||
CFLAGS += -DKRK_DISABLE_THREADS
|
|
||||||
else
|
|
||||||
CFLAGS += -DKRK_MEDIOCRE_TLS
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef KRK_NO_DISASSEMBLY
|
|
||||||
CFLAGS += -DKRK_NO_DISASSEMBLY=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef KRK_NO_TRACING
|
|
||||||
CFLAGS += -DKRK_NO_TRACING=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef KRK_NO_STRESS_GC
|
|
||||||
CFLAGS += -DKRK_NO_STRESS_GC=1
|
|
||||||
endif
|
|
||||||
|
|
||||||
HEADERS += $(COSMO_LIBDIR)/cosmopolitan.h
|
|
||||||
BIN_OBJS += $(OBJS)
|
|
||||||
|
|
||||||
all: $(TARGET).com $(GENMODS)
|
|
||||||
|
|
||||||
dummy/%.h:
|
|
||||||
mkdir -p dummy && touch $@
|
|
||||||
|
|
||||||
dummy/arpa/%.h:
|
|
||||||
mkdir -p dummy/arpa && touch $@
|
|
||||||
|
|
||||||
dummy/sys/%.h:
|
|
||||||
mkdir -p dummy/sys && touch $@
|
|
||||||
|
|
||||||
%.o: %.c $(HEADERS) $(DUMMY_MISSING)
|
|
||||||
$(CC) $(CFLAGS) $(COSMO_PREFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
$(TARGET).com.dbg: src/$(TARGET).c $(BIN_OBJS) $(HEADERS) $(DUMMY_MISSING)
|
|
||||||
$(CC) $(CFLAGS) $(LDFLAGS) $(COSMO_PREFLAGS) -o $@ $< $(BIN_OBJS) $(LDLIBS) $(COSMO_POSTFLAGS)
|
|
||||||
|
|
||||||
$(TARGET).com: $(TARGET).com.dbg
|
|
||||||
objcopy -S -O binary $< $@
|
|
||||||
|
|
||||||
.PHONY: test
|
|
||||||
test:
|
|
||||||
@for i in test/*.krk; do echo $$i; KUROKO_TEST_ENV=1 $(TESTWRAPPER) ./$(TARGET).com.dbg $$i > $$i.actual; diff $$i.expect $$i.actual || exit 1; rm $$i.actual; done
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
-rm -f $(OBJS) $(TARGET).com $(TARGET).com.dbg src/*.o src/vendor/*.o
|
|
||||||
|
|
||||||
# special cases:
|
|
||||||
|
|
||||||
modules/codecs/sbencs.krk: tools/codectools/gen_sbencs.krk tools/codectools/encodings.json tools/codectools/indexes.json | $(TARGET).com.dbg
|
|
||||||
./$(TARGET).com.dbg tools/codectools/gen_sbencs.krk
|
|
||||||
|
|
||||||
modules/codecs/dbdata.krk: tools/codectools/gen_dbdata.krk tools/codectools/encodings.json tools/codectools/indexes.json | $(TARGET).com.dbg
|
|
||||||
./$(TARGET).com.dbg tools/codectools/gen_dbdata.krk
|
|
|
@ -39,8 +39,8 @@ for x in "$@"; do
|
||||||
''
|
''
|
||||||
exit 0
|
exit 0
|
||||||
elif is_in "$x" \
|
elif is_in "$x" \
|
||||||
-fomit-frame-pointer -fPIC -lc -lc_r -lcma -lgcc -lm \
|
-fomit-frame-pointer -fPIC -lc -lc_r -lcma -ldl -lgcc \
|
||||||
-lpthread -lpthreads -lresolv -lrt -lunwind -lutil \
|
-lm -lpthread -lpthreads -lresolv -lrt -lunwind -lutil \
|
||||||
-Wl,-Bdynamic -Wl,-Bstatic
|
-Wl,-Bdynamic -Wl,-Bstatic
|
||||||
then continue
|
then continue
|
||||||
elif [ "$x" = -c ]; then
|
elif [ "$x" = -c ]; then
|
||||||
|
|
Loading…
Add table
Reference in a new issue