Skip to content

Commit

Permalink
fix: embed own source and refactor build a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
jaromil committed Dec 26, 2024
1 parent c4b1c90 commit 2b5a159
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 101 deletions.
15 changes: 7 additions & 8 deletions GNUmakefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,40 +25,39 @@ _: ##
------: ## __ Production targets

musl-linux: ## 🗿 Build a fully static cjit using musl-libc on Linux
$(MAKE) -f build/musl.mk
$(MAKE) -f build/musl.mk lib/tinycc/libtcc.a embed-musl cjit
@rm -f .build_done*
date | tee .build_done_musl

linux-x86: ## 🐧 Build a dynamically linked cjit using libs found on Linux x86
$(MAKE) -f build/linux.mk
$(MAKE) -f build/linux.mk embed-posix cjit
@rm -f .build_done*
date | tee .build_done_linux

win-wsl: ## 🪟 Build cjit.exe for WIN64 on an Ubuntu WSL VM using gcc-mingw-w64
$(MAKE) -f build/win-wsl.mk
$(MAKE) -f build/win-wsl.mk cross-win embed-win cjit.exe
@rm -f .build_done*
date | tee .build_done_win

win-native: ## 🪟 Build cjit.exe for WIN64 on Windows Server
cd ./lib/tinycc; bash configure --targetos=WIN32 --config-backtrace=no; make libtcc.a libtcc1.a
$(MAKE) -f build/win-native.mk
$(MAKE) -f build/win-native.mk embed-win cjit.exe
@rm -f .build_done*
date | tee .build_done_win

apple-osx: ## 🍎 Build cjit.command for Apple/OSX using clang static
$(MAKE) -f build/osx.mk
$(MAKE) -f build/osx.mk embed-posix cjit.command
@rm -f .build_done*
date | tee .build_done_osx

_: ##
------: ## __ Debugging targets

debug-gdb: ## 🔬 Build using the address sanitizer to detect memory leaks
$(MAKE) -f build/linux.mk GDB=1
$(MAKE) -f build/linux.mk embed-posix cjit GDB=1
date | tee .build_done_linux

debug-asan: ## 🔬 Build using the address sanitizer to detect memory leaks
$(MAKE) -f build/linux.mk ASAN=1
$(MAKE) -f build/linux.mk embed-posix cjit ASAN=1
date | tee .build_done_linux

_: ##
Expand Down
64 changes: 64 additions & 0 deletions build/embed-source.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/bin/bash

dst=src/embed_source.c

[ -r src/assets.h ] || {
>&2 echo "Build must generate src/assets.h first"
exit 1
}

[ -r src/assets.c ] || {
>&2 echo "Build must generate src/assets.c first"
exit 1
}

command -v xxd > /dev/null || {
>&2 echo "Error not found: xxd binary not installed"
exit 1
}

set -e
#set -x

name=cjit_source
[ -r ${dst} ] && exit 0

mkdir -p pristine && cd pristine
rm -rf ${name}*
if [ -r ../.git/config ]; then
git clone ../ ${name}
rm -rf ${name}/.git*
else
rsync -rax ../ --exclude pristine ${name}
fi

tar --format ustar -czf ../${name}.tar.gz ${name}
cd -
echo "// Embedded: $path" > $dst
echo "// source generated by cjit/build/embed-path.sh" >> $dst
echo "// `date`" >> $dst
echo "// ${name}" >> $dst
mv ${name}.tar.gz ${name}
xxd -i ${name} >> $dst
rm -f ${name}

# must be constant variables in stack
# sed inplace is not portable
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i'' -e 's/unsigned char/const char/' $dst
sed -i'' -e 's/unsigned int/const unsigned int/' $dst
else
sed -i -e 's/unsigned char/const char/' $dst
sed -i -e 's/unsigned int/const unsigned int/' $dst
fi

# xxd already converts dots in underscores
varname=`echo $name | sed 's/\./_/g'`

# generate assets in source for extract_assets(char *tmpdir)
echo >> src/assets.h
echo "extern char *${varname};" >> src/assets.h
echo "extern unsigned int ${varname}_len;" >> src/assets.h
echo >> src/assets.h

exit 0
44 changes: 44 additions & 0 deletions build/init.mk
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,47 @@ tinycc_config ?= --cc=${cc} --extra-cflags="${cflags}" --extra-ldflags="${ldflag
ifdef DEBUG
tinycc_config += --debug
endif

