Makerules 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. #
  2. compile.c = $(CC) -c $< -o $@ $(CPPFLAGS) $(CFLAGS) $(ARCH_CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$@) $(CFLAGS-$<)
  3. compile.S = $(compile.c) $(S_CPPFLAGS) $(ASFLAGS) $(ARCH_ASFLAGS) $(ASFLAGS-$(suffix $@)) $(ASFLAGS-$@) $(ASFLAGS-$<)
  4. #S_CPPFLAGS = -D__ASSEMBLER__ $(asm-CPPFLAGS)
  5. ifeq ($(DOPIC),y)
  6. DISABLE_PIC := $(PICFLAG)
  7. else
  8. DISABLE_PIC := -fno-PIC
  9. endif
  10. # objects
  11. ifeq ($(strip $(CSRC)),)
  12. CSRC = $(wildcard *.c)
  13. endif
  14. COBJ = $(CSRC:.c=.o)
  15. COBJ_PIC = $(COBJ:.o=.os)
  16. #MSRC = some.c
  17. #MOBJ = has to be defined if used
  18. MOBJ_PIC = $(MOBJ:.o=.os)
  19. #SSRC = $(wildcard *.S)
  20. SOBJ = $(SSRC:.S=.o)
  21. SOBJ_PIC = $(SOBJ:.o=.os)
  22. #ARCH_DIR = $(TARGET_ARCH)
  23. #ARCH_CSRC = $(wildcard $(ARCH_DIR)/*.c)
  24. ARCH_COBJ = $(ARCH_CSRC:.c=.o)
  25. ARCH_COBJ_PIC = $(ARCH_COBJ:.o=.os)
  26. #ARCH_SSRC = $(wildcard $(TARGET_ARCH)/*.S)
  27. ARCH_SOBJ = $(ARCH_SSRC:.S=.o)
  28. ARCH_SOBJ_PIC = $(ARCH_SOBJ:.o=.os)
  29. OBJS = $(COBJ) $(SOBJ) $(MOBJ)
  30. OBJS_PIC = $(COBJ_PIC) $(SOBJ_PIC) $(MOBJ_PIC)
  31. ARCH_OBJS = $(ARCH_COBJ) $(ARCH_SOBJ)
  32. ARCH_OBJS_PIC = $(ARCH_COBJ_PIC) $(ARCH_SOBJ_PIC)
  33. $(COBJ): %.o : %.c
  34. $(compile.c) $(DISABLE_PIC)
  35. $(MOBJ): $(MSRC)
  36. $(compile.c) $(DISABLE_PIC) -DL_$(patsubst %.o,%, $@)
  37. $(SOBJ): %.o : %.S
  38. $(compile.S) $(DISABLE_PIC)
  39. $(COBJ_PIC): %.os : %.c
  40. $(compile.c) $(PICFLAG)
  41. $(MOBJ_PIC): $(MSRC%)
  42. $(compile.c) $(PICFLAG) -DL_$(patsubst %.os,%, $@)
  43. $(SOBJ_PIC): %.os : %.S
  44. $(compile.S) $(PICFLAG)
  45. $(ARCH_COBJ): %.o : %.c
  46. $(compile.c) $(DISABLE_PIC)
  47. $(ARCH_SOBJ): %.o : %.S
  48. $(compile.S) $(DISABLE_PIC)
  49. $(ARCH_COBJ_PIC): %.os : %.c
  50. $(compile.c) $(PICFLAG)
  51. $(ARCH_SOBJ_PIC): %.os : %.S
  52. $(compile.S) $(PICFLAG)
  53. #ifeq ($(strip $(OBJ_DIR)),)
  54. #OBJ_DIR = $(patsubst %libc/,, $(shell pwd))
  55. #endif
  56. OBJ_FILE = $(subst /,., $(OBJ_DIR))
  57. OBJ_LIST = $(patsubst %,$(TOPDIR)libc/obj.%, $(OBJ_FILE))
  58. OBJ_LIST_PIC = $(patsubst %,$(TOPDIR)libc/obj_pic.%, $(OBJ_FILE))
  59. ifeq ($(DOPIC),y)
  60. objs: $(OBJ_LIST_PIC)
  61. else
  62. objs: $(OBJ_LIST) $(OBJ_LIST_PIC)
  63. endif
  64. $(OBJ_LIST): $(OBJS)
  65. $(STRIPTOOL) -x -R .note -R .comment $^
  66. echo $(patsubst %,$(OBJ_DIR)/%, $^) > $@
  67. $(OBJ_LIST_PIC): $(OBJS_PIC)
  68. $(STRIPTOOL) -x -R .note -R .comment $^
  69. echo $(patsubst %,$(OBJ_DIR)/%, $^) > $@
  70. # libraries
  71. #LIB_NAME=libsome
  72. AR_LIB_NAME = $(TOPDIR)lib/$(LIB_NAME).a
  73. AR_PIC_LIB_NAME = $(LIB_NAME)_pic.a
  74. ifeq ($(strip $(SO_LIB_NAME)),)
  75. SO_LIB_NAME = $(TOPDIR)lib/$(LIB_NAME).so
  76. endif
  77. ifeq ($(strip $(SO_FULL_NAME)),)
  78. SO_FULL_NAME = $(LIB_NAME)-$(MAJOR_VERSION).$(MINOR_VERSION).$(SUBLEVEL).so
  79. endif
  80. ifeq ($(strip $(SO_MAJOR_NAME)),)
  81. SO_MAJOR_NAME = $(LIB_NAME).so.$(MAJOR_VERSION)
  82. endif
  83. interp := $(TOPDIR)libc/misc/internals/interp.os
  84. ifeq ($(strip $(EXTRA_LINK_LIBS)),)
  85. EXTRA_LINK_LIBS = $(interp) -L$(TOPDIR)lib -lc $(LDADD_LIBFLOAT) $(LIBGCC)
  86. endif
  87. libs: libs_shared $(AR_LIB_NAME)
  88. ifeq ($(HAVE_SHARED),y)
  89. libs_shared: $(SO_LIB_NAME)
  90. else
  91. libs_shared:
  92. endif
  93. $(AR_PIC_LIB_NAME): $(OBJS_PIC) $(ARCH_OBJS_PIC)
  94. $(RM) $@
  95. ifneq ($(strip $(STRIP_FLAGS)),)
  96. $(STRIPTOOL) $(STRIP_FLAGS) $^
  97. else
  98. $(STRIPTOOL) -x -R .note -R .comment $^
  99. endif
  100. $(AR) $(ARFLAGS) $@ $(OBJS_PIC)
  101. ifneq ($(strip $(ARCH_OBJS_PIC)),)
  102. $(AR) $(ARFLAGS) $@ $(ARCH_OBJS_PIC)
  103. endif
  104. ifeq ($(DOPIC),y)
  105. $(AR_LIB_NAME): $(AR_PIC_LIB_NAME)
  106. $(INSTALL) -d $(TOPDIR)lib
  107. $(RM) $@
  108. cp $< $@
  109. else
  110. $(AR_LIB_NAME): $(OBJS) $(ARCH_OBJS)
  111. $(INSTALL) -d $(TOPDIR)lib
  112. $(RM) $@
  113. ifneq ($(strip $(STRIP_FLAGS)),)
  114. $(STRIPTOOL) $(STRIP_FLAGS) $^
  115. else
  116. $(STRIPTOOL) -x -R .note -R .comment $^
  117. endif
  118. $(AR) $(ARFLAGS) $@ $(OBJS)
  119. ifneq ($(strip $(ARCH_OBJS)),)
  120. $(AR) $(ARFLAGS) $@ $(ARCH_OBJS)
  121. endif
  122. endif
  123. $(SO_LIB_NAME): $(AR_PIC_LIB_NAME)
  124. $(INSTALL) -d $(TOPDIR)lib
  125. $(RM) $(TOPDIR)lib/$(SO_FULL_NAME) $(TOPDIR)lib/$(SO_MAJOR_NAME) $@
  126. $(LD) $(LDFLAGS) -soname=$(SO_MAJOR_NAME) -o $(TOPDIR)lib/$(SO_FULL_NAME) \
  127. $(EXTRA_LINK_OPTS) $(SHARED_START_FILES) --whole-archive $< \
  128. --no-whole-archive $(EXTRA_LINK_LIBS) $(SHARED_END_FILES)
  129. $(LN) -sf $(SO_FULL_NAME) $(TOPDIR)lib/$(SO_MAJOR_NAME)
  130. $(LN) -sf $(SO_FULL_NAME) $@
  131. # crt stuff
  132. ifeq ($(HAVE_ELF),y)
  133. CRT = crt1
  134. else
  135. CRT = crt0
  136. endif
  137. CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
  138. crts: $(TOPDIR)lib/$(CRT).o $(TOPDIR)lib/S$(CRT).o $(CTOR_TARGETS)
  139. $(TOPDIR)lib/$(CRT).o: $(CRT).S
  140. $(compile.S) $(DISABLE_PIC) -DL_$*
  141. $(STRIPTOOL) -x -R .note -R .comment $@
  142. $(TOPDIR)lib/S$(CRT).o: $(CRT).S
  143. $(compile.S) $(PIEFLAG) -DL_$*
  144. $(STRIPTOOL) -x -R .note -R .comment $@
  145. ifeq ($(UCLIBC_CTOR_DTOR),y)
  146. $(TOPDIR)lib/crti.o: crti.S
  147. $(INSTALL) -d $(TOPDIR)lib/
  148. $(compile.S) $(PICFLAG) $(SSP_DISABLE_FLAGS)
  149. $(TOPDIR)lib/crtn.o: crtn.S
  150. $(INSTALL) -d $(TOPDIR)lib/
  151. $(compile.S) $(PICFLAG) $(SSP_DISABLE_FLAGS)
  152. else
  153. $(CTOR_TARGETS):
  154. $(INSTALL) -d $(TOPDIR)lib/
  155. $(AR) $(ARFLAGS) $@
  156. endif
  157. # addons
  158. headers:
  159. tags:
  160. ctags -R
  161. clean:
  162. $(RM) *.o *.os *.a
  163. ifneq ($(strip $(ARCH_DIR)),)
  164. $(RM) $(ARCH_DIR)/*.o $(ARCH_DIR)/*.os
  165. endif
  166. subdirs: $(patsubst %, _dir_%, $(DIRS))
  167. subdirs_clean: $(patsubst %, _dirclean_%, $(ALL_SUBDIRS))
  168. $(patsubst %, _dir_%, $(DIRS)) : dummy
  169. $(MAKE) -C $(patsubst _dir_%, %, $@)
  170. $(patsubst %, _dirclean_%, $(ALL_SUBDIRS)) : dummy
  171. $(MAKE) -C $(patsubst _dirclean_%, %, $@) clean
  172. .PHONY: dummy
  173. #