| # the value specified here will be ignored. | # the value specified here will be ignored. | ||||
| EM_DEBUG ?= 0 | EM_DEBUG ?= 0 | ||||
| ifneq ($(EM_DEBUG), 1) | ifneq ($(EM_DEBUG), 1) | ||||
| CXXFLAGS+=-O3 | |||||
| CXXFLAGS+=-O3 | |||||
| endif | endif | ||||
| # NOTE: sanity check | # NOTE: sanity check | ||||
| ifndef EMSCRIPTEN | ifndef EMSCRIPTEN | ||||
| $(error EMSCRIPTEN var not set. You must use emmake to run this Makefile!) | |||||
| $(error EMSCRIPTEN var not set. You must use emmake to run this Makefile!) | |||||
| endif | endif | ||||
| # NOTE: in the emscripten virtual FS, | # NOTE: in the emscripten virtual FS, | ||||
| EM_WEBIDL_BINDER=python $(EMSCRIPTEN)/tools/webidl_binder.py | EM_WEBIDL_BINDER=python $(EMSCRIPTEN)/tools/webidl_binder.py | ||||
| EM_FILE_PACKAGER=python $(EMSCRIPTEN)/tools/file_packager.py | EM_FILE_PACKAGER=python $(EMSCRIPTEN)/tools/file_packager.py | ||||
| # NOTE: libespeak-ng.so compiled to LLVM IR code | |||||
| EM_LIBESPEAKNG_SO=../src/.libs/libespeak-ng.so | |||||
| # NOTE: libespeak-ng.so (Linux) or libespeak-ng.dylib (macOS) compiled to LLVM IR code | |||||
| EM_LIBESPEAKNG_SO=$(wildcard ../src/.libs/libespeak-ng.so) | |||||
| EM_LIBESPEAKNG_DYLIB=$(wildcard ../src/.libs/libespeak-ng.dylib) | |||||
| ifneq ($(EM_LIBESPEAKNG_DYLIB),) | |||||
| EM_LIBESPEAKNG=$(EM_LIBESPEAKNG_DYLIB) | |||||
| else ifneq ($(EM_LIBESPEAKNG_SO),) | |||||
| EM_LIBESPEAKNG=$(EM_LIBESPEAKNG_SO) | |||||
| endif | |||||
| # NOTE: glue code files | # NOTE: glue code files | ||||
| EM_GLUE_PREFIX=glue | EM_GLUE_PREFIX=glue | ||||
| EM_PTHREAD_MAIN_JS=js/pthread-main.js | EM_PTHREAD_MAIN_JS=js/pthread-main.js | ||||
| # NOTE: intermediate objects | # NOTE: intermediate objects | ||||
| EM_OBJS=$(EM_GLUE_OBJ) $(EM_LIBESPEAKNG_SO) | |||||
| EM_ALL_PRE_JS=$(EM_PRE_JS) $(EM_ESPEAKNG_DATA_PACKAGE_JS) | EM_ALL_PRE_JS=$(EM_PRE_JS) $(EM_ESPEAKNG_DATA_PACKAGE_JS) | ||||
| EM_ALL_POST_JS=$(EM_GLUE_AUTOGEN_JS) $(EM_POST_JS) | EM_ALL_POST_JS=$(EM_GLUE_AUTOGEN_JS) $(EM_POST_JS) | ||||
| $(EM_WORKER_DATA): | $(EM_WORKER_DATA): | ||||
| $(EM_FILE_PACKAGER) $@ \ | $(EM_FILE_PACKAGER) $@ \ | ||||
| --js-output=$(EM_ESPEAKNG_DATA_PACKAGE_JS) \ | |||||
| --preload $(EM_DATA_DIR)@$(EM_VIRTUAL_PATH_ESPEAKNG_DATA) \ | |||||
| $(patsubst %,--exclude %,$(EM_EXCLUDE_DATA)) | |||||
| --js-output=$(EM_ESPEAKNG_DATA_PACKAGE_JS) \ | |||||
| --preload $(EM_DATA_DIR)@$(EM_VIRTUAL_PATH_ESPEAKNG_DATA) \ | |||||
| $(patsubst %,--exclude %,$(EM_EXCLUDE_DATA)) | |||||
| $(EM_ESPEAKNG_DATA_PACKAGE_JS): $(EM_WORKER_DATA) | $(EM_ESPEAKNG_DATA_PACKAGE_JS): $(EM_WORKER_DATA) | ||||
| $(EM_GLUE_OBJ): $(EM_GLUE_CPP) | $(EM_GLUE_OBJ): $(EM_GLUE_CPP) | ||||
| $(EM_WORKER_JS): $(EM_GLUE_AUTOGEN_CPP) $(EM_OBJS) $(EM_ALL_PRE_JS) $(EM_ALL_POST_JS) | |||||
| $(EM_WORKER_JS): $(EM_GLUE_AUTOGEN_CPP) $(EM_GLUE_OBJ) $(EM_ALL_PRE_JS) $(EM_ALL_POST_JS) | |||||
| ifeq ($(EM_LIBESPEAKNG),) | |||||
| $(error Unable to find ../src/.libs/libespeak-ng .so or .dylib. Aborting!) | |||||
| endif | |||||
| $(CXX) $(CXXFLAGS) \ | $(CXX) $(CXXFLAGS) \ | ||||
| $(EM_CXXFLAGS) \ | |||||
| $(EM_OBJS) \ | |||||
| $(patsubst %,--pre-js %,$(EM_ALL_PRE_JS)) \ | |||||
| $(patsubst %,--post-js %,$(EM_ALL_POST_JS)) \ | |||||
| -o $@ | |||||
| $(EM_CXXFLAGS) \ | |||||
| $(EM_GLUE_OBJ) \ | |||||
| $(EM_LIBESPEAKNG) \ | |||||
| $(patsubst %,--pre-js %,$(EM_ALL_PRE_JS)) \ | |||||
| $(patsubst %,--post-js %,$(EM_ALL_POST_JS)) \ | |||||
| -o $@ | |||||
| clean-intermediate: | clean-intermediate: | ||||
| rm -f *.o *.out *.pkl $(EM_GLUE_AUTOGEN_CPP) $(EM_GLUE_AUTOGEN_JS) $(EM_ESPEAKNG_DATA_PACKAGE_JS) | rm -f *.o *.out *.pkl $(EM_GLUE_AUTOGEN_CPP) $(EM_GLUE_AUTOGEN_JS) $(EM_ESPEAKNG_DATA_PACKAGE_JS) |