Makefile 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. # NOTE: This Makefile requires GNU make
  2. # Location to put the targets.
  3. TARGETBINDIR = .
  4. TESTBINDIR = tests
  5. TARGETLIBDIR = .
  6. # Name of the targets
  7. LIBOPUSFILE_TARGET = libopusfile.a
  8. LIBOPUSURL_TARGET = libopusurl.a
  9. OPUSFILE_EXAMPLE_TARGET = opusfile_example
  10. SEEKING_EXAMPLE_TARGET = seeking_example
  11. # Test targets
  12. #TODO: tests
  13. FOO_TARGET = foo
  14. # The command to use to generate dependency information
  15. MAKEDEPEND = ${CC} -MM
  16. #MAKEDEPEND = makedepend -f- -Y --
  17. # Optional features to enable
  18. #CFLAGS := $(CFLAGS) -DOP_HAVE_LRINTF
  19. CFLAGS := $(CFLAGS) -DOP_ENABLE_HTTP
  20. # Extra compilation flags.
  21. # You may get speed increases by including flags such as -O2 or -O3 or
  22. # -ffast-math, or additional flags, depending on your system and compiler.
  23. # The -g flag will generally include debugging information.
  24. CFLAGS := -g $(CFLAGS)
  25. CFLAGS := -DOP_ENABLE_ASSERTIONS $(CFLAGS)
  26. # These are gcc-only, but not actually critical.
  27. CFLAGS := -fPIC $(CFLAGS)
  28. CFLAGS := -std=c89 -pedantic $(CFLAGS)
  29. CFLAGS := -fvisibility=hidden $(CFLAGS)
  30. CFLAGS := -Wextra -Wno-parentheses -Wno-long-long $(CFLAGS)
  31. CFLAGS := -Wall $(CFLAGS)
  32. # The list of pkg-config packages we depend on.
  33. PACKAGES := ogg opus
  34. ifeq ($(findstring -DOP_ENABLE_HTTP,${CFLAGS}),-DOP_ENABLE_HTTP)
  35. PACKAGES += openssl
  36. endif
  37. # The location of include files.
  38. # Modify these to point to your Ogg and Opus include directories if they are
  39. # not installed in a standard location.
  40. CINCLUDE := `pkg-config --cflags ${PACKAGES}`
  41. # Libraries to link with, and the location of library files.
  42. LIBS := `pkg-config --libs ${PACKAGES}`
  43. ifeq ($(findstring -DOP_HAVE_LRINTF,${CFLAGS}),-DOP_HAVE_LRINTF)
  44. LIBS := -lm $(LIBS)
  45. endif
  46. # Extras for the MS target
  47. ifneq ($(findstring mingw,${CC}),)
  48. LIBS += -lwsock32 -lws2_32 -lgdi32 -lcrypt32
  49. EXEEXT := .exe
  50. endif
  51. RANLIB ?= ranlib
  52. #TODO: tests
  53. FOO_LIBS =
  54. # ANYTHING BELOW THIS LINE PROBABLY DOES NOT NEED EDITING
  55. CINCLUDE := -I../include ${CINCLUDE}
  56. LIBSRCDIR = ../src
  57. BINSRCDIR = ../examples
  58. TESTSRCDIR = ${LIBSRCDIR}
  59. WORKDIR = objs
  60. # C source file lists
  61. LIBOPUSFILE_CSOURCES = \
  62. http.c \
  63. info.c \
  64. internal.c \
  65. opusfile.c \
  66. stream.c \
  67. LIBOPUSFILE_CHEADERS = \
  68. internal.h \
  69. LIBOPUSURL_CSOURCES = \
  70. internal.c \
  71. http.c \
  72. ifneq ($(findstring mingw,${CC}),)
  73. LIBOPUSURL_CSOURCES += wincerts.c
  74. endif
  75. LIBOPUSURL_CHEADERS = \
  76. internal.h \
  77. OPUSFILE_EXAMPLE_CSOURCES = opusfile_example.c
  78. SEEKING_EXAMPLE_CSOURCES = seeking_example.c
  79. ifneq ($(findstring mingw,${CC}),)
  80. OPUSFILE_EXAMPLE_CSOURCES += win32utf8.c
  81. SEEKING_EXAMPLE_CSOURCES += win32utf8.c
  82. endif
  83. FOO_CSOURCES = tests/foo.c
  84. # Create object file list.
  85. LIBOPUSFILE_OBJS:= ${LIBOPUSFILE_CSOURCES:%.c=${WORKDIR}/%.o}
  86. LIBOPUSFILE_ASMS:= ${LIBOPUSFILE_OBJS:%.o=%.s}
  87. LIBOPUSFILE_DEPS:= ${LIBOPUSFILE_OBJS:%.o=%.d}
  88. LIBOPUSURL_OBJS:= ${LIBOPUSURL_CSOURCES:%.c=${WORKDIR}/%.o}
  89. LIBOPUSURL_ASMS:= ${LIBOPUSURL_OBJS:%.o=%.s}
  90. LIBOPUSURL_DEPS:= ${LIBOPUSURL_OBJS:%.o=%.d}
  91. OPUSFILE_EXAMPLE_OBJS:= ${OPUSFILE_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
  92. SEEKING_EXAMPLE_OBJS:= ${SEEKING_EXAMPLE_CSOURCES:%.c=${WORKDIR}/%.o}
  93. #TODO: tests
  94. FOO_OBJS:= ${FOO_CSOURCES:%.c=${WORKDIR}/%.o}
  95. ALL_OBJS:= \
  96. ${LIBOPUSFILE_OBJS} \
  97. ${LIBOPUSURL_OBJS} \
  98. ${OPUSFILE_EXAMPLE_OBJS} \
  99. ${SEEKING_EXAMPLE_OBJS} \
  100. #TODO: tests
  101. # ${FOO_OBJS}
  102. # Create the dependency file list
  103. ALL_DEPS:= ${ALL_OBJS:%.o=%.d}
  104. # Prepend source path to file names.
  105. LIBOPUSFILE_CSOURCES:= ${LIBOPUSFILE_CSOURCES:%=${LIBSRCDIR}/%}
  106. LIBOPUSFILE_CHEADERS:= ${LIBOPUSFILE_CHEADERS:%=${LIBSRCDIR}/%}
  107. LIBOPUSURL_CSOURCES:= ${LIBOPUSURL_CSOURCES:%=${LIBSRCDIR}/%}
  108. LIBOPUSURL_CHEADERS:= ${LIBOPUSURL_CHEADERS:%=${LIBSRCDIR}/%}
  109. OPUSFILE_EXAMPLE_CSOURCES:= ${OPUSFILE_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
  110. SEEKING_EXAMPLE_CSOURCES:= ${SEEKING_EXAMPLE_CSOURCES:%=${BINSRCDIR}/%}
  111. #TODO: tests
  112. FOO_CSOURCES:= ${FOO_CSOURCES:%=${TESTSRCDIR}/%}
  113. ALL_CSOURCES:= \
  114. ${LIBOPUSFILE_CSOURCES} \
  115. ${LIBOPUSURL_CSOURCES} \
  116. ${OPUSFILE_EXAMPLE_CSOURCES} \
  117. ${SEEKING_EXAMPLE_CSOURCES} \
  118. #TODO: tests
  119. # ${FOO_CSOURCES} \
  120. # Prepand target path to file names.
  121. LIBOPUSFILE_TARGET:= ${TARGETLIBDIR}/${LIBOPUSFILE_TARGET}
  122. LIBOPUSURL_TARGET:= ${TARGETLIBDIR}/${LIBOPUSURL_TARGET}
  123. OPUSFILE_EXAMPLE_TARGET:= ${TARGETBINDIR}/${OPUSFILE_EXAMPLE_TARGET}${EXEEXT}
  124. SEEKING_EXAMPLE_TARGET:= ${TARGETBINDIR}/${SEEKING_EXAMPLE_TARGET}${EXEEXT}
  125. # Prepend test path to file names.
  126. #TODO: tests
  127. FOO_TARGET:= ${TESTBINDIR}/${FOO_TARGET}
  128. # Complete set of targets
  129. ALL_TARGETS:= \
  130. ${LIBOPUSFILE_TARGET} \
  131. ${LIBOPUSURL_TARGET} \
  132. ${OPUSFILE_EXAMPLE_TARGET} \
  133. ${SEEKING_EXAMPLE_TARGET} \
  134. #TODO: tests
  135. # ${FOO_TARGET} \
  136. # Targets:
  137. # Everything (default)
  138. all: ${ALL_TARGETS}
  139. # libopusfile
  140. ${LIBOPUSFILE_TARGET}: ${LIBOPUSFILE_OBJS}
  141. mkdir -p ${TARGETLIBDIR}
  142. $(AR) cqs $@ ${LIBOPUSFILE_OBJS}
  143. -$(RANLIB) $@
  144. # libopusurl
  145. ${LIBOPUSURL_TARGET}: ${LIBOPUSURL_OBJS}
  146. mkdir -p ${TARGETLIBDIR}
  147. $(AR) cqs $@ ${LIBOPUSURL_OBJS}
  148. -$(RANLIB) $@
  149. # opusfile_example
  150. ${OPUSFILE_EXAMPLE_TARGET}: ${OPUSFILE_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
  151. ${LIBOPUSURL_TARGET}
  152. mkdir -p ${TARGETBINDIR}
  153. ${CC} ${CFLAGS} ${OPUSFILE_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
  154. ${LIBOPUSURL_TARGET} ${LIBS} -o $@
  155. # seeking_example
  156. ${SEEKING_EXAMPLE_TARGET}: ${SEEKING_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
  157. ${LIBOPUSURL_TARGET}
  158. mkdir -p ${TARGETBINDIR}
  159. ${CC} ${CFLAGS} ${SEEKING_EXAMPLE_OBJS} ${LIBOPUSFILE_TARGET} \
  160. ${LIBOPUSURL_TARGET} ${LIBS} -o $@
  161. #TODO:
  162. #tests: foo
  163. #
  164. #${FOO_TARGET}: ${FOO_OBJS}
  165. # mkdir -p ${TESTBINDIR}
  166. # ${CC} ${CFLAGS} ${FOO_OBJS} ${FOO_LIBS} -o $@
  167. #
  168. #tests-clean:
  169. # -rmdir ${TESTBINDIR}
  170. # Assembly listing
  171. ALL_ASM := ${ALL_OBJS:%.o=%.s}
  172. asm: ${ALL_ASM}
  173. # Check that build is complete.
  174. check: all
  175. # Remove all targets.
  176. clean:
  177. ${RM} ${ALL_ASM} ${ALL_OBJS} ${ALL_DEPS}
  178. ${RM} ${ALL_TARGETS}
  179. -rmdir ${WORKDIR}
  180. # Make everything depend on changes in the Makefile
  181. # This vpath directive needs to be before any include statements
  182. vpath Makefile $(dir $(lastword $(MAKEFILE_LIST)))
  183. ${ALL_ASM} ${ALL_OBJS} ${ALL_DEPS} ${ALL_TARGETS} : Makefile
  184. # Specify which targets are phony for GNU make
  185. .PHONY : all clean check
  186. # Rules
  187. ${WORKDIR}/%.d: ${LIBSRCDIR}/%.c
  188. mkdir -p ${dir $@}
  189. ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
  190. ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.s} >> $@
  191. ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT $@ >> $@
  192. ${WORKDIR}/%.s: ${LIBSRCDIR}/%.c
  193. mkdir -p ${dir $@}
  194. ${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
  195. ${WORKDIR}/%.o: ${LIBSRCDIR}/%.c
  196. mkdir -p ${dir $@}
  197. ${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
  198. ${WORKDIR}/%.d : ${BINSRCDIR}/%.c
  199. mkdir -p ${dir $@}
  200. ${MAKEDEPEND} ${CINCLUDE} ${CFLAGS} $< -MT ${@:%.d=%.o} > $@
  201. ${WORKDIR}/%.s : ${BINSRCDIR}/%.c ${WORKDIR}/%.o
  202. mkdir -p ${dir $@}
  203. ${CC} ${CINCLUDE} ${CFLAGS} -S -o $@ $<
  204. ${WORKDIR}/%.o : ${BINSRCDIR}/%.c
  205. mkdir -p ${dir $@}
  206. ${CC} ${CINCLUDE} ${CFLAGS} -c -o $@ $<
  207. # Include header file dependencies, except when cleaning
  208. ifneq ($(MAKECMDGOALS),clean)
  209. include ${ALL_DEPS}
  210. endif