123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- CC = emcc -c
- CXX = em++ -c
- LD = em++
- AR = emar
- LINK.cc = em++ $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)
- EMSCRIPTEN_TARGET?=default
- EMSCRIPTEN_THREADS?=0
- EMSCRIPTEN_PORTS?=0
- ifneq ($(STDCXX),)
- CXXFLAGS_STDCXX = -std=$(STDCXX)
- else
- ifeq ($(shell printf '\n' > bin/empty.cpp ; if $(CXX) -std=c++17 -c bin/empty.cpp -o bin/empty.out > /dev/null 2>&1 ; then echo 'c++17' ; fi ), c++17)
- CXXFLAGS_STDCXX = -std=c++17
- endif
- endif
- CFLAGS_STDC = -std=c99
- CXXFLAGS += $(CXXFLAGS_STDCXX)
- CFLAGS += $(CFLAGS_STDC)
- CPPFLAGS +=
- CXXFLAGS += -fPIC
- CFLAGS += -fPIC
- LDFLAGS +=
- LDLIBS +=
- ARFLAGS := rcs
- ifeq ($(EMSCRIPTEN_THREADS),1)
- CXXFLAGS += -pthread
- CFLAGS += -pthread
- LDFLAGS += -pthread
- endif
- ifeq ($(EMSCRIPTEN_PORTS),1)
- CXXFLAGS += -s USE_ZLIB=1 -sUSE_MPG123=1 -sUSE_OGG=1 -sUSE_VORBIS=1 -DMPT_WITH_ZLIB -DMPT_WITH_MPG123 -DMPT_WITH_VORBIS -DMPT_WITH_VORBISFI
- CFLAGS += -s USE_ZLIB=1 -sUSE_MPG123=1 -sUSE_OGG=1 -sUSE_VORBIS=1 -DMPT_WITH_ZLIB -DMPT_WITH_MPG123 -DMPT_WITH_VORBIS -DMPT_WITH_VORBISFI
- LDFLAGS += -s USE_ZLIB=1 -sUSE_MPG123=1 -sUSE_OGG=1 -sUSE_VORBIS=1
- NO_MINIZ=1
- NO_MINIMP3=1
- NO_STBVORBIS=1
- endif
- CXXFLAGS += -Oz
- CFLAGS += -Oz
- LDFLAGS += -Oz
- # Enable LTO as recommended by Emscripten
- #CXXFLAGS += -flto=thin
- #CFLAGS += -flto=thin
- #LDFLAGS += -flto=thin -Wl,--thinlto-jobs=all
- # As per recommendation in <https://github.com/emscripten-core/emscripten/issues/15638#issuecomment-982772770>,
- # thinLTO is not as well tested as full LTO. Stick to full LTO for now.
- CXXFLAGS += -flto
- CFLAGS += -flto
- LDFLAGS += -flto
- ifeq ($(EMSCRIPTEN_TARGET),default)
- # emits whatever is emscripten's default, currently (1.38.8) this is the same as "wasm" below.
- CPPFLAGS += -DMPT_BUILD_WASM
- CXXFLAGS +=
- CFLAGS +=
- LDFLAGS +=
- LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
- else ifeq ($(EMSCRIPTEN_TARGET),all)
- # emits native wasm AND javascript with full wasm optimizations.
- CPPFLAGS += -DMPT_BUILD_WASM
- CXXFLAGS +=
- CFLAGS +=
- LDFLAGS += -s WASM=2 -s LEGACY_VM_SUPPORT=1 -Wno-transpile
- LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
- else ifeq ($(EMSCRIPTEN_TARGET),audioworkletprocessor)
- # emits an es6 module in a single file suitable for use in an AudioWorkletProcessor
- CPPFLAGS += -DMPT_BUILD_WASM -DMPT_BUILD_AUDIOWORKLETPROCESSOR
- CXXFLAGS +=
- CFLAGS +=
- LDFLAGS += -s WASM=1 -s WASM_ASYNC_COMPILATION=0 -s MODULARIZE=1 -s EXPORT_ES6=1 -s SINGLE_FILE=1
- LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
- else ifeq ($(EMSCRIPTEN_TARGET),wasm)
- # emits native wasm.
- CPPFLAGS += -DMPT_BUILD_WASM
- CXXFLAGS +=
- CFLAGS +=
- LDFLAGS += -s WASM=1
- LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
- else ifeq ($(EMSCRIPTEN_TARGET),js)
- # emits only plain javascript with plain javascript focused optimizations.
- CPPFLAGS += -DMPT_BUILD_ASMJS
- CXXFLAGS +=
- CFLAGS +=
- LDFLAGS += -s WASM=0 -s LEGACY_VM_SUPPORT=1 -Wno-transpile
- LDFLAGS += -s ALLOW_MEMORY_GROWTH=1
- endif
- CXXFLAGS += -s DISABLE_EXCEPTION_CATCHING=0
- CFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -fno-strict-aliasing
- LDFLAGS += -s DISABLE_EXCEPTION_CATCHING=0 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s ERROR_ON_MISSING_LIBRARIES=1 -s EXPORT_NAME="'libopenmpt'"
- include build/make/warnings-clang.mk
- REQUIRES_RUNPREFIX=1
- EXESUFFIX=.js
- SOSUFFIX=.js
- RUNPREFIX=node
- TEST_LDFLAGS= --pre-js build/make/test-pre.js -lnodefs.js
- ifeq ($(EMSCRIPTEN_THREADS),1)
- RUNPREFIX+=--experimental-wasm-threads --experimental-wasm-bulk-memory
- endif
- DYNLINK=0
- SHARED_LIB=1
- STATIC_LIB=0
- EXAMPLES=1
- OPENMPT123=0
- SHARED_SONAME=0
- NO_SHARED_LINKER_FLAG=1
- # Disable the generic compiler optimization flags as emscripten is sufficiently different.
- # Optimization flags are hard-coded for emscripten in this file.
- DEBUG=0
- OPTIMIZE=0
- OPTIMIZE_SIZE=0
- IS_CROSS=1
- ifeq ($(ALLOW_LGPL),1)
- LOCAL_ZLIB=1
- LOCAL_MPG123=1
- LOCAL_OGG=1
- LOCAL_VORBIS=1
- else
- NO_ZLIB=1
- NO_MPG123=1
- NO_OGG=1
- NO_VORBIS=1
- NO_VORBISFILE=1
- endif
- NO_LTDL=1
- NO_DL=1
- NO_PORTAUDIO=1
- NO_PORTAUDIOCPP=1
- NO_PULSEAUDIO=1
- NO_SDL=1
- NO_SDL2=1
- NO_FLAC=1
- NO_SNDFILE=1
|