Annotation of sbbs/src/build/common.gmake, revision 1.1

1.1     ! root        1: # build/Common.gmake
        !             2: #
        !             3: # Global build system setup file
        !             4: #
        !             5: # $Id: Common.gmake,v 1.60 2006/12/29 02:54:32 rswindell 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 2006 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: #  PROFILE                     - Generates binaries which generate gprof details               #
        !            48: #                                        (GCC/DEBUG only)                                                                              #
        !            49: #  UPROFILE                    - Generates binaries which generate profile-driven              #
        !            50: #                                        optimization data                                                                             #
        !            51: #                                        (GCC/DEBUG only)                                                                              #
        !            52: #  GCOV                                - Generates binaries that produce gcov data                             #
        !            53: #                                        (GCC/DEBUG only)                                                                              #
        !            54: #  RELEASE                     - Create a release build                                                                #
        !            55: #                                        (Mutually exclusive, if both are set, RELEASE                 #
        !            56: #                                              is cleared)                                                                                     #
        !            57: #  USE_UPROFILE                - Builds using information generated by UPROFILE.               #
        !            58: #                                        (RELEASE builds only)                                                                 #
        !            59: #  DONT_CLOBBER_CC     - Do not change the default setting of CC                               #
        !            60: #  OBJPATH_SUFFIX      - Suffix appended to OBJPATH usefull for compiling              #
        !            61: #                                        different options of the same source file                             #
        !            62: #  STATIC                      - Create a statically linked build if possible                  #
        !            63: #                                                                                                                                                      #
        !            64: # Common Build Macros Defined:                                                                                         #
        !            65: #  DELETE                      - Delete files (Preferrably verbose)                                    #
        !            66: #  MTOBJODIR           - Object output dir                                                                             #
        !            67: #  OBJODIR                     - Object output dir                                                                             #
        !            68: #  LIBODIR                     - Library output dir                                                                    #
        !            69: #  EXEODIR                     - Executable output dir                                                                 #
        !            70: #  DEBUG                       - Set for debug builds                                                                  #
        !            71: #  RELEASE                     - Set for release builds                                                                #
        !            72: #                                        One of DEBUG or RELEASE is always set!                                #
        !            73: #  QUIET                       - Target command prefix to show/not show commands               #
        !            74: #                                        (Toggled off by setting VERBOSE)                                              #
        !            75: #  CFLAGS                      - Common C and C++ compiler flags                                               #
        !            76: #  CCFLAGS                     - C specific compiler flags                                                             #
        !            77: #  CXXFLAGS                    - C++ specific compiler flags                                                   #
        !            78: #  LDFLAGS                     - Linker flags                                                                                  #
        !            79: #  CC                          - C compiler                                                                                    #
        !            80: #  CXX                         - C++ compiler                                                                                  #
        !            81: #  EXEFILE                     - Executable file extension (Includes .)                                #
        !            82: #  OFILE                       - Object file extension (Includes .)                                    #
        !            83: #  SOFILE                      - Shared object (DLL) file extension (Includes .)               #
        !            84: #  LIBFILE                     - Static library file extension (Include .)                             #
        !            85: #  LIBPREFIX           - Prefix to library filename                                                    #
        !            86: #  LIBS                                - Library names (Appropriate for dependencies)                  #
        !            87: #  LIB_LDFLAGS         - Libraries appropriate for link command-line usage             #
        !            88: #  COMPILE_MSG         - Message saying a target is being compiled                             #
        !            89: #  DIRSEP                      - The directory seperator this system likes most                #
        !            90: #  VERSION                     - Synchronet version number in MAJOR.MINOR format               #
        !            91: #                                        (Numeric ONLY)                                                                                #
        !            92: #  OUTPUT                      - Compiler flag specifying output filename                              #
        !            93: #  LOUTPUT                     - Linker flag specifying output filename                                #
        !            94: #  XPDEV_SRC           - Path to xpdev                                                                                 #
        !            95: #  UIFC_SRC                    - Path to uifc                                                                                  #
        !            96: #  CIOLIB_SRC          - Path to ciolib                                                                                #
        !            97: #  SMBLIB_SRC          - Path to smblib                                                                                #
        !            98: #  MT_CFLAGS           - CFLAGS for building MT objects                                                #
        !            99: #  MT_LDFLAGS          - LDFLAGS for linking MT targets                                                #
        !           100: #  UL_PRE                      - Use Library prefix (*nix is -l)                                               #
        !           101: #  UL_SUF                      - Use Library siffix (bcc is .lib)                                              #
        !           102: #                                                                                                                                                      #
        !           103: # Common Targets Defined:                                                                                                      #
        !           104: #  Implicit C and C++ targets                                                                                          #
        !           105: #  "clean" target                                                                                                                      # 
        !           106: #  Output directory targets                                                                                                    #
        !           107: #                                                                                                                                                      #
        !           108: #############################################################################
        !           109: 
        !           110: # Set VERSION
        !           111: ifndef VERSION
        !           112:  VERSION       :=      3.14
        !           113: endif
        !           114: 
        !           115: # Put local (optional) macro definitions in localdefs.mk
        !           116: -include localdefs.mk
        !           117: -include $(SRC_ROOT)/build/localdefs.mk
        !           118: 
        !           119: # Set DEBUG
        !           120: ifdef DEBUG
        !           121:  ifdef RELEASE
        !           122:   $(error Both DEBUG and RELEASE are defined)
        !           123:  endif
        !           124: endif
        !           125: 
        !           126: ifndef DEBUG
        !           127:  ifndef RELEASE
        !           128:   DEBUG        :=      1
        !           129:  endif
        !           130: endif
        !           131: 
        !           132: ifdef DEBUG
        !           133:  ifdef PROFILE
        !           134:   CFLAGS       +=      -pg
        !           135:   LDFLAGS      +=      -pg
        !           136:  endif
        !           137:  ifdef UPROFILE
        !           138:   CFLAGS       +=      -fprofile-generate
        !           139:   LDFLAGS      +=      -fprofile-generate
        !           140:  endif
        !           141:  ifdef GCOV
        !           142:   CFLAGS       +=      -fprofile-arcs -ftest-coverage
        !           143:   LDFLAGS      +=      -fprofile-arcs -ftest-coverage
        !           144:  endif
        !           145: else
        !           146:  ifdef USE_UPROFILE
        !           147:   CFLAGS       +=      -fprofile-use
        !           148:   LDFLAGS      +=      -fprofile-use
        !           149:  endif
        !           150: endif
        !           151: 
        !           152: # VERBOSE/QUIET
        !           153: ifndef VERBOSE
        !           154:  QUIET :=      @
        !           155: endif
        !           156: 
        !           157: # Compiler-specific options
        !           158: CFLAGS +=      -MMD
        !           159: ifdef BUILD_DEPENDS
        !           160:  ifdef DONT_CLOBBER_CC
        !           161:   CC                   ?=      gcc
        !           162:  else
        !           163:   CC                   :=      gcc
        !           164:  endif
        !           165:  CCPRE                 :=      $(CC)
        !           166:  CC                            :=      $(SRC_ROOT)/build/mkdep -a
        !           167:  CXX                   :=      $(SRC_ROOT)/build/mkdep -a
        !           168:  LD                            :=      echo
        !           169:  COMPILE_MSG   :=  Depending
        !           170:  AR                            :=      echo
        !           171:  RANLIB                        :=      echo
        !           172: else
        !           173:  ifdef DONT_CLOBBER_CC
        !           174:   CC                   ?=      gcc
        !           175:  else
        !           176:   CC                   :=      gcc
        !           177:  endif
        !           178:  CCPRE                 :=      $(CC)
        !           179:  CXX                   ?=      g++
        !           180:  LD                            ?=      ld
        !           181:  COMPILE_MSG   := Compiling
        !           182:  AR                            ?=      ar
        !           183:  RANLIB                        ?=      ranlib
        !           184: endif
        !           185: 
        !           186: ifdef DEBUG
        !           187:  BUILD =       debug
        !           188: else
        !           189:  BUILD =       release
        !           190: endif
        !           191: BUILDPATH      ?=      $(BUILD)
        !           192: 
        !           193: # Get OS
        !           194: ifndef os
        !           195:  os            :=      $(shell uname)
        !           196: endif
        !           197: os      :=     $(shell echo $(os) | tr '[A-Z]' '[a-z]' | tr ' ' '_')
        !           198: 
        !           199: machine                :=      $(shell if uname -m | egrep -v "(i[3456789]*|x)86" > /dev/null; then uname -m | tr "[A-Z]" "[a-z]" | tr " " "_" ; fi)
        !           200: ifeq ($(machine),sparc64)
        !           201:  CFLAGS +=      -D__BIG_ENDIAN__
        !           202: endif
        !           203: ifeq ($(machine),sun4u)
        !           204:  CFLAGS +=      -D__BIG_ENDIAN__
        !           205: endif
        !           206: ifeq ($(machine),power_macintosh)
        !           207:  CFLAGS +=      -D__BIG_ENDIAN__
        !           208: endif
        !           209: ifeq ($(machine),mac68k)
        !           210:  CFLAGS +=      -D__BIG_ENDIAN__
        !           211: endif
        !           212: ifeq ($(machine),)
        !           213:  machine       :=      $(os)
        !           214: else
        !           215:  machine       :=      $(os).$(machine)
        !           216: endif
        !           217: 
        !           218: LIBODIR :=     $(CCPRE).$(machine).lib.$(BUILDPATH)
        !           219: OBJODIR :=     $(CCPRE).$(machine).obj.$(BUILDPATH)
        !           220: MTOBJODIR :=   $(CCPRE).$(machine).obj.$(BUILDPATH)-mt
        !           221: EXEODIR :=     $(CCPRE).$(machine).exe.$(BUILDPATH)
        !           222: LDFLAGS        +=      -L$(LIBODIR)
        !           223: 
        !           224: ifeq ($(os),openbsd)
        !           225:  DELETE :=     rm -f
        !           226: else
        !           227:  ifeq ($(os),sunos)
        !           228:   DELETE :=    rm -f
        !           229:  else
        !           230:   DELETE       =       rm -fv
        !           231:  endif
        !           232: endif
        !           233: 
        !           234: LIBPREFIX      := lib
        !           235: DIRSEP         := /
        !           236: OFILE          := .o
        !           237: EXEFILE                :=
        !           238: SOFILE         := .so
        !           239: LIBFILE                := .a
        !           240: UL_PRE         :=      -l
        !           241: UL_SUF         :=      
        !           242: 
        !           243: OUTPUT         :=      -o
        !           244: LOUTPUT                :=      -o
        !           245: 
        !           246: ifdef STATIC
        !           247:  LDFLAGS       +=      -static
        !           248:  CFLAGS                +=      -DSTATIC_LINK
        !           249: endif
        !           250: 
        !           251: ifeq ($(os),openbsd)
        !           252:  SOFILE        :=      $(SOFILE).$(VERSION)
        !           253: else
        !           254:  ifeq ($(os),darwin)
        !           255:   SOFILE =     .dylib
        !           256:   CFLAGS +=    -Wno-long-double
        !           257:   RANLIB +=    -s
        !           258:  endif
        !           259: endif
        !           260: 
        !           261: # OS Specific Flags
        !           262: ifeq ($(os),sunos)    # Solaris
        !           263:  CFLAGS        += -D__solaris__ -DNEEDS_DAEMON -DNEEDS_FORKPTY -DNEEDS_CFMAKERAW
        !           264:  # Solaris 10 provides setenv()
        !           265:  ifeq ($(shell if [ `uname -r | sed 's/\.//'` -lt 510 ] ; then echo "Yes" ; else echo "No" ; fi),Yes)
        !           266:   CFLAGS += -DNEEDS_SETENV
        !           267:  endif
        !           268:  LDFLAGS       +=      -L/opt/sfw/lib
        !           269: endif
        !           270: ifeq ($(os),netbsd)    # NetBSD
        !           271:  CFLAGS        +=      -D__unix__ -I/usr/pkg/include
        !           272: endif
        !           273: ifeq ($(os),darwin)
        !           274:  CFLAGS +=  -D__unix__ -fno-common -D__DARWIN__
        !           275: endif
        !           276: 
        !           277: # PThread-specific flags
        !           278: ifeq ($(os),linux)    # Linux
        !           279:  ifndef THREADS_ACTUALLY_WORK
        !           280:   CFLAGS    += -D_THREAD_SUID_BROKEN
        !           281:  endif
        !           282: endif
        !           283: MT_CFLAGS    += -D_THREAD_SAFE -D_REENTRANT
        !           284: CFLAGS    += -D_THREAD_SAFE -D_REENTRANT -D__EXTENSIONS__
        !           285: ifeq ($(os),freebsd)    # FreeBSD
        !           286:  MT_CFLAGS    += -DUSE_XP_SEMAPHORES
        !           287:  MT_LDFLAGS    +=    -pthread
        !           288:  LDFLAGS    +=    -pthread
        !           289:  XP_SEM    :=    1
        !           290: else
        !           291:  ifeq ($(os),openbsd)    # OpenBSD
        !           292:   MT_CFLAGS    += -DUSE_XP_SEMAPHORES
        !           293:   MT_LDFLAGS    +=    -pthread
        !           294:   LDFLAGS    +=    -pthread
        !           295:   XP_SEM    :=    1
        !           296:  else
        !           297:   ifeq ($(os),netbsd)    # NetBSD
        !           298:    MT_CFLAGS   +=      -DUSE_XP_SEMAPHORES
        !           299:    MT_LDFLAGS    +=   -L/usr/pkg/lib
        !           300:    XP_SEM    :=    1
        !           301:   else
        !           302:    ifeq ($(os),qnx)    # QNX
        !           303:    else
        !           304:     ifeq ($(os),darwin)    # Darwin/Mac OS X
        !           305:      CFLAGS    += -D__unix__ 
        !           306:      MT_CFLAGS    += -DUSE_XP_SEMAPHORES -D__DARWIN__
        !           307:      XP_SEM    := 1
        !           308:     else
        !           309:      ifeq ($(os),sunos)  # Solaris
        !           310:       XP_SEM :=    1
        !           311:       MT_CFLAGS    +=    -D_POSIX_PTHREAD_SEMANTICS
        !           312:       MT_CFLAGS    += -DUSE_XP_SEMAPHORES
        !           313:       # This makes ctime_r() be the correct one.
        !           314:       CFLAGS      += -D_POSIX_PTHREAD_SEMANTICS
        !           315:      else            # Linux / Other UNIX
        !           316:       XP_SEM :=    1
        !           317:       MT_CFLAGS    += -DUSE_XP_SEMAPHORES
        !           318:      endif
        !           319:     endif
        !           320:    endif
        !           321:   endif
        !           322:  endif
        !           323: endif
        !           324: 
        !           325: SHLIBOPTS   :=  -shared
        !           326: ifeq ($(os),darwin)
        !           327:  MKSHLIB        :=  libtool -dynamic -framework System -lcc_dynamic
        !           328:  MKSHPPLIB      :=  libtool -dynamic -framework System -lcc_dynamic -lstdc++
        !           329:  SHLIBOPTS  :=
        !           330: else
        !           331:  ifeq ($(os),sunos)
        !           332:   MKSHLIB       :=  /usr/ccs/bin/ld -G
        !           333:   MKSHPPLIB     :=  /usr/ccs/bin/ld -G
        !           334:   SHLIBOPTS :=
        !           335:  else
        !           336:   MKSHLIB       :=  $(CC)
        !           337:   MKSHPPLIB     :=  $(CXX)
        !           338:  endif
        !           339: endif
        !           340: 
        !           341: # Paths
        !           342: XPDEV_SRC      :=      $(SRC_ROOT)$(DIRSEP)xpdev
        !           343: CIOLIB_SRC     :=      $(SRC_ROOT)$(DIRSEP)conio
        !           344: SMBLIB_SRC     :=      $(SRC_ROOT)$(DIRSEP)smblib
        !           345: UIFC_SRC       :=      $(SRC_ROOT)$(DIRSEP)uifc
        !           346: 
        !           347: # SDL disabled by default for the moment.
        !           348: ifndef USE_SDL
        !           349:  WITHOUT_SDL   :=      1
        !           350: endif
        !           351: 
        !           352: # Pull in lib-specific flags
        !           353: -include               $(XPDEV_SRC)$(DIRSEP)Common.make
        !           354: -include               $(XPDEV_SRC)$(DIRSEP)Common.gmake
        !           355: -include               $(SMBLIB_SRC)$(DIRSEP)Common.make
        !           356: -include               $(SMBLIB_SRC)$(DIRSEP)Common.gmake
        !           357: -include               $(CIOLIB_SRC)$(DIRSEP)Common.make
        !           358: -include               $(CIOLIB_SRC)$(DIRSEP)Common.gmake
        !           359: -include               $(UIFC_SRC)$(DIRSEP)Common.make
        !           360: -include               $(UIFC_SRC)$(DIRSEP)Common.gmake
        !           361: 
        !           362: ifdef DEBUG
        !           363:  CFLAGS        +=      -ggdb
        !           364:  CFLAGS        +=      -D_DEBUG
        !           365: else # RELEASE
        !           366:  # -finline functions breaks the baja build badly.
        !           367:  # This also means that -O3 won't work either.
        !           368:  CFLAGS        := -O2 -fomit-frame-pointer -ffast-math -funroll-loops $(CFLAGS)
        !           369: endif
        !           370: 
        !           371: -include targets.mk
        !           372: -include $(SRC_ROOT)/build/rules.mk
        !           373: -include objects.mk            # defines $(OBJS)
        !           374: 
        !           375: # Implicit C Compile Rule
        !           376: $(OBJODIR)/%$(OFILE) : %.c $(BUILD_DEPENDS)
        !           377:        @echo $(COMPILE_MSG) $<
        !           378:        $(QUIET)$(CC) $(CFLAGS) $(CCFLAGS) -o $@ -c $<
        !           379: 
        !           380: # Implicit C++ Compile Rule
        !           381: $(OBJODIR)/%$(OFILE) : %.cpp $(BUILD_DEPENDS)
        !           382:        @echo $(COMPILE_MSG) $<
        !           383:        $(QUIET)$(CXX) $(CFLAGS) $(CXXFLAGS) -o $@ -c $<
        !           384: 
        !           385: # Implicit MT C Compile Rule
        !           386: $(MTOBJODIR)/%$(OFILE) : %.c $(BUILD_DEPENDS)
        !           387:        @echo $(COMPILE_MSG) $<
        !           388:        $(QUIET)$(CC) $(CFLAGS) $(CCFLAGS) $(MT_CFLAGS) -o $@ -c $<
        !           389: 
        !           390: # Implicit MT C++ Compile Rule
        !           391: $(MTOBJODIR)/%$(OFILE) : %.cpp $(BUILD_DEPENDS)
        !           392:        @echo $(COMPILE_MSG) $<
        !           393:        $(QUIET)$(CXX) $(CFLAGS) $(CXXFLAGS) $(MT_CFLAGS) -o $@ -c $<
        !           394: 
        !           395: depend:
        !           396:        $(QUIET)$(DELETE) $(OBJODIR)/.depend
        !           397:        $(QUIET)$(DELETE) $(MTOBJODIR)/.depend
        !           398:        $(QUIET)$(DELETE) $(LIBODIR)/.depend
        !           399:        $(QUIET)$(DELETE) $(EXEODIR)/.depend
        !           400:        $(QUIET)$(MAKE) BUILD_DEPENDS=FORCE
        !           401: 
        !           402: FORCE:
        !           403: 
        !           404: -include $(MTOBJODIR)/.depend
        !           405: -include $(OBJODIR)/.depend
        !           406: -include $(LIBODIR)/.depend
        !           407: -include $(EXEODIR)/.depend
        !           408: -include $(MTOBJODIR)/*.d
        !           409: -include $(OBJODIR)/*.d
        !           410: -include $(LIBODIR)/*.d
        !           411: -include $(EXEODIR)/*.d
        !           412: 
        !           413: $(XPDEV_LIB): xpdev
        !           414: xpdev:
        !           415:        $(MAKE) -C $(XPDEV_SRC) lib
        !           416: 
        !           417: $(XPDEV-MT_LIB): xpdev-mt
        !           418: xpdev-mt:
        !           419:        $(MAKE) -C $(XPDEV_SRC) mtlib
        !           420: 
        !           421: $(SMBLIB): smblib
        !           422: smblib:
        !           423:        $(MAKE) -C $(SMBLIB_SRC) lib
        !           424: 
        !           425: $(CIOLIB-MT): ciolib-mt
        !           426: ciolib-mt:
        !           427:        $(MAKE) -C $(CIOLIB_SRC) mtlib
        !           428: 
        !           429: $(UIFCLIB): uifc
        !           430: uifc:
        !           431:        $(MAKE) -C $(UIFC_SRC) lib
        !           432: 
        !           433: $(UIFCLIB-MT): uifc-mt
        !           434: uifc-mt:
        !           435:        $(MAKE) -C $(UIFC_SRC) mtlib

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.