embed-posix: lib/tinycc/libtcc1.a
$(info Embedding assets for POSIX build)
bash build/init-assets.sh
bash build/embed-asset-path.sh lib/tinycc/libtcc1.a
bash build/embed-asset-path.sh lib/tinycc/include
bash build/embed-asset-path.sh assets/misc
bash build/embed-asset-path.sh assets/stb
@echo >> src/assets.c
@echo "return(true);" >> src/assets.c
@echo "}" >> src/assets.c
bash build/embed-source.sh
@echo >> src/assets.h
@echo "#endif" >> src/assets.h

embed-win: lib/tinycc/libtcc.a lib/tinycc/libtcc1.a
$(info Embedding assets for Windows build)
bash build/init-assets.sh
bash build/embed-asset-path.sh lib/tinycc/libtcc1.a
bash build/embed-asset-path.sh lib/tinycc/include
bash build/embed-asset-path.sh lib/tinycc/win32/include tinycc_win32
bash build/embed-asset-path.sh assets/win32ports
bash build/embed-asset-path.sh assets/misc
bash build/embed-asset-path.sh assets/stb
@echo >> src/assets.c
@echo "return(true);" >> src/assets.c
@echo "}" >> src/assets.c
bash build/embed-source.sh
@echo >> src/assets.h
@echo "#endif" >> src/assets.h

embed-musl: lib/tinycc/libtcc1.a
$(info Generating assets)
bash build/init-assetss.sh
bash build/embed-asset-path.sh lib/tinycc/libtcc1.a
bash build/embed-asset-path.sh lib/tinycc/include
bash build/embed-asset-path.sh assets/misc
bash build/embed-asset-path.sh /lib/x86_64-linux-musl/libc.so
bash build/embed-asset-path.sh assets/stb
@echo >> src/assets.c
@echo "return(true);" >> src/assets.c
@echo "}" >> src/assets.c
@echo >> src/assets.h
@echo "#endif" >> src/assets.h
15 changes: 1 addition & 14 deletions build/linux.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,7 @@ SOURCES += \
src/embed_misc.o \
src/embed_stb.o

all: embed cjit

embed: lib/tinycc/libtcc1.a
$(info Generating assets)
bash build/init-assets.sh
bash build/embed-asset-path.sh lib/tinycc/libtcc1.a
bash build/embed-asset-path.sh lib/tinycc/include
bash build/embed-asset-path.sh assets/misc
bash build/embed-asset-path.sh assets/stb
@echo >> src/assets.c
@echo "return(true);" >> src/assets.c
@echo "}" >> src/assets.c
@echo >> src/assets.h
@echo "#endif" >> src/assets.h
all: embed-posix cjit

tinycc_config += --with-libgcc
ifeq ($(shell sestatus | awk -F': *' '/SELinux status:/ {print $2}'), enabled)
Expand Down
16 changes: 1 addition & 15 deletions build/musl.mk
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,7 @@ SOURCES += \
tinycc_config += --config-musl --enable-static
tynycc_config += --extra-cflags=-static --extra-ldflags=-static

all: lib/tinycc/libtcc.a embed cjit

embed: lib/tinycc/libtcc1.a
$(info Generating assets)
bash build/init-assetss.sh
bash build/embed-asset-path.sh lib/tinycc/libtcc1.a
bash build/embed-asset-path.sh lib/tinycc/include
bash build/embed-asset-path.sh assets/misc
bash build/embed-asset-path.sh /lib/x86_64-linux-musl/libc.so
bash build/embed-asset-path.sh assets/stb
@echo >> src/assets.c
@echo "return(true);" >> src/assets.c
@echo "}" >> src/assets.c
@echo >> src/assets.h
@echo "#endif" >> src/assets.h
all: lib/tinycc/libtcc.a embed-musl cjit

cjit: ${SOURCES}
$(cc) $(cflags) -o $@ $(SOURCES) ${ldadd}
Expand Down
15 changes: 1 addition & 14 deletions build/osx.mk
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,7 @@ SOURCES += \
src/embed_misc.o \
src/embed_stb.o

all: embed cjit.command

