|
|
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.