123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- # NOTE: This Makefile requires GNU make
- # Location to put the targets.
- TARGETBINDIR = .
- TESTBINDIR = tests
- TARGETLIBDIR = .
- # Name of the targets
- LIBOPUSFILE_TARGET = libopusfile.a
- LIBOPUSURL_TARGET = libopusurl.a
- OPUSFILE_EXAMPLE_TARGET = opusfile_example
- SEEKING_EXAMPLE_TARGET = seeking_example
- # Test targets
- #TODO: tests
- FOO_TARGET = foo
- # The command to use to generate dependency information
- MAKEDEPEND = ${CC} -MM
- #MAKEDEPEND = makedepend -f- -Y --
- # Optional features to enable
- #CFLAGS := $(CFLAGS) -DOP_HAVE_LRINTF
- CFLAGS := $(CFLAGS) -DOP_ENABLE_HTTP
- # Extra compilation flags.
- # You may get speed increases by including flags such as -O2 or -O3 or
- # -ffast-math, or additional flags, depending on your system and compiler.
- # The -g flag will generally include debugging information.
- CFLAGS := -g $(CFLAGS)
- CFLAGS := -DOP_ENABLE_ASSERTIONS $(CFLAGS)
- # These are gcc-only, but not actually critical.
- CFLAGS := -fPIC $(CFLAGS)
- CFLAGS := -std=c89 -pedantic $(CFLAGS)
- CFLAGS := -fvisibility=hidden $(CFLAGS)
- CFLAGS := -Wextra -Wno-parentheses -Wno-long-long $(CFLAGS)
- CFLAGS := -Wall $(CFLAGS)
- # The list of pkg-config packages we depend on.
- PACKAGES := ogg opus
- ifeq ($(findstring -DOP_ENABLE_HTTP,${CFLAGS}),-DOP_ENABLE_HTTP)
- PACKAGES += openssl
- endif
- # The location of include files.
- # Modify these to point to your Ogg and Opus include directories if they are
- # not installed in a standard location.
- CINCLUDE := `pkg-config --cflags ${PACKAGES}`
- # Libraries to link with, and the location of library files.
- LIBS := `pkg-config --libs ${PACKAGES}`
- ifeq ($(findstring -DOP_HAVE_LRINTF,${CFLAGS}),-DOP_HAVE_LRINTF)
- LIBS := -lm $(LIBS)
- endif
- # Extras for the MS target
- ifneq ($(findstring mingw,${CC}),)
- LIBS += -lwsock32 -lws2_32 -lgdi32 -lcrypt32
- EXEEXT := .exe
- endif
- RANLIB ?= ranlib
- #TODO: tests
- FOO_LIBS =
- # ANYTHING BELOW THIS LINE PROBABLY DOES NOT NEED EDITING
- CINCLUDE := -I../include ${CINCLUDE}
- LIBSRCDIR = ../src
- BINSRCDIR = ../examples
- TESTSRCDIR = ${LIBSRCDIR}
- WORKDIR = objs
- # C source file lists
- LIBOPUSFILE_CSOURCES = \
- http.c \
- info.c \
- internal.c \
- opusfile.c \
- stream.c \
- LIBOPUSFILE_CHEADERS = \
- internal.h \
- LIBOPUSURL_CSOURCES = \
- internal.c \
- http.c \
- ifneq ($(findstring mingw,${CC}),)
- LIBOPUSURL_CSOURCES += wincerts.c
- endif
- LIBOPUSURL_CHEADERS = \
- internal.h \
- OPUSFILE_EXAMPLE_CSOURCES = opusfile_example.c
- SEEKING_EXAMPLE_CSOURCES = seeking_example.c
- ifneq ($(findstring mingw,${CC}),)
- OPUSFILE_EXAMPLE_CSOURCES += win32utf8.c
- SEEKING_EXAMPLE_CSOURCES += win32utf8.c
- endif
- FOO_CSOURCES = tests/foo.c
- # Create object file list.
- LIBOPUSFILE_OBJS:= ${LIBOPUSFILE_CSOURCES:%.c=${WORKDIR}/%.o}
- LIBOPUSFILE_ASMS:= ${LIBOPUSFILE_OBJS:%.o=%.s}
- LIBOPUSFILE_DEPS:= ${LIBOPUSFILE_OBJS:%.o=%.d}
- LIBOPUSURL_OBJS:= ${LIBOPUSURL_CSOURCES:%.c=${WORKDIR}/%.o}
- LIBOPUSURL_ASMS:= ${LIBOPUSURL_OBJS:%.o=%.s}
- LIBOPUSURL_DEPS:= ${LIBOPUSURL_OBJS:%.o=%.d}
- OPUSFILE_EXAMPLE_OBJS:= ${OPUSFILE_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
- SEEKING_EXAMPLE_OBJS:= ${SEEKING_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
- #TODO: tests
- FOO_OBJS:= ${FOO_CSOURCES:%.c=${WORKDIR}/%.o}
- ALL_OBJS:= \
- ${LIBOPUSFILE_OBJS} \
- ${LIBOPUSURL_OBJS} \
- ${OPUSFILE_EXAMPLE_OBJS} \
- ${SEEKING_EXAMPLE_OBJS} \
- #TODO: tests
- # ${FOO_OBJS}
- # Create the dependency file list
- ALL_DEPS:= ${ALL_OBJS:%.o=%.d}
- # Prepend source path to file names.
- LIBOPUSFILE_CSOURCES:= ${LIBOPUSFILE_CSOURCES:%=${LIBSRCDIR}/%}
- LIBOPUSFILE_CHEADERS:= ${LIBOPUSFILE_CHEADERS:%=${LIBSRCDIR}/%}
- LIBOPUSURL_CSOURCES:= ${LIBOPUSURL_CSOURCES:%=${LIBSRCDIR}/%}
- LIBOPUSURL_CHEADERS:= ${LIBOPUSURL_CHEADERS:%=${LIBSRCDIR}/%}
- OPUSFILE_EXAMPLE_CSOURCES:= ${OPUSFILE_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
- SEEKING_EXAMPLE_CSOURCES:= ${SEEKING_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
- #TODO: tests
- FOO_CSOURCES:= ${FOO_CSOURCES:%=${TESTSRCDIR}/%}
- ALL_CSOURCES:= \
- ${LIBOPUSFILE_CSOURCES} \
- ${LIBOPUSURL_CSOURCES} \
- ${OPUSFILE_EXAMPLE_CSOURCES} \
- ${SEEKING_EXAMPLE_CSOURCES} \
- #TODO: tests
- # ${FOO_CSOURCES} \
- # Prepand target path to file names.
- LIBOPUSFILE_TARGET:= ${TARGETLIBDIR}/${LIBOPUSFILE_TARGET}
- LIBOPUSURL_TARGET:= ${TARGETLIBDIR}/${LIBOPUSURL_TARGET}
- OPUSFILE_EXAMPLE_TARGET:= ${TARGETBINDIR}/${OPUSFILE_EXAMPLE_TARGET}${EXEEXT}
- SEEKING_EXAMPLE_TARGET:= ${TARGETBINDIR}/${SEEKING_EXAMPLE_TARGET}${EXEEXT}
- # Prepend test path to file names.
- #TODO: tests
- FOO_TARGET:= ${TESTBINDIR}/${FOO_TARGET}
- # Complete set of targets
- ALL_TARGETS:= \
- ${LIBOPUSFILE_TARGET} \
- ${LIBOPUSURL_TARGET} \
- ${OPUSFILE_EXAMPLE_TARGET} \
- ${SEEKING_EXAMPLE_TARGET} \
- #TODO: tests
- # ${FOO_TARGET} \
- # Targets:
- # Everything (default)
- all: ${ALL_TARGETS}
- # libopusfile
- ${LIBOPUSFILE_TARGET}: ${LIBOPUSFILE_OBJS}
- mkdir -p ${TARGETLIBDIR}
- $(AR) cqs $@ ${LIBOPUSFILE_OBJS}
- -$(RANLIB) $@
- # libopusurl
- ${LIBOPUSURL_TARGET}: ${LIBOPUSURL_OBJS}
- mkdir -p ${TARGETLIBDIR}
- $(AR) cqs $@ ${LIBOPUSURL_OBJS}
- -$(RANLIB) $@
- # opusfile_example
- ${OPUSFILE_EXAMPLE_TARGET}: ${OPUSFILE_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
- ${LIBOPUSURL_TARGET}
- mkdir -p ${TARGETBINDIR}
- ${CC} ${CFLAGS} ${OPUSFILE_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
- ${LIBOPUSURL_TARGET} ${LIBS} -o $@
- # seeking_example
- ${SEEKING_EXAMPLE_TARGET}: ${SEEKING_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
- ${LIBOPUSURL_TARGET}
- mkdir -p ${TARGETBINDIR}
- ${CC} ${CFLAGS} ${SEEKING_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
- ${LIBOPUSURL_TARGET} ${LIBS} -o $@
- #TODO:
- #tests: foo
- #
- #${FOO_TARGET}: ${FOO_OBJS}
- # mkdir -p ${TESTBINDIR}
- # ${CC} ${CFLAGS} ${FOO_OBJS} ${FOO_LIBS} -o $@
- #
- #tests-clean:
- # -rmdir ${TESTBINDIR}
- # Assembly listing
- ALL_ASM := ${ALL_OBJS:%.o=%.s}
- asm: ${ALL_ASM}
- # Check that build is complete.
- check: all
- # Remove all targets.
- clean:
- ${RM} ${ALL_ASM} ${ALL_OBJS} ${ALL_DEPS}
- ${RM} ${ALL_TARGETS}
- -rmdir ${WORKDIR}
- # Make everything depend on changes in the Makefile
- # This vpath directive needs to be before any include statements
- vpath Makefile $(dir $(lastword $(MAKEFILE_LIST)))
- ${ALL_ASM} ${ALL_OBJS} ${ALL_DEPS} ${ALL_TARGETS} : Makefile
- # Specify which targets are phony for GNU make
- .PHONY : all clean check
- # Rules
- ${WORKDIR}/%.d: ${LIBSRCDIR}/%.c
- mkdir -p ${dir $@}
- ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
- ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.s} >> $@
- ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT $@ >> $@
- ${WORKDIR}/%.s: ${LIBSRCDIR}/%.c
- mkdir -p ${dir $@}
- ${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
- ${WORKDIR}/%.o: ${LIBSRCDIR}/%.c
- mkdir -p ${dir $@}
- ${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
- ${WORKDIR}/%.d : ${BINSRCDIR}/%.c
- mkdir -p ${dir $@}
- ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
- ${WORKDIR}/%.s : ${BINSRCDIR}/%.c ${WORKDIR}/%.o
- mkdir -p ${dir $@}
- ${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
- ${WORKDIR}/%.o : ${BINSRCDIR}/%.c
- mkdir -p ${dir $@}
- ${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
- # Include header file dependencies, except when cleaning
- ifneq ($(MAKECMDGOALS),clean)
- include ${ALL_DEPS}
- endif
|