embed: lib/tinycc/libtcc1.a
$(info Generating assets)
bash build/init-assets.sh
bash build/embed-asset-path.sh lib/tinycc/libtcc1.a
bash build/embed-asset-path.sh lib/tinycc/include
bash build/embed-asset-path.sh assets/misc
bash build/embed-asset-path.sh assets/stb
@echo >> src/assets.c
@echo "return(true);" >> src/assets.c
@echo "}" >> src/assets.c
@echo >> src/assets.h
@echo "#endif" >> src/assets.h
all: embed-posix cjit.command

cjit.command: ${SOURCES}
$(cc) $(cflags) -o $@ $(SOURCES) ${ldflags} ${ldadd}
Expand Down
26 changes: 4 additions & 22 deletions build/win-native.mk
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ cflags += -DCJIT_BUILD_WIN
ldflags := -static-libgcc
ldadd := lib/tinycc/libtcc.a -lshlwapi

tinycc_config += --targetos=WIN32 --config-backtrace=no

SOURCES += src/win-compat.o \
src/embed_libtcc1.a.o \
src/embed_include.o \
Expand All @@ -28,31 +30,11 @@ SOURCES += src/win-compat.o \
src/embed_misc.o \
src/embed_stb.o

all: embed cjit.exe

embed: lib/tinycc/libtcc1.a
$(info Generating assets)
bash build/init-assets.sh
bash build/embed-asset-path.sh lib/tinycc/libtcc1.a
bash build/embed-asset-path.sh lib/tinycc/include
bash build/embed-asset-path.sh lib/tinycc/win32/include tinycc_win32
bash build/embed-asset-path.sh assets/win32ports
bash build/embed-asset-path.sh assets/misc
bash build/embed-asset-path.sh assets/stb
@echo >> src/assets.c
@echo "return(true);" >> src/assets.c
@echo "}" >> src/assets.c
@echo >> src/assets.h
@echo "#endif" >> src/assets.h
all: embed-win cjit.exe

cjit.exe: ${SOURCES}
$(cc) $(cflags) -o $@ $(SOURCES) ${ldflags} ${ldadd}

# libtcc is built by CI

.c.o:
$(cc) \
$(cflags) \
-c $< -o $@ \
-DVERSION=\"${VERSION}\" \
-DCURRENT_YEAR=\"${CURRENT_YEAR}\"
include build/deps.mk
31 changes: 3 additions & 28 deletions build/win-wsl.mk
Original file line number Diff line number Diff line change
Expand Up @@ -26,42 +26,17 @@ SOURCES += src/win-compat.o \
src/embed_misc.o \
src/embed_stb.o

all: deps embed cjit.exe

embed: lib/tinycc/libtcc1.a
$(info Generating assets)
bash build/init-assets.sh
bash build/embed-asset-path.sh lib/tinycc/libtcc1.a
bash build/embed-asset-path.sh lib/tinycc/include
bash build/embed-asset-path.sh lib/tinycc/win32/include tinycc_win32
bash build/embed-asset-path.sh assets/win32ports
bash build/embed-asset-path.sh assets/misc
bash build/embed-asset-path.sh assets/stb
@echo >> src/assets.c
@echo "return(true);" >> src/assets.c
@echo "}" >> src/assets.c
@echo >> src/assets.h
@echo "#endif" >> src/assets.h
all: cross-win embed-win cjit.exe

cjit.exe: ${SOURCES}
./build/stamp-exe.sh
bash build/stamp-exe.sh
$(cc) $(cflags) -o $@ $(SOURCES) cjit.res ${ldflags} ${ldadd}

deps:
cross-win:
@cd lib/tinycc && ./configure ${tinycc_config}
@$(MAKE) -C lib/tinycc cross-x86_64-win32
@${MAKE} -C lib/tinycc libtcc.a
@${MAKE} -C lib/tinycc libtcc1.a
@mv lib/tinycc/x86_64-win32-libtcc1.a lib/tinycc/libtcc1.a

# @bash build/embed-headers.sh win
# @sed -i 's/unsigned char/const char/' src/embed-headers.c
# @sed -i 's/unsigned int/const unsigned int/' src/embed-headers.c

include build/deps.mk
# .c.o:
# $(cc) \
# $(cflags) \
# -c $< -o $@ \
# -DVERSION=\"${VERSION}\" \
# -DCURRENT_YEAR=\"${CURRENT_YEAR}\"

0 comments on commit 2b5a159

Please sign in to comment.