/share/mk/sys.mk

https://bitbucket.org/freebsd/freebsd-head/ · Makefile · 348 lines · 233 code · 72 blank · 43 comment · 11 complexity · 0120a583d0e43c0ea8825f860a27c457 MD5 · raw file

  1. # from: @(#)sys.mk 8.2 (Berkeley) 3/21/94
  2. # $FreeBSD$
  3. unix ?= We run FreeBSD, not UNIX.
  4. .FreeBSD ?= true
  5. .if !defined(%POSIX)
  6. #
  7. # MACHINE_CPUARCH defines a collection of MACHINE_ARCH. Machines with
  8. # the same MACHINE_ARCH can run each other's binaries, so it necessarily
  9. # has word size and endian swizzled in. However, support files for
  10. # these machines often are shared amongst all combinations of size
  11. # and/or endian. This is called MACHINE_CPU in NetBSD, but that's used
  12. # for something different in FreeBSD.
  13. #
  14. MACHINE_CPUARCH=${MACHINE_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/:C/powerpc64/powerpc/}
  15. .endif
  16. # Set any local definitions first. Place this early, but it needs
  17. # MACHINE_CPUARCH to be defined.
  18. .sinclude <local.sys.mk>
  19. # If the special target .POSIX appears (without prerequisites or
  20. # commands) before the first noncomment line in the makefile, make shall
  21. # process the makefile as specified by the Posix 1003.2 specification.
  22. # make(1) sets the special macro %POSIX in this case (to the actual
  23. # value "1003.2", for what it's worth).
  24. #
  25. # The rules below use this macro to distinguish between Posix-compliant
  26. # and default behaviour.
  27. .if defined(%POSIX)
  28. .SUFFIXES: .o .c .y .l .a .sh .f
  29. .else
  30. .SUFFIXES: .out .a .ln .o .c .cc .cpp .cxx .C .m .F .f .e .r .y .l .S .asm .s .cl .p .h .sh
  31. .endif
  32. AR ?= ar
  33. .if defined(%POSIX)
  34. ARFLAGS ?= -rv
  35. .else
  36. ARFLAGS ?= rl
  37. .endif
  38. RANLIB ?= ranlib
  39. AS ?= as
  40. AFLAGS ?=
  41. ACFLAGS ?=
  42. .if defined(%POSIX)
  43. CC ?= c89
  44. CFLAGS ?= -O
  45. .else
  46. CC ?= cc
  47. .if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "mips"
  48. CFLAGS ?= -O -pipe
  49. .else
  50. CFLAGS ?= -O2 -pipe
  51. .endif
  52. .if defined(NO_STRICT_ALIASING)
  53. CFLAGS += -fno-strict-aliasing
  54. .endif
  55. .endif
  56. PO_CFLAGS ?= ${CFLAGS}
  57. # C Type Format data is required for DTrace
  58. CTFFLAGS ?= -L VERSION
  59. CTFCONVERT ?= ctfconvert
  60. CTFMERGE ?= ctfmerge
  61. DTRACE ?= dtrace
  62. .if defined(CFLAGS) && (${CFLAGS:M-g} != "")
  63. CTFFLAGS += -g
  64. .else
  65. # XXX: What to do here? Is removing the CFLAGS part completely ok here?
  66. # For now comment it out to not compile with -g unconditionally.
  67. #CFLAGS += -g
  68. .endif
  69. CXX ?= c++
  70. CXXFLAGS ?= ${CFLAGS:N-std=*:N-Wnested-externs:N-W*-prototypes:N-Wno-pointer-sign:N-Wold-style-definition}
  71. PO_CXXFLAGS ?= ${CXXFLAGS}
  72. CPP ?= cpp
  73. .if empty(.MAKEFLAGS:M-s)
  74. ECHO ?= echo
  75. ECHODIR ?= echo
  76. .else
  77. ECHO ?= true
  78. .if ${.MAKEFLAGS:M-s} == "-s"
  79. ECHODIR ?= echo
  80. .else
  81. ECHODIR ?= true
  82. .endif
  83. .endif
  84. .if !empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n"
  85. _+_ ?=
  86. .else
  87. _+_ ?= +
  88. .endif
  89. .if defined(%POSIX)
  90. FC ?= fort77
  91. FFLAGS ?= -O 1
  92. .else
  93. FC ?= f77
  94. FFLAGS ?= -O
  95. .endif
  96. EFLAGS ?=
  97. INSTALL ?= install
  98. LEX ?= lex
  99. LFLAGS ?=
  100. LD ?= ld
  101. LDFLAGS ?=
  102. LINT ?= lint
  103. LINTFLAGS ?= -cghapbx
  104. LINTKERNFLAGS ?= ${LINTFLAGS}
  105. LINTOBJFLAGS ?= -cghapbxu -i
  106. LINTOBJKERNFLAGS?= ${LINTOBJFLAGS}
  107. LINTLIBFLAGS ?= -cghapbxu -C ${LIB}
  108. MAKE ?= make
  109. .if !defined(%POSIX)
  110. NM ?= nm
  111. .endif
  112. OBJC ?= cc
  113. OBJCFLAGS ?= ${OBJCINCLUDES} ${CFLAGS} -Wno-import
  114. PC ?= pc
  115. PFLAGS ?=
  116. RC ?= f77
  117. RFLAGS ?=
  118. SHELL ?= sh
  119. YACC ?= yacc
  120. .if defined(%POSIX)
  121. YFLAGS ?=
  122. .else
  123. YFLAGS ?= -d
  124. .endif
  125. .if defined(%POSIX)
  126. # Posix 1003.2 mandated rules
  127. #
  128. # Quoted directly from the Posix 1003.2 draft, only the macros
  129. # $@, $< and $* have been replaced by ${.TARGET}, ${.IMPSRC}, and
  130. # ${.PREFIX}, resp.
  131. # SINGLE SUFFIX RULES
  132. .c:
  133. ${CC} ${CFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
  134. ${CTFCONVERT_CMD}
  135. .f:
  136. ${FC} ${FFLAGS} ${LDFLAGS} -o ${.TARGET} ${.IMPSRC}
  137. ${CTFCONVERT_CMD}
  138. .sh:
  139. cp -f ${.IMPSRC} ${.TARGET}
  140. chmod a+x ${.TARGET}
  141. # DOUBLE SUFFIX RULES
  142. .c.o:
  143. ${CC} ${CFLAGS} -c ${.IMPSRC}
  144. ${CTFCONVERT_CMD}
  145. .f.o:
  146. ${FC} ${FFLAGS} -c ${.IMPSRC}
  147. ${CTFCONVERT_CMD}
  148. .y.o:
  149. ${YACC} ${YFLAGS} ${.IMPSRC}
  150. ${CC} ${CFLAGS} -c y.tab.c
  151. rm -f y.tab.c
  152. mv y.tab.o ${.TARGET}
  153. ${CTFCONVERT_CMD}
  154. .l.o:
  155. ${LEX} ${LFLAGS} ${.IMPSRC}
  156. ${CC} ${CFLAGS} -c lex.yy.c
  157. rm -f lex.yy.c
  158. mv lex.yy.o ${.TARGET}
  159. ${CTFCONVERT_CMD}
  160. .y.c:
  161. ${YACC} ${YFLAGS} ${.IMPSRC}
  162. mv y.tab.c ${.TARGET}
  163. .l.c:
  164. ${LEX} ${LFLAGS} ${.IMPSRC}
  165. mv lex.yy.c ${.TARGET}
  166. .c.a:
  167. ${CC} ${CFLAGS} -c ${.IMPSRC}
  168. ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
  169. rm -f ${.PREFIX}.o
  170. .f.a:
  171. ${FC} ${FFLAGS} -c ${.IMPSRC}
  172. ${AR} ${ARFLAGS} ${.TARGET} ${.PREFIX}.o
  173. rm -f ${.PREFIX}.o
  174. .else
  175. # non-Posix rule set
  176. .sh:
  177. cp -fp ${.IMPSRC} ${.TARGET}
  178. chmod a+x ${.TARGET}
  179. .c.ln:
  180. ${LINT} ${LINTOBJFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC} || \
  181. touch ${.TARGET}
  182. .cc.ln .C.ln .cpp.ln .cxx.ln:
  183. ${LINT} ${LINTOBJFLAGS} ${CXXFLAGS:M-[DIU]*} ${.IMPSRC} || \
  184. touch ${.TARGET}
  185. .c:
  186. ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
  187. ${CTFCONVERT_CMD}
  188. .c.o:
  189. ${CC} ${CFLAGS} -c ${.IMPSRC}
  190. ${CTFCONVERT_CMD}
  191. .cc .cpp .cxx .C:
  192. ${CXX} ${CXXFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
  193. .cc.o .cpp.o .cxx.o .C.o:
  194. ${CXX} ${CXXFLAGS} -c ${.IMPSRC}
  195. .m.o:
  196. ${OBJC} ${OBJCFLAGS} -c ${.IMPSRC}
  197. ${CTFCONVERT_CMD}
  198. .p.o:
  199. ${PC} ${PFLAGS} -c ${.IMPSRC}
  200. ${CTFCONVERT_CMD}
  201. .e .r .F .f:
  202. ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} \
  203. -o ${.TARGET}
  204. .e.o .r.o .F.o .f.o:
  205. ${FC} ${RFLAGS} ${EFLAGS} ${FFLAGS} -c ${.IMPSRC}
  206. .S.o:
  207. ${CC} ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC}
  208. ${CTFCONVERT_CMD}
  209. .asm.o:
  210. ${CC} -x assembler-with-cpp ${CFLAGS} ${ACFLAGS} -c ${.IMPSRC}
  211. ${CTFCONVERT_CMD}
  212. .s.o:
  213. ${AS} ${AFLAGS} -o ${.TARGET} ${.IMPSRC}
  214. ${CTFCONVERT_CMD}
  215. # XXX not -j safe
  216. .y.o:
  217. ${YACC} ${YFLAGS} ${.IMPSRC}
  218. ${CC} ${CFLAGS} -c y.tab.c -o ${.TARGET}
  219. rm -f y.tab.c
  220. ${CTFCONVERT_CMD}
  221. .l.o:
  222. ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
  223. ${CC} ${CFLAGS} -c ${.PREFIX}.tmp.c -o ${.TARGET}
  224. rm -f ${.PREFIX}.tmp.c
  225. ${CTFCONVERT_CMD}
  226. # XXX not -j safe
  227. .y.c:
  228. ${YACC} ${YFLAGS} ${.IMPSRC}
  229. mv y.tab.c ${.TARGET}
  230. .l.c:
  231. ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.TARGET}
  232. .s.out .c.out .o.out:
  233. ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET}
  234. ${CTFCONVERT_CMD}
  235. .f.out .F.out .r.out .e.out:
  236. ${FC} ${EFLAGS} ${RFLAGS} ${FFLAGS} ${LDFLAGS} ${.IMPSRC} \
  237. ${LDLIBS} -o ${.TARGET}
  238. rm -f ${.PREFIX}.o
  239. ${CTFCONVERT_CMD}
  240. # XXX not -j safe
  241. .y.out:
  242. ${YACC} ${YFLAGS} ${.IMPSRC}
  243. ${CC} ${CFLAGS} ${LDFLAGS} y.tab.c ${LDLIBS} -ly -o ${.TARGET}
  244. rm -f y.tab.c
  245. ${CTFCONVERT_CMD}
  246. .l.out:
  247. ${LEX} -t ${LFLAGS} ${.IMPSRC} > ${.PREFIX}.tmp.c
  248. ${CC} ${CFLAGS} ${LDFLAGS} ${.PREFIX}.tmp.c ${LDLIBS} -ll -o ${.TARGET}
  249. rm -f ${.PREFIX}.tmp.c
  250. ${CTFCONVERT_CMD}
  251. # FreeBSD build pollution. Hide it in the non-POSIX part of the ifdef.
  252. __MAKE_CONF?=/etc/make.conf
  253. .if exists(${__MAKE_CONF})
  254. .include "${__MAKE_CONF}"
  255. .endif
  256. .if defined(__MAKE_SHELL) && !empty(__MAKE_SHELL)
  257. SHELL= ${__MAKE_SHELL}
  258. .SHELL: path=${__MAKE_SHELL}
  259. .endif
  260. # Default executable format
  261. # XXX hint for bsd.port.mk
  262. OBJFORMAT?= elf
  263. # Tell bmake to expand -V VAR by default
  264. .MAKE.EXPAND_VARIABLES= yes
  265. .if !defined(.PARSEDIR)
  266. # We are not bmake, which is more aggressive about searching .PATH
  267. # It is sometime necessary to curb its enthusiasm with .NOPATH
  268. # The following allows us to quietly ignore .NOPATH when not using bmake.
  269. .NOTMAIN: .NOPATH
  270. .NOPATH:
  271. # Toggle on warnings
  272. .WARN: dirsyntax
  273. .endif
  274. .endif
  275. .include <bsd.compat.mk>
  276. .include <bsd.cpu.mk>