|
|
1.1 root 1: # build/Common.gmake
2: #
3: # Global build system setup file
4: #
5: # $Id: Common.gmake,v 1.30 2004/12/12 09:41:44 deuce Exp $
6: #
7: #############################################################################
8: # @format.tab-size 4 (Plain Text/Source Code File Header) #
9: # @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) #
10: # #
11: # Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html #
12: # #
13: # This program is free software; you can redistribute it and/or #
14: # modify it under the terms of the GNU General Public License #
15: # as published by the Free Software Foundation; either version 2 #
16: # of the License, or (at your option) any later version. #
17: # See the GNU General Public License for more details: gpl.txt or #
18: # http://www.fsf.org/copyleft/gpl.html #
19: # #
20: # Anonymous FTP access to the most recent released source is available at #
21: # ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net #
22: # #
23: # Anonymous CVS access to the development source and modification history #
24: # is available at cvs.synchro.net:/cvsroot/sbbs, example: #
25: # cvs -d :pserver:[email protected]:/cvsroot/sbbs login #
26: # (just hit return, no password is necessary) #
27: # cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src #
28: # #
29: # For Synchronet coding style and modification guidelines, see #
30: # http://www.synchro.net/source.html #
31: # #
32: # You are encouraged to submit any modifications (preferably in Unix diff #
33: # format) via e-mail to [email protected] #
34: # #
35: # Note: If this box doesn't appear square, then you need to fix your tabs. #
36: #############################################################################
37: # #
38: #############################################################################
39: # #
40: # Common macro setup for GNU make #
41: # #
42: # Common Build Macros REQUIRED: #
43: # SRC_ROOT - *MUST* be set to the src dir #
44: # #
45: # Common Build Macros Used: #
46: # DEBUG - Create a debug build #
47: # RELEASE - Create a release build #
48: # (Mutually exclusive, if both are set, RELEASE #
49: # is cleared) #
50: # DONT_CLOBBER_CC - Do not change the default setting of CC #
51: # OBJPATH_SUFFIX - Suffix appended to OBJPATH usefull for compiling #
52: # different options of the same source file #
53: # #
54: # Common Build Macros Defined: #
55: # DELETE - Delete files (Preferrably verbose) #
56: # MTOBJODIR - Object output dir #
57: # OBJODIR - Object output dir #
58: # LIBODIR - Library output dir #
59: # EXEODIR - Executable output dir #
60: # DEBUG - Set for debug builds #
61: # RELEASE - Set for release builds #
62: # One of DEBUG or RELEASE is always set! #
63: # QUIET - Target command prefix to show/not show commands #
64: # (Toggled off by setting VERBOSE) #
65: # CFLAGS - Common C and C++ compiler flags #
66: # CCFLAGS - C specific compiler flags #
67: # CXXFLAGS - C++ specific compiler flags #
68: # LDFLAGS - Linker flags #
69: # CC - C compiler #
70: # CXX - C++ compiler #
71: # EXEFILE - Executable file extension (Includes .) #
72: # OFILE - Object file extension (Includes .) #
73: # SOFILE - Shared object (DLL) file extension (Includes .) #
74: # LIBFILE - Static library file extension (Include .) #
75: # LIBPREFIX - Prefix to library filename #
76: # LIBS - Library names (Appropriate for dependencies) #
77: # LIB_LDFLAGS - Libraries appropriate for link command-line usage #
78: # COMPILE_MSG - Message saying a target is being compiled #
79: # DIRSEP - The directory seperator this system likes most #
80: # VERSION - Synchronet version number in MAJOR.MINOR format #
81: # (Numeric ONLY) #
82: # OUTPUT - Compiler flag specifying output filename #
83: # LOUTPUT - Linker flag specifying output filename #
84: # XPDEV_SRC - Path to xpdev #
85: # UIFC_SRC - Path to uifc #
86: # CIOLIB_SRC - Path to ciolib #
87: # SMBLIB_SRC - Path to smblib #
88: # MT_CFLAGS - CFLAGS for building MT objects #
89: # MT_LDFLAGS - LDFLAGS for linking MT targets #
90: # UL_PRE - Use Library prefix (*nix is -l) #
91: # UL_SUF - Use Library siffix (bcc is .lib) #
92: # #
93: # Common Targets Defined: #
94: # Implicit C and C++ targets #
95: # "clean" target #
96: # Output directory targets #
97: # #
98: #############################################################################
99:
100: # Set VERSION
101: ifndef VERSION
102: VERSION := 3.12
103: endif
104:
105: # Put local (optional) macro definitions in localdefs.mk
106: -include localdefs.mk
107: -include $(SRC_ROOT)/build/localdefs.mk
108:
109: # Set DEBUG
110: ifdef DEBUG
111: ifdef RELEASE
112: undef RELEASE
113: endif
114: endif
115:
116: ifndef DEBUG
117: ifndef RELEASE
118: DEBUG := 1
119: endif
120: endif
121:
122: # VERBOSE/QUIET
123: ifndef VERBOSE
124: QUIET := @
125: endif
126:
127: # Compiler-specific options
128: CFLAGS += -MMD
129: ifdef BUILD_DEPENDS
130: ifdef DONT_CLOBBER_CC
131: CC ?= gcc
132: else
133: CC := gcc
134: endif
135: CCPRE := $(CC)
136: CC := $(SRC_ROOT)/build/mkdep -a
137: CXX := $(SRC_ROOT)/build/mkdep -a
138: LD := echo
139: COMPILE_MSG := Depending
140: AR := echo
141: RANLIB := echo
142: else
143: ifdef DONT_CLOBBER_CC
144: CC ?= gcc
145: else
146: CC := gcc
147: endif
148: CCPRE := $(CC)
149: CXX ?= g++
150: LD ?= ld
151: COMPILE_MSG := Compiling
152: AR ?= ar
153: RANLIB ?= ranlib
154: endif
155:
156: ifdef DEBUG
157: BUILD = debug
158: else
159: BUILD = release
160: endif
161: BUILDPATH ?= $(BUILD)
162:
163: # Get OS
164: ifndef os
165: os := $(shell uname)
166: endif
167: os := $(shell echo $(os) | tr '[A-Z]' '[a-z]' | tr ' ' '_')
168:
169: machine := $(shell if uname -m | egrep -v "(i[3456789]|x)86" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; fi)
170: ifeq ($(machine),sun4u)
171: CFLAGS += -D__BIG_ENDIAN__
172: endif
173: ifeq ($(machine),)
174: machine := $(os)
175: else
176: machine := $(os).$(machine)
177: endif
178:
179: LIBODIR := $(CCPRE).$(machine).lib.$(BUILDPATH)
180: OBJODIR := $(CCPRE).$(machine).obj.$(BUILDPATH)
181: MTOBJODIR := $(CCPRE).$(machine).obj.$(BUILDPATH)-mt
182: EXEODIR := $(CCPRE).$(machine).exe.$(BUILDPATH)
183: LDFLAGS += -L$(LIBODIR)
184:
185: ifeq ($(os),openbsd)
186: DELETE := rm -f
187: else
188: ifeq ($(os),sunos)
189: DELETE := rm -f
190: else
191: DELETE = rm -fv
192: endif
193: endif
194:
195: LIBPREFIX := lib
196: DIRSEP := /
197: OFILE := .o
198: EXEFILE :=
199: SOFILE := .so
200: LIBFILE := .a
201: UL_PRE := -l
202: UL_SUF :=
203:
204: OUTPUT := -o
205: LOUTPUT := -o
206:
207: ifeq ($(os),openbsd)
208: SOFILE := $(SOFILE).$(VERSION)
209: else
210: ifeq ($(os),darwin)
211: SOFILE = .dylib
212: endif
213: endif
214:
215: # OS Specific Flags
216: ifeq ($(os),sunos) # Solaris
217: CFLAGS += -D__solaris__ -DNEEDS_DAEMON -DNEEDS_FORKPTY -DNEEDS_SETENV -DNEEDS_CFMAKERAW
218: endif
219: ifeq ($(os),netbsd) # NetBSD
220: CFLAGS += -D__unix__ -I/usr/pkg/include
221: endif
222: ifeq ($(os),darwin)
223: CFLAGS += -D__unix__ -fno-common -D__DARWIN__
224: LDFLAGS += -lm
225: endif
226:
227: # PThread-specific flags
228: ifeq ($(os),linux) # Linux
229: ifndef THREADS_ACTUALLY_WORK
230: CFLAGS += -D_THREAD_SUID_BROKEN
231: endif
232: endif
233: MT_CFLAGS += -D_THREAD_SAFE -D_REENTRANT
234: ifeq ($(os),freebsd) # FreeBSD
235: MT_CFLAGS += -DUSE_XP_SEMAPHORES
236: MT_LDFLAGS += -pthread
237: XP_SEM := 1
238: else
239: ifeq ($(os),openbsd) # OpenBSD
240: MT_CFLAGS += -DUSE_XP_SEMAPHORES
241: MT_LDFLAGS += -pthread
242: XP_SEM := 1
243: else
244: ifeq ($(os),netbsd) # NetBSD
245: MT_CFLAGS += -DUSE_XP_SEMAPHORES
246: MT_LDFLAGS += -L/usr/pkg/lib -lpthread
247: XP_SEM := 1
248: else
249: ifeq ($(os),qnx) # QNX
250: else
251: ifeq ($(os),darwin) # Darwin/Mac OS X
252: CFLAGS += -D__unix__
253: MT_CFLAGS += -DUSE_XP_SEMAPHORES -D__DARWIN__
254: MT_LDFLAGS += -lpthread
255: XP_SEM := 1
256: else
257: ifeq ($(os),sunos) # Solaris
258: XP_SEM := 1
259: MT_CFLAGS += -D_POSIX_PTHREAD_SEMANTICS
260: MT_CFLAGS += -DUSE_XP_SEMAPHORES
261: MT_LDFLAGS += -lpthread
262: else # Linux / Other UNIX
263: XP_SEM := 1
264: MT_CFLAGS += -DUSE_XP_SEMAPHORES
265: MT_LDFLAGS += -lpthread
266: endif
267: endif
268: endif
269: endif
270: endif
271: endif
272:
273: # Paths
274: XPDEV_SRC := $(SRC_ROOT)$(DIRSEP)xpdev
275: CIOLIB_SRC := $(SRC_ROOT)$(DIRSEP)conio
276: SMBLIB_SRC := $(SRC_ROOT)$(DIRSEP)smblib
277: UIFC_SRC := $(SRC_ROOT)$(DIRSEP)uifc
278:
279: # Pull in lib-specific flags
280: include $(CIOLIB_SRC)$(DIRSEP)Common.make
281: include $(UIFC_SRC)$(DIRSEP)Common.make
282: include $(SMBLIB_SRC)$(DIRSEP)Common.make
283: include $(XPDEV_SRC)$(DIRSEP)Common.make
284: -include $(CIOLIB_SRC)$(DIRSEP)Common.gmake
285: -include $(UIFC_SRC)$(DIRSEP)Common.gmake
286: -include $(SMBLIB_SRC)$(DIRSEP)Common.gmake
287: -include $(XPDEV_SRC)$(DIRSEP)Common.gmake
288:
289: ifdef DEBUG
290: CFLAGS += -ggdb
291: CFLAGS += -D_DEBUG
292: else # RELEASE
293: CFLAGS := -O3 $(CFLAGS)
294: endif
295:
296: -include targets.mk
297: -include $(SRC_ROOT)/build/rules.mk
298: -include objects.mk # defines $(OBJS)
299:
300: # Implicit C Compile Rule
301: $(OBJODIR)/%$(OFILE) : %.c $(BUILD_DEPENDS)
302: @echo $(COMPILE_MSG) $<
303: $(QUIET)$(CC) $(CFLAGS) $(CCFLAGS) -o $@ -c $<
304:
305: # Implicit C++ Compile Rule
306: $(OBJODIR)/%$(OFILE) : %.cpp $(BUILD_DEPENDS)
307: @echo $(COMPILE_MSG) $<
308: $(QUIET)$(CXX) $(CFLAGS) $(CXXFLAGS) -o $@ -c $<
309:
310: # Implicit MT C Compile Rule
311: $(MTOBJODIR)/%$(OFILE) : %.c $(BUILD_DEPENDS)
312: @echo $(COMPILE_MSG) $<
313: $(QUIET)$(CC) $(CFLAGS) $(CCFLAGS) $(MT_CFLAGS) -o $@ -c $<
314:
315: # Implicit MT C++ Compile Rule
316: $(MTOBJODIR)/%$(OFILE) : %.cpp $(BUILD_DEPENDS)
317: @echo $(COMPILE_MSG) $<
318: $(QUIET)$(CXX) $(CFLAGS) $(CXXFLAGS) $(MT_CFLAGS) -o $@ -c $<
319:
320: depend:
321: $(QUIET)$(DELETE) $(OBJODIR)/.depend
322: $(QUIET)$(DELETE) $(MTOBJODIR)/.depend
323: $(QUIET)$(DELETE) $(LIBODIR)/.depend
324: $(QUIET)$(DELETE) $(EXEODIR)/.depend
325: $(QUIET)$(MAKE) BUILD_DEPENDS=FORCE
326:
327: FORCE:
328:
329: -include $(MTOBJODIR)/.depend
330: -include $(OBJODIR)/.depend
331: -include $(LIBODIR)/.depend
332: -include $(EXEODIR)/.depend
333: -include $(MTOBJODIR)/*.d
334: -include $(OBJODIR)/*.d
335: -include $(LIBODIR)/*.d
336: -include $(EXEODIR)/*.d
337:
338: $(XPDEV_LIB): xpdev
339: xpdev:
340: $(MAKE) -C $(XPDEV_SRC) lib
341:
342: $(XPDEV-MT_LIB): xpdev-mt
343: xpdev-mt:
344: $(MAKE) -C $(XPDEV_SRC) mtlib
345:
346: $(SMBLIB): smblib
347: smblib:
348: $(MAKE) -C $(SMBLIB_SRC) lib
349:
350: $(CIOLIB-MT): ciolib-mt
351: ciolib-mt:
352: $(MAKE) -C $(CIOLIB_SRC) mtlib
353:
354: $(UIFCLIB): uifc
355: uifc:
356: $(MAKE) -C $(UIFC_SRC) lib
357:
358: $(UIFCLIB-MT): uifc-mt
359: uifc-mt:
360: $(MAKE) -C $(UIFC_SRC) mtlib
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.