makefile.in 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. #ifdef COMMENT
  2. ##############################################################################
  3. #
  4. # This Makefile has been completely re-vamped. Two reasons, first to allow
  5. # for a full compile before installation, hence allowing us to make a binary
  6. # distribution without installing and second to allow proper dependancy trees
  7. # for the different versions of the library.
  8. #
  9. # As an aside, it would be useful if I could avoid GNU-make constucts.
  10. #
  11. ##############################################################################
  12. #endif
  13. # Defaults, generic C
  14. ARFLAGS =r
  15. CC =%CC%
  16. CFLAGS =%CFLAGS%
  17. LDFLAGS =
  18. MAKEARG =CC='$(CC)' CFLAGS='$(CFLAGS)' LDFLAGS='$(LDFLAGS)' \
  19. PREFIX=$(PREFIX) LIBDIR='$(LIBDIR)' \
  20. BINDIR='$(BINDIR)' ANSI='$(ANSI)'
  21. MAKEC=$(MAKE) -C
  22. MAKEX=
  23. # This is only allowed on Linux because make needs to know how to look
  24. # inside an archive to get the last modified times of the component .o
  25. # files. This should be fine for Linux, but it won't be for AIX etc.
  26. # Unfortunatly it's even _required_ for linux because some versions
  27. # have a broken standard ar command. Ie they barf if given something
  28. # they think is not an a.out.
  29. #ifdef __linux__
  30. AR=ar86
  31. #endif
  32. #ifdef __GNUC__
  33. CC =%CC%
  34. #ifdef GCCDB
  35. WALL =-Wall -Wtraditional -Wshadow -Wpointer-arith \
  36. -Wcast-qual -Wcast-align -Wconversion -Waggregate-return \
  37. -Wstrict-prototypes -Wmissing-prototypes -Wredundant-decls \
  38. -Wnested-externs -Winline
  39. CFLAGS =$(GCCFLAG) $(WALL) -O2 -g
  40. #else
  41. WALL =-Wall -Wstrict-prototypes
  42. CFLAGS =$(GCCFLAG) -O2 -fno-strict-aliasing
  43. #endif
  44. #endif
  45. #ifndef GNUMAKE
  46. MAKEC=sh makec
  47. MAKEX=makec
  48. #endif
  49. #ifdef __minix
  50. # Minix make doesn't understand -C, cc runs out of memory with the headers.
  51. MAKEC=ash makec
  52. MAKEX=makec
  53. CFLAGS=-O -m -w -DPOSIX_HEADERS_MISSING -DVERY_SMALL_MEMORY
  54. #endif
  55. #ifdef __BCC__
  56. ANSI =-ansi
  57. #ifdef __AS386_32__
  58. CFLAGS =-Ml
  59. LDFLAGS =-Ml -s
  60. #else
  61. CFLAGS =-O
  62. LDFLAGS =-s -H10000
  63. BCCARCH =
  64. #endif
  65. #endif
  66. # Apple cpp-precomp 6.14 (devkit-213/devkit_tools-214) cannot
  67. # handle the QUOT macro in bcc. It puts a space in /usr so that
  68. # it becomes / usr
  69. #ifdef __APPLE__
  70. CFLAGS += -no-cpp-precomp
  71. #endif
  72. # Install files with the userid of the currently running process.
  73. INDAT=-m 644
  74. INEXE=-m 755 -s
  75. INSCR=-m 755
  76. #ifdef __CYGWIN__
  77. EXE=.exe
  78. #else
  79. EXE=
  80. #endif
  81. #ifdef GNUMAKE
  82. all: check_config bcc86 cpp unproto copt as86 ar86 ld86 objdump86 \
  83. library lib-bsd alt-libs elksemu
  84. install: check_config install-bcc install-man \
  85. install-lib install-emu
  86. install-all: install install-other
  87. #else
  88. all: check_config bcc86 cpp unproto copt as86 ar86 ld86 objdump86
  89. @echo
  90. @echo 'NOTE: To build the libraries you need GNU-Make.'
  91. @echo ' They are available precompiled in the Dev86clb-X.X.X.zip file.'
  92. install install-all: check_config install-bcc install-man
  93. @echo
  94. @echo 'NOTE: To build the libraries you need GNU-Make.'
  95. @echo ' They are available precompiled in the Dev86clb-X.X.X.zip file.'
  96. #endif
  97. ##############################################################################
  98. LIBARGS= CC=ncc "CCFLAGS=-O" AR=$(AR) ARFLAGS=$(ARFLAGS)
  99. LIB3ARGS= CC=ncc AR=$(AR) ARFLAGS=$(ARFLAGS)
  100. # Season in the top makefile
  101. ELKSSRC= %ELKSSRC%
  102. PREFIX= %PREFIX%
  103. BINDIR= %BINDIR%
  104. LIBDIR= %LIBDIR%
  105. INCLDIR= %INCLDIR%
  106. ASLDDIR= %ASLDDIR%
  107. MANDIR= %MANDIR%
  108. #ifdef GNUMAKE
  109. export ELKSSRC
  110. #endif
  111. DISTBIN= $(DIST)$(BINDIR)
  112. DISTLIB= $(DIST)$(LIBDIR)
  113. DISTASLD=$(DIST)$(ASLDDIR)
  114. DISTINCL=$(DIST)$(INCLDIR)
  115. # Others to install
  116. OTHERS= tests dis88 doselks bootblocks
  117. CLEANLIST= bcc as ar ld cpp unproto copt libc elksemu libbsd $(OTHERS)
  118. ##############################################################################
  119. bindir: $(MAKEX)
  120. @mkdir -p bin lib lib/i386
  121. @rm -f include
  122. @ln -s libc/include include 2>/dev/null || true
  123. #ifndef GNUMAKE
  124. @rm -f include/linuxmt include/arch || true
  125. @ln -s ../kinclude/linuxmt include/linuxmt 2>/dev/null || true
  126. @ln -s ../kinclude/arch include/arch 2>/dev/null || true
  127. #endif
  128. bcc86: bindir versions
  129. $(MAKEC) bcc $(MAKEARG) BCCARCH='$(BCCARCH)' bcc ncc bcc-cc1
  130. cp -p bcc/bcc$(EXE) bin/Bcc$(EXE)
  131. cp -p bcc/ncc$(EXE) bin/ncc$(EXE)
  132. cp -p bcc/bcc-cc1$(EXE) lib/bcc-cc1$(EXE)
  133. cpp: bindir
  134. $(MAKEC) cpp $(MAKEARG) bcc-cpp
  135. cp -p cpp/bcc-cpp$(EXE) lib/bcc-cpp$(EXE)
  136. unproto: bindir
  137. $(MAKEC) unproto $(MAKEARG) unproto
  138. cp -p unproto/unproto$(EXE) lib/unproto$(EXE)
  139. copt: bindir
  140. $(MAKEC) copt $(MAKEARG) copt
  141. cp -p copt/copt$(EXE) lib/copt$(EXE)
  142. cp -p copt/rules.* lib/.
  143. cp -p copt/rules.start lib/i386/.
  144. cp -p copt/rules.386 lib/i386/.
  145. cp -p copt/rules.end lib/i386/.
  146. as86: bindir versions
  147. $(MAKEC) as $(MAKEARG) all
  148. cp -p as/as86$(EXE) bin/as86$(EXE)
  149. cp -p as/as86_encap bin/as86_encap
  150. ar86: bindir
  151. $(MAKEC) ar $(MAKEARG) all
  152. cp -p ar/ar86$(EXE) bin/ar86$(EXE)
  153. ld86: bindir versions
  154. $(MAKEC) ld $(MAKEARG) ld86
  155. cp -p ld/ld86$(EXE) bin/ld86$(EXE)
  156. ld86r: bindir
  157. $(MAKEC) ld $(MAKEARG) ld86r
  158. cp -p ld/ld86r$(EXE) bin/ld86r$(EXE)
  159. objdump86: bindir
  160. $(MAKEC) ld $(MAKEARG) objdump86
  161. cp -p ld/objdump86$(EXE) bin/objdump86$(EXE)
  162. #ifndef __AS386_16__
  163. #ifdef __elksemu_works__
  164. elksemu: bindir
  165. $(MAKEC) elksemu elksemu
  166. cp -p elksemu/elksemu bin/elksemu
  167. #else
  168. try_elksemu: bindir
  169. $(MAKEC) elksemu CC='ncc' elksemu
  170. cp -p elksemu/elksemu bin/elksemu
  171. #endif
  172. #endif
  173. install-bcc: bcc86 cpp unproto copt as86 ar86 ld86 objdump86
  174. install -d $(DISTBIN) $(DISTLIB)
  175. install $(INEXE) bin/Bcc$(EXE) $(DISTBIN)/bcc$(EXE)
  176. install $(INEXE) bin/as86$(EXE) $(DISTASLD)/as86$(EXE)
  177. install $(INEXE) bin/ld86$(EXE) $(DISTASLD)/ld86$(EXE)
  178. install $(INEXE) bin/ar86$(EXE) $(DISTBIN)/ar86$(EXE)
  179. install $(INEXE) bin/objdump86$(EXE) $(DISTBIN)/objdump86$(EXE)
  180. install $(INEXE) bin/objdump86$(EXE) $(DISTBIN)/nm86$(EXE)
  181. install $(INEXE) bin/objdump86$(EXE) $(DISTBIN)/size86$(EXE)
  182. install $(INSCR) bin/as86_encap $(DISTLIB)/as86_encap
  183. install $(INEXE) lib/bcc-cc1$(EXE) $(DISTLIB)/bcc-cc1$(EXE)
  184. install $(INEXE) lib/bcc-cpp$(EXE) $(DISTLIB)/bcc-cpp$(EXE)
  185. install $(INEXE) lib/unproto$(EXE) $(DISTLIB)/unproto$(EXE)
  186. install $(INEXE) lib/copt$(EXE) $(DISTLIB)/copt$(EXE)
  187. install $(INDAT) lib/rules.* $(DISTLIB)
  188. install -d $(DISTLIB)/i386
  189. install $(INDAT) lib/i386/rules.* $(DISTLIB)/i386
  190. # NB: This doesn't install as a suid root, that's ok though.
  191. install-emu: elksemu
  192. #ifdef __elksemu_works__
  193. install -d $(DISTBIN)
  194. install $(INEXE) bin/elksemu $(DISTBIN)/elksemu
  195. #endif
  196. install-man:
  197. -$(MAKEC) man MANDIR=$(DIST)$(MANDIR) install
  198. install-lib: lib/lib0-done lib/lib2-done lib/lib1-done
  199. $(MAKEC) libc $(LIBARGS) DISTINCL=$(DISTINCL) install_incl
  200. install $(INDAT) lib/crt0.o $(DISTLIB)/crt0.o
  201. install $(INDAT) lib/libc.a $(DISTLIB)/libc.a
  202. install $(INDAT) lib/libc_f.a $(DISTLIB)/libc_f.a
  203. install $(INDAT) lib/libc_s.a $(DISTLIB)/libc_s.a
  204. install $(INDAT) lib/libbsd.a $(DISTLIB)/libbsd.a
  205. install $(INDAT) lib/libdos.a $(DISTLIB)/libdos.a
  206. install $(INDAT) lib/libbcc.a $(DISTLIB)/libbcc.a
  207. #ifndef __AS386_16__
  208. install -d $(DISTLIB)/i386
  209. install $(INDAT) lib/i386/crt0.o $(DISTLIB)/i386/crt0.o
  210. install $(INDAT) lib/i386/libc.a $(DISTLIB)/i386/libc.a
  211. #endif
  212. lib/lib0-done:
  213. $(MAKE) -f make.fil library
  214. lib/lib1-done:
  215. $(MAKE) -f make.fil alt-libs
  216. lib/lib2-done:
  217. $(MAKE) -f make.fil lib-bsd
  218. all-libs: library lib-bsd alt-libs
  219. @:
  220. library: bindir
  221. test -f bin/ncc
  222. $(MAKEC) libc $(LIBARGS) PLATFORM=i86-ELKS
  223. cp -p libc/crt0.o libc/libc.a libc/libbcc.a lib/.
  224. sh libcompat lib/libc.a
  225. @touch lib/lib0-done
  226. lib-bsd: bindir
  227. test -f bin/ncc
  228. $(MAKEC) libbsd $(LIBARGS)
  229. cp -p libbsd/libbsd.a lib/libbsd.a
  230. sh libcompat lib/libbsd.a
  231. @touch lib/lib2-done
  232. #ifdef __AS386_16__
  233. alt-libs: lib-stand lib-dos lib-fast
  234. @touch lib/lib1-done
  235. #else
  236. alt-libs: lib-stand lib-dos lib-386 lib-fast
  237. @touch lib/lib1-done
  238. #endif
  239. lib-fast: bindir
  240. test -f bin/ncc
  241. $(MAKEC) libc $(LIBARGS) PLATFORM=i86-FAST
  242. cp -p libc/libc_f.a lib/libc_f.a
  243. sh libcompat lib/libc_f.a
  244. lib-stand: bindir
  245. test -f bin/ncc
  246. $(MAKEC) libc $(LIBARGS) PLATFORM=i86-BIOS
  247. cp -p libc/libc_s.a lib/libc_s.a
  248. sh libcompat lib/libc_s.a
  249. lib-dos: bindir
  250. test -f bin/ncc
  251. $(MAKEC) libc $(LIBARGS) PLATFORM=i86-DOS
  252. cp -p libc/libdos.a lib/libdos.a
  253. sh libcompat lib/libdos.a
  254. lib-386: bindir
  255. test -f bin/ncc
  256. $(MAKEC) libc $(LIB3ARGS) PLATFORM=i386-BCC
  257. cp -p libc/crt3.o lib/i386/crt0.o
  258. cp -p libc/libc3.a lib/i386/libc.a
  259. sh libcompat lib/i386/libc.a
  260. ##############################################################################
  261. #ifdef GNUMAKE
  262. check_config: $(MAKEX)
  263. $(MAKEC) libc .config.dir
  264. config: $(MAKEX)
  265. $(MAKEC) libc config
  266. #else
  267. check_config: ;
  268. config: ;
  269. #endif
  270. makec:
  271. echo 'cd $$1 ; shift ; make "$$@"' > makec
  272. chmod +x makec
  273. versions: bcc/version.h
  274. bcc/version.h: Makefile
  275. echo '#define VERSION "'"$(VERSION)"'"' > bcc/version.h
  276. echo '#define VERSION "'"$(VERSION)"'"' > as/version.h
  277. echo '#define VERSION "'"$(VERSION)"'"' > bootblocks/version.h
  278. echo '#define VERSION "'"$(VERSION)"'"' > ld/version.h
  279. VER=$(VERSION) ; \
  280. echo "#define VER_MAJ $${VER%%.*}" >> bcc/version.h ; \
  281. VER="$${VER#*.}" ; \
  282. echo "#define VER_MIN $${VER%.*}" >> bcc/version.h ; \
  283. echo "#define VER_PAT $${VER#*.}" >> bcc/version.h
  284. ##############################################################################
  285. install-other: other
  286. @for i in $(OTHERS) ; do \
  287. $(MAKEC) $$i BCC=ncc DIST=$(DIST) PREFIX=$(PREFIX) install || exit 1 ; \
  288. done
  289. other: versions
  290. @for i in $(OTHERS) ; do \
  291. $(MAKEC) $$i BCC=ncc DIST=$(DIST) PREFIX=$(PREFIX) || exit 1; \
  292. done
  293. ##############################################################################
  294. clean:
  295. -@for i in $(CLEANLIST) ; do $(MAKEC) $$i $@ ; true ; done
  296. realclean:
  297. -@for i in $(CLEANLIST) ; do $(MAKEC) $$i $@ ; true ; done
  298. rm -rf bin lib
  299. rm -f include
  300. rm -f makec
  301. rm -f `find $(CLEANLIST) -type l -print`
  302. rm -f bcc/version.h
  303. rm -f as/version.h
  304. rm -f ld/version.h
  305. rm -f bootblocks/version.h
  306. ##############################################################################