Makefile 5.6 KB

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