Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Browser support #31

Draft
wants to merge 2 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,25 @@ scons-local*
.sconsign.dblite
/*.d

# emscripten build generated files
title.png
dataversion.js
Ubuntu-Regular.ttf
output
endless-sky.data
endless-sky.js
endless-sky.worker.js
endless-sky.wasm
endless-sky.wasm.map

# other html build artifacts
title.png
dataversion.js

# libjpeg-turbo
2.1.0.tar.gz
libjpeg-turbo-2.1.0

# Test Reports
test-report.xml

Expand Down
102 changes: 102 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
EMSCRIPTEN_ENV := $(shell command -v emmake 2> /dev/null)

clean:
rm -f endless-sky.js
rm -f endless-sky.worker.js
rm -f endless-sky.data
rm -f endless-sky.wasm
rm -f dataversion.js
rm -f endless-sky.wasm.map
rm -f lib/emcc/libendless-sky.a
clean-full: clean
rm -f Ubuntu-Regular.ttf
rm -f title.png
rm -rf build/emcc
rm -rf lib/emcc
2.1.0.tar.gz:
wget https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.1.0.tar.gz
libjpeg-turbo-2.1.0: 2.1.0.tar.gz
tar xzvf 2.1.0.tar.gz
# | means libjpeg-turbo-2.1.0 is a "order-only prerequisite" so creating the file doesn't invalidate the dir
libjpeg-turbo-2.1.0/libturbojpeg.a: | libjpeg-turbo-2.1.0
ifndef EMSCRIPTEN_ENV
$(error "emmake is not available, activate the emscripten env first")
endif
cd libjpeg-turbo-2.1.0; emcmake cmake -G"Unix Makefiles" -DWITH_SIMD=0 -DCMAKE_BUILD_TYPE=Release -Wno-dev
cd libjpeg-turbo-2.1.0; emmake make
dev: endless-sky.js dataversion.js Ubuntu-Regular.ttf title.png
emrun --serve_after_close --serve_after_exit --browser chrome --private_browsing endless-sky.html
title.png:
cp images/_menu/title.png title.png
Ubuntu-Regular.ttf:
curl -Ls 'https://github.com/google/fonts/blob/main/ufl/ubuntu/Ubuntu-Regular.ttf?raw=true' > Ubuntu-Regular.ttf

# not using -flto because of a change introduced in emscripten in 2.0.27 that I don't understand
COMMON_FLAGS = -O3\
-s USE_SDL=2\
-s USE_LIBPNG=1\
-pthread\
-s DISABLE_EXCEPTION_CATCHING=0

CFLAGS = $(COMMON_FLAGS)\
-Duuid_generate_random=uuid_generate\
-std=c++11\
-Wall\
-Werror\
-Wold-style-cast\
-DES_GLES\
-gsource-map\
-I libjpeg-turbo-2.1.0\

# -fno-rtti\ # some dynamic_casts in the code make this no longer possible

# Note that that libmad is not linked! It's mocked out until it works with Emscripten
LINK_FLAGS = $(COMMON_FLAGS)\
-L libjpeg-turbo-2.1.0\
-l jpeg\
-lidbfs.js\
--source-map-base http://localhost:6931/\
-s USE_WEBGL2=1\
-s ASSERTIONS=2\
-s DEMANGLE_SUPPORT=1\
-s GL_ASSERTIONS=1\
-s ASYNCIFY\
-s PTHREAD_POOL_SIZE=7\
-s MIN_WEBGL_VERSION=2\
-s MAX_WEBGL_VERSION=2\
-s WASM_MEM_MAX=2147483648\
-s INITIAL_MEMORY=629145600\
-s ALLOW_MEMORY_GROWTH=1\
--preload-file data\
--preload-file images\
--preload-file sounds\
--preload-file credits.txt\
--preload-file keys.txt\
-s EXPORTED_RUNTIME_METHODS=['callMain']\
--emrun

CPPS := $(shell ls source/*.cpp) $(shell ls source/text/*.cpp)
CPPS_EXCEPT_MAIN := $(shell ls source/*.cpp | grep -v main.cpp) $(shell ls source/text/*.cpp)
TEMP := $(subst source/,build/emcc/,$(CPPS))
OBJS := $(subst .cpp,.o,$(TEMP))
TEMP := $(subst source/,build/emcc/,$(CPPS_EXCEPT_MAIN))
OBJS_EXCEPT_MAIN := $(subst .cpp,.o,$(TEMP))
HEADERS := $(shell ls source/*.h*) $(shell ls source/text/*.h*)

build/emcc/%.o: source/%.cpp
@mkdir -p build/emcc
@mkdir -p build/emcc/text
em++ $(CFLAGS) -c $< -o $@

lib/emcc/libendless-sky.a: $(OBJS_EXCEPT_MAIN)
@mkdir -p lib/emcc
emar rcs lib/emcc/libendless-sky.a $(OBJS_EXCEPT_MAIN)

endless-sky.js: libjpeg-turbo-2.1.0/libturbojpeg.a lib/emcc/libendless-sky.a build/emcc/main.o
ifndef EMSCRIPTEN_ENV
$(error "em++ is not available, activate the emscripten env first")
endif
em++ -o endless-sky.js $(LINK_FLAGS) build/emcc/main.o lib/emcc/libendless-sky.a

dataversion.js: endless-sky.js
./hash-data.py endless-sky.data dataversion.js
Empty file added dummy
Empty file.
Loading