Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #
  2. # common bits used by all libraries
  3. #
  4.  
  5. # first so "all" becomes default target
  6. all: all-yes
  7.  
  8. DEFAULT_YASMD=.dbg
  9.  
  10. ifeq ($(DBG),1)
  11. YASMD=$(DEFAULT_YASMD)
  12. else
  13. YASMD=
  14. endif
  15.  
  16. ifndef SUBDIR
  17.  
  18. ifndef V
  19. Q      = @
  20. ECHO   = printf "$(1)\t%s\n" $(2)
  21. BRIEF  = CC CXX HOSTCC HOSTLD AS YASM AR LD STRIP CP WINDRES
  22. SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM
  23.  
  24. MSG    = $@
  25. M      = @$(call ECHO,$(TAG),$@);
  26. $(foreach VAR,$(BRIEF), \
  27.     $(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
  28. $(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
  29. $(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL))
  30. endif
  31.  
  32. ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample
  33.  
  34. # NASM requires -I path terminated with /
  35. IFLAGS     := -I. -I$(SRC_PATH)/
  36. CPPFLAGS   := $(IFLAGS) $(CPPFLAGS)
  37. CFLAGS     += $(ECFLAGS)
  38. CCFLAGS     = $(CPPFLAGS) $(CFLAGS)
  39. ASFLAGS    := $(CPPFLAGS) $(ASFLAGS)
  40. CXXFLAGS   += $(CPPFLAGS) $(CFLAGS)
  41. YASMFLAGS  += $(IFLAGS:%=%/) -Pconfig.asm
  42.  
  43. HOSTCCFLAGS = $(IFLAGS) $(HOSTCPPFLAGS) $(HOSTCFLAGS)
  44. LDFLAGS    := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS)
  45.  
  46. define COMPILE
  47.        $(call $(1)DEP,$(1))
  48.        $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $<
  49. endef
  50.  
  51. COMPILE_C = $(call COMPILE,CC)
  52. COMPILE_CXX = $(call COMPILE,CXX)
  53. COMPILE_S = $(call COMPILE,AS)
  54. COMPILE_HOSTC = $(call COMPILE,HOSTCC)
  55.  
  56. %.o: %.c
  57.         $(COMPILE_C)
  58.  
  59. %.o: %.cpp
  60.         $(COMPILE_CXX)
  61.  
  62. %.o: %.m
  63.         $(COMPILE_C)
  64.  
  65. %.s: %.c
  66.         $(CC) $(CPPFLAGS) $(CFLAGS) -S -o $@ $<
  67.  
  68. %.o: %.S
  69.         $(COMPILE_S)
  70.  
  71. %_host.o: %.c
  72.         $(COMPILE_HOSTC)
  73.  
  74. %.o: %.rc
  75.         $(WINDRES) $(IFLAGS) --preprocessor "$(DEPWINDRES) -E -xc-header -DRC_INVOKED $(CC_DEPFLAGS)" -o $@ $<
  76.  
  77. %.i: %.c
  78.         $(CC) $(CCFLAGS) $(CC_E) $<
  79.  
  80. %.h.c:
  81.         $(Q)echo '#include "$*.h"' >$@
  82.  
  83. %.ver: %.v
  84.         $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
  85.  
  86. %.c %.h: TAG = GEN
  87.  
  88. # Dummy rule to stop make trying to rebuild removed or renamed headers
  89. %.h:
  90.         @:
  91.  
  92. # Disable suffix rules.  Most of the builtin rules are suffix rules,
  93. # so this saves some time on slow systems.
  94. .SUFFIXES:
  95.  
  96. # Do not delete intermediate files from chains of implicit rules
  97. $(OBJS):
  98. endif
  99.  
  100. include $(SRC_PATH)/arch.mak
  101.  
  102. OBJS      += $(OBJS-yes)
  103. SLIBOBJS  += $(SLIBOBJS-yes)
  104. FFLIBS    := $($(NAME)_FFLIBS) $(FFLIBS-yes) $(FFLIBS)
  105. TESTPROGS += $(TESTPROGS-yes)
  106.  
  107. LDLIBS       = $(FFLIBS:%=%$(BUILDSUF))
  108. FFEXTRALIBS := $(LDLIBS:%=$(LD_LIB)) $(EXTRALIBS)
  109.  
  110. OBJS      := $(sort $(OBJS:%=$(SUBDIR)%))
  111. SLIBOBJS  := $(sort $(SLIBOBJS:%=$(SUBDIR)%))
  112. TESTOBJS  := $(TESTOBJS:%=$(SUBDIR)%) $(TESTPROGS:%=$(SUBDIR)%-test.o)
  113. TESTPROGS := $(TESTPROGS:%=$(SUBDIR)%-test$(EXESUF))
  114. HOSTOBJS  := $(HOSTPROGS:%=$(SUBDIR)%.o)
  115. HOSTPROGS := $(HOSTPROGS:%=$(SUBDIR)%$(HOSTEXESUF))
  116. TOOLS     += $(TOOLS-yes)
  117. TOOLOBJS  := $(TOOLS:%=tools/%.o)
  118. TOOLS     := $(TOOLS:%=tools/%$(EXESUF))
  119. HEADERS   += $(HEADERS-yes)
  120.  
  121. PATH_LIBNAME = $(foreach NAME,$(1),lib$(NAME)/$($(2)LIBNAME))
  122. DEP_LIBS := $(foreach lib,$(FFLIBS),$(call PATH_LIBNAME,$(lib),$(CONFIG_SHARED:yes=S)))
  123. STATIC_DEP_LIBS := $(foreach lib,$(FFLIBS),$(call PATH_LIBNAME,$(lib)))
  124.  
  125. SRC_DIR    := $(SRC_PATH)/lib$(NAME)
  126. ALLHEADERS := $(subst $(SRC_DIR)/,$(SUBDIR),$(wildcard $(SRC_DIR)/*.h $(SRC_DIR)/$(ARCH)/*.h))
  127. SKIPHEADERS += $(ARCH_HEADERS:%=$(ARCH)/%) $(SKIPHEADERS-)
  128. SKIPHEADERS := $(SKIPHEADERS:%=$(SUBDIR)%)
  129. HOBJS        = $(filter-out $(SKIPHEADERS:.h=.h.o),$(ALLHEADERS:.h=.h.o))
  130. checkheaders: $(HOBJS)
  131. .SECONDARY:   $(HOBJS:.o=.c)
  132.  
  133. alltools: $(TOOLS)
  134.  
  135. $(HOSTOBJS): %.o: %.c
  136.         $(COMPILE_HOSTC)
  137.  
  138. $(HOSTPROGS): %$(HOSTEXESUF): %.o
  139.         $(HOSTLD) $(HOSTLDFLAGS) $(HOSTLD_O) $^ $(HOSTLIBS)
  140.  
  141. $(OBJS):     | $(sort $(dir $(OBJS)))
  142. $(HOBJS):    | $(sort $(dir $(HOBJS)))
  143. $(HOSTOBJS): | $(sort $(dir $(HOSTOBJS)))
  144. $(SLIBOBJS): | $(sort $(dir $(SLIBOBJS)))
  145. $(TESTOBJS): | $(sort $(dir $(TESTOBJS)))
  146. $(TOOLOBJS): | tools
  147.  
  148. OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SLIBOBJS) $(TESTOBJS))
  149.  
  150. CLEANSUFFIXES     = *.d *.o *~ *.h.c *.map *.ver *.ho *.gcno *.gcda *$(DEFAULT_YASMD).asm
  151. DISTCLEANSUFFIXES = *.pc
  152. LIBSUFFIXES       = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a
  153.  
  154. define RULES
  155. clean::
  156.         $(RM) $(OBJS) $(OBJS:.o=.d) $(OBJS:.o=$(DEFAULT_YASMD).d)
  157.         $(RM) $(HOSTPROGS)
  158.         $(RM) $(TOOLS)
  159. endef
  160.  
  161. $(eval $(RULES))
  162.  
  163. -include $(wildcard $(OBJS:.o=.d) $(HOSTOBJS:.o=.d) $(TESTOBJS:.o=.d) $(HOBJS:.o=.d) $(SLIBOBJS:.o=.d)) $(OBJS:.o=$(DEFAULT_YASMD).d)
  164.