1
0
Fork 0
dosbox-staging/contrib/static-opus/Makefile
krcroft fb300c3762 Use GNU make < 4.x define syntax
Versions of GNU make prior to verion 4 do not support
'define =' syntax, but do however support 'define' without
the equals operator.  This commit removes the equals operator
to ensure this Makefile is compatible with older versions
of GNU make.

Reported and tested on Windows XP-MinGW with GNU make 3.81
by @ant-222; thank you!
2020-01-19 21:09:28 +01:00

222 lines
7 KiB
Makefile

##
# Fetch the latest dependencies from upstream
# -------------------------------------------
OGG_ARCHIVE = ogg-master.tar.gz
OGG_URL = https://github.com/xiph/ogg/archive/master.tar.gz
OPUS_ARCHIVE = opus-master.tar.gz
OPUS_URL = https://github.com/xiph/opus/archive/master.tar.gz
OPUSFILE_ARCHIVE = opusfile-master.tar.gz
OPUSFILE_URL = https://github.com/xiph/opusfile/archive/master.tar.gz
##
# We use speex's pkg.m4 to work around a bug in opusfile's autotools config
# that still depends on pkgconfig even if DEPS_ env flags are present.
# Mingw 1.0 (Windows) does not provide pkg-config, so we need to avoid it.
#
OPUSFILE_PKG_URL = https://raw.githubusercontent.com/xiph/speex/master/m4/pkg.m4
##
# Common commands and arguments
# -----------------------------
THREADS = $(shell nproc || echo 4)
CURL_FLAGS = --progress-bar
CURL = curl --location $(CURL_FLAGS)
WGET_FLAGS = --no-verbose --progress=bar
WGET = wget --no-clobber $(WGET_FLAGS)
EXTRACT = tar --strip 1 -zxof
##
# The audio-codecs rely on accurate floating-point calculations
# and will fail to build if they detect too agressive optimizations
# such as Ofast or ffast-math; therefore we strip just these flags
# and step-down -Ofast to -O3 as an acceptable fallback.
#
CFLAGS:= $(subst -Ofast,-O3,$(CFLAGS))
CFLAGS:= $(filter-out -ffast-math,$(CFLAGS))
CFLAGS:= $(filter-out -funsafe-math-optimizations,$(CFLAGS))
CXXFLAGS:= $(subst -Ofast,-O3,$(CXXFLAGS))
CXXFLAGS:= $(filter-out -ffast-math,$(CXXFLAGS))
CXXFLAGS:= $(filter-out -funsafe-math-optimizations,$(CXXFLAGS))
LDFLAGS:= $(subst -Ofast,-O3,$(LDLAGS))
LDFLAGS:= $(filter-out -ffast-math,$(LDFLAGS))
LDFLAGS:= $(filter-out -funsafe-math-optimizations,$(LDFLAGS))
##
# Everything-targets
# ------------------
.PHONY: all clean distclean
all: ogg opus opusfile
clean: ogg/clean opus/clean opusfile/clean
distclean:
rm -rf ogg opus opusfile include lib share pkg.m4 *.gz
##
# Re-useable download function that tries curl, then wget, and then
# prompts the user to manually download the files. Note that if
# one download fails then we assume they all will and therefore
# give the user the full list up-front.
#
define download
echo "Downloading $(URL) to ./$@" \
&& $(CURL) "$(URL)" -o "$@" \
|| $(WGET) "$(URL)" -O "$@" \
|| ( rm -f "$@" \
&& echo "" \
&& echo "DOWNLOAD FAILURE" \
&& echo "~~~~~~~~~~~~~~~~" \
&& echo "Please manually download the following, then re-run make:" \
&& echo " - $(OGG_URL) to ./$(OGG_ARCHIVE)" \
&& echo " - $(OPUS_URL) to ./$(OPUS_ARCHIVE)" \
&& echo " - $(OPUSFILE_URL) to ./$(OPUSFILE_ARCHIVE)" \
&& echo " - $(OPUSFILE_PKG_URL) to ./pkg.m4" \
&& echo "" \
&& echo "Alternatively, you can use your own curl or wget" \
&& echo "arguments by passing CURL_FLAGS=\"--my-args\" and" \
&& echo "WGET_FLAGS=\"--my-flags\" to the make command." \
&& echo "" \
&& echo "For example, disable certificate checking:" \
&& echo " make CURL_FLAGS=\"-k\"" \
&& echo " make WGET_FLAGS=\"--no-check-certificate\"" \
&& echo "" \
)
endef
##
# Ogg Library
# -----------
ogg: lib/libogg.a
$(OGG_ARCHIVE):
$(eval URL := $(OGG_URL))
@$(download)
ogg/autogen.sh: $(OGG_ARCHIVE)
@test -f $@ \
|| ( mkdir -p ogg \
&& $(EXTRACT) $(OGG_ARCHIVE) -C ogg )
ogg/configure: ogg/autogen.sh
cd ogg \
&& mkdir -p m4 \
&& ./autogen.sh
ogg/Makefile: ogg/configure
cd ogg \
&& ./configure --disable-shared
lib/libogg.a: ogg/Makefile
cd ogg \
&& $(MAKE) -j$(THREADS) \
&& mkdir -p ../include/ogg ../lib \
&& cp -v include/ogg/*.h ../include/ogg \
&& cp -v src/.libs/libogg.a ../lib
ogg/clean:
cd ogg \
&& $(MAKE) clean \
&& rm -f configure Makefile
##
# Opus Library
# ------------
opus: lib/libopus.a
$(OPUS_ARCHIVE):
$(eval URL := $(OPUS_URL))
@$(download)
opus/autogen.sh: $(OPUS_ARCHIVE)
@test -f $@ \
|| ( mkdir -p opus \
&& $(EXTRACT) $(OPUS_ARCHIVE) -C opus )
opus/configure: opus/autogen.sh
cd opus \
&& mkdir -p m4 \
&& ./autogen.sh
opus/Makefile: opus/configure
cd opus \
&& ./configure --disable-shared --disable-extra-programs --disable-doc
lib/libopus.a: opus/Makefile
cd opus \
&& $(MAKE) -j$(THREADS) \
&& mkdir -p ../include/opus ../lib \
&& cp -v include/*.h ../include/opus \
&& cp -v .libs/libopus.a ../lib
opus/clean:
cd opus \
&& $(MAKE) clean \
&& rm -f configure Makefile
##
# Opusfile Library
# ----------------
opusfile: opusfile-message
pkg.m4:
$(eval URL := $(OPUSFILE_PKG_URL))
@$(download)
$(OPUSFILE_ARCHIVE):
$(eval URL := $(OPUSFILE_URL))
@$(download)
opusfile/autogen.sh: $(OPUSFILE_ARCHIVE)
@test -f $@ \
|| ( mkdir -p opusfile \
&& $(EXTRACT) $(OPUSFILE_ARCHIVE) -C opusfile )
opusfile/configure: opusfile/autogen.sh pkg.m4
cd opusfile \
&& mkdir -p m4 \
&& cp ../pkg.m4 m4/ \
&& ./autogen.sh
opusfile/Makefile: opusfile/configure lib/libopus.a lib/libogg.a
cd opusfile && \
DEPS_LIBS="-L../lib -lopus -logg" \
DEPS_CFLAGS="-I../include -I../include/opus -I../include/ogg" \
./configure --disable-shared --disable-doc --disable-http --disable-examples
# We run make twice below. We hide the output of the first run because the
# auto-tools generated Makefile launches sed and libtool without quoting the
# current working directory, so those fail when run inside a directory structure
# containing one or more spaces.
#
# Regardless of the sed/libtool issue, if all went well the resulting library will
# exist, which is why we run make a second time. The second make pass doesn't
# rerun the sed and libtool comands, so it acts as a safety check. If there's a
# actual build problem with the source code then it will be caught in this
# second make run and fail without producing a library.
#
lib/libopusfile.a: opusfile/Makefile
cd opusfile \
&& ( $(MAKE) -j$(THREADS) > make.log 2>&1 || $(MAKE) ) \
&& mkdir -p ../include/ ../lib \
&& cp -v include/*.h ../include/opus \
&& cp -v .libs/*.a ../lib
define OPUSFILE_EXPORTS
Export the following to configure DOSBox without pkg-config
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
export OPUSFILE_CFLAGS="-I$(CURDIR)/include -I$(CURDIR)/include/opus"
export OPUSFILE_LIBS="$(CURDIR)/lib/libopusfile.a $(CURDIR)/lib/libogg.a $(CURDIR)/lib/libopus.a -lm"
endef
.PHONY: opusfile-message
opusfile-message: lib/libopusfile.a
$(info $(OPUSFILE_EXPORTS))
opusfile/clean:
cd opusfile \
&& $(MAKE) clean \
&& rm -f configure Makefile