Annotation of kernel/MakeInc.simple, revision 1.1

1.1     ! root        1: ##
        !             2: # Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
        !             3: #
        !             4: # @APPLE_LICENSE_HEADER_START@
        !             5: # 
        !             6: # Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
        !             7: # Reserved.  This file contains Original Code and/or Modifications of
        !             8: # Original Code as defined in and that are subject to the Apple Public
        !             9: # Source License Version 1.1 (the "License").  You may not use this file
        !            10: # except in compliance with the License.  Please obtain a copy of the
        !            11: # License at http://www.apple.com/publicsource and read it before using
        !            12: # this file.
        !            13: # 
        !            14: # The Original Code and all software distributed under the License are
        !            15: # distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
        !            16: # EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
        !            17: # INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
        !            18: # FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
        !            19: # License for the specific language governing rights and limitations
        !            20: # under the License.
        !            21: # 
        !            22: # @APPLE_LICENSE_HEADER_END@
        !            23: ##
        !            24: 
        !            25: #
        !            26: # Makefile include file for simple commands
        !            27: # Copyright NeXT, Inc.  1992.  All rights reserved.
        !            28: #
        !            29: 
        !            30: #
        !            31: # TOOLS
        !            32: #
        !            33: MD= md
        !            34: ifneq "" "$(wildcard /bin/mkdirs)"
        !            35:   MKDIRS = /bin/mkdirs
        !            36: else
        !            37:   MKDIRS = /bin/mkdir -p
        !            38: endif
        !            39: 
        !            40: 
        !            41: #
        !            42: # Default type(s) to build
        !            43: #
        !            44: TYPES= STD
        !            45: 
        !            46: #
        !            47: # Sources for tags
        !            48: #
        !            49: SRCS= $(HFILES) $(YFILES) $(CFILES) $(SFILES) $(EXTRA_SRCS)
        !            50: 
        !            51: #
        !            52: # Build list of object modules from source files
        !            53: # Trick is to strip off any path prefix
        !            54: #
        !            55: XCOBJS= $(CFILES:.c=.o)
        !            56: COBJS= $(XCOBJS:t)
        !            57: 
        !            58: XYOBJS= $(YFILES:.y=.o)
        !            59: YOBJS= $(XYOBJS:t)
        !            60: 
        !            61: XLOBJS= $(LFILES:.l=.o)
        !            62: LOBJS= $(XLOBJS:t)
        !            63: 
        !            64: XSOBJS= $(SFILES:.s=.o)
        !            65: SOBJS= $(XSOBJS:t)
        !            66: 
        !            67: #
        !            68: # Make the first SOBJ be the first module loaded.  Simplifies
        !            69: # getting crt0.s in the right place for programs that need it first.
        !            70: #
        !            71: OBJS= $(SOBJS) $(YOBJS) $(LOBJS) $(COBJS) $(EXTRA_OBJS)
        !            72: 
        !            73: #
        !            74: # This makefile actually does builds in $(OBJROOT).  Set-up vpath so
        !            75: # sources may be found.
        !            76: #
        !            77: STD_VPATH=$(SRCDIR)
        !            78: PROF_VPATH=$(SRCDIR)
        !            79: DBG_VPATH=$(SRCDIR)
        !            80: 
        !            81: #
        !            82: # Options that we want to force.  These are applied to all makes
        !            83: # of the appropriate type
        !            84: #
        !            85: STD_CFORCE=
        !            86: PROF_CFORCE=
        !            87: DBG_CFORCE=
        !            88: 
        !            89: STD_LDFORCE=
        !            90: PROF_LDFORCE=
        !            91: DBG_LDFORCE=
        !            92: 
        !            93: #
        !            94: # *_NAME's are used by vers_string so that it's apparent which
        !            95: # binary type you have (debug, prof, etc) by looking at the vers_string
        !            96: #
        !            97: STD_NAME=
        !            98: PROF_NAME=_PROF
        !            99: DBG_NAME=_DBG
        !           100: 
        !           101: #
        !           102: # These commands are executed whenever make exits, they clean-up
        !           103: # any crud left about.
        !           104: #
        !           105: STD_EXIT= $(RM) $(RMFLAGS) $(DERIVED) *.d
        !           106: PROF_EXIT= $(RM) $(RMFLAGS) $(DERIVED) *.d
        !           107: DBG_EXIT= $(RM) $(RMFLAGS) $(DERIVED) *.d
        !           108: 
        !           109: #
        !           110: # We have to tell the compiler what type of code to generate
        !           111: #
        !           112: 
        !           113: CODE_GEN_STYLE = STATIC
        !           114: #
        !           115: # Indirection used to get appropriate options for the TYPE of build
        !           116: # being done.
        !           117: #
        !           118: 
        !           119: STATIC_COPTS = -static
        !           120: STATIC_LDOPTS = ${STATIC_COPTS}
        !           121: 
        !           122: DYNAMIC_COPTS = -dynamic -fno-common
        !           123: DYNAMIC_LDOPTS = ${DYNAMIC_COPTS}
        !           124: 
        !           125: COPTS= ${$(TYPE)_CFORCE} ${$(TYPE)_COPTS} ${${CODE_GEN_STYLE}_COPTS}
        !           126: LDOPTS= ${$(TYPE)_LDFORCE} ${$(TYPE)_LDOPTS} ${${CODE_GEN_STYLE}_LDOPTS}
        !           127: XLIBS= ${$(TYPE)_LIBS}
        !           128: 
        !           129: NAME=${$(TYPE)_NAME}
        !           130: VPATH=${$(TYPE)_VPATH}
        !           131: EXIT=${$(TYPE)_EXIT}
        !           132: 
        !           133: #
        !           134: # This is completely untested!
        !           135: #
        !           136: CMD_FLAGS= "RC_FLAGS=$(RC_FLAGS)" "RC_ARCH=$(RC_ARCH)"
        !           137: 
        !           138: #
        !           139: # Cause .c file to be built from yacc file
        !           140: #
        !           141: XYFILES= $(YFILES:t)
        !           142: $(XYFILES:.y=.c): $$(@:.c=.y)
        !           143: 
        !           144: #
        !           145: # Indicate that y.tab.h depends on yacc source
        !           146: #
        !           147: y.tab.h:       $(YFILES)
        !           148: 
        !           149: #
        !           150: # Cause .c file to be built from lex file
        !           151: #
        !           152: XLFILES= $(LFILES:t)
        !           153: $(XLFILES:.l=.c): $$(@:.c=.l)
        !           154: 
        !           155: #
        !           156: # CCFLAGS are for command line use
        !           157: # e.g. make CCFLAGS="-I/foo/bar/include"
        !           158: #
        !           159: # RC_CFLAGS are for Release Control use.
        !           160: #
        !           161: .c.o:
        !           162:        $(CC) -MD $(CFLAGS) $(COPTS) $(RC_CFLAGS) $(CCFLAGS) -c -o $@ $<
        !           163:        $(MD) -d -u Makedep $*.d
        !           164: 
        !           165: .s.o:
        !           166:        $(CC) -MD $(SFLAGS) $(CFLAGS) $(COPTS) $(RC_CFLAGS) $(CCFLAGS) \
        !           167:          -c -o $@ $<
        !           168:        $(MD) -d -u Makedep $*.d
        !           169: 
        !           170: #
        !           171: # Standard clean-up on exit
        !           172: #
        !           173: .EXIT:
        !           174:        -$(EXIT)
        !           175: 
        !           176: #
        !           177: # Standard targets
        !           178: # All executed in "source" directory
        !           179: #
        !           180: .DEFTARGET:    all
        !           181: 
        !           182: all:   $(TYPES)
        !           183: 
        !           184: remake:        clean all
        !           185: 
        !           186: #
        !           187: # Initial rule for handling:
        !           188: #      STD (release)
        !           189: #      PROF (profiling)
        !           190: #      DBG (debugging)
        !           191: # builds.
        !           192: #
        !           193: # "make DBG" builds a debugging version.  Objects are placed
        !           194: # DBG_OBJS.
        !           195: #
        !           196: # Main trick here is to convert (possibly relative) pathnames to
        !           197: # absolute paths via pwd.  Then reinvoke make with appropriate
        !           198: # macros defined.
        !           199: #
        !           200: STD PROF DBG:  $(SYMROOT)/$(PROGRAM)_$$@_OBJS \
        !           201:  $(OBJROOT)/$(PROGRAM)_$$@_OBJS ALWAYS
        !           202:        @echo cd $(OBJROOT)/$(PROGRAM)_$@_OBJS
        !           203:        @SRCDIR=`pwd`; \
        !           204:        cd $(SYMROOT); SYMDIR=`pwd`; cd $$SRCDIR; \
        !           205:        SRCDIR=`relpath -d $(VERSDIR) $(OBJROOT)/$(PROGRAM)_$@_OBJS $$SRCDIR`;\
        !           206:        SYMDIR=`relpath -d $(VERSDIR) $(OBJROOT)/$(PROGRAM)_$@_OBJS $$SYMDIR`;\
        !           207:        cd $(OBJROOT)/$(PROGRAM)_$@_OBJS; \
        !           208:        $(MAKE) -f $$SRCDIR/Makefile TYPE="$@" \
        !           209:         SRCDIR=$$SRCDIR SYMROOT=$$SYMDIR OBJROOT=.. $(CMD_FLAGS) \
        !           210:         $$SYMDIR/$(PROGRAM)_$@_OBJS/$(PROGRAM)
        !           211: 
        !           212: install: DSTROOT $(DSTDIRS) STD install_extra installhdrs ALWAYS
        !           213:        install $(IFLAGS) \
        !           214:                $(SYMROOT)/$(PROGRAM)_STD_OBJS/$(PROGRAM) \
        !           215:                $(DSTROOT)$(BINDIR)/$(PROGRAM)
        !           216: 
        !           217: reinstall: clean install
        !           218: 
        !           219: clean: ALWAYS
        !           220:        -$(RM) -rf $(OBJROOT)/$(PROGRAM)_*_OBJS
        !           221:        @-if [ $(SYMROOT) != $(OBJROOT) ]; \
        !           222:        then \
        !           223:                echo $(RM) -rf $(SYMROOT)/$(PROGRAM)_*_OBJS; \
        !           224:                $(RM) -rf $(SYMROOT)/$(PROGRAM)_*_OBJS; \
        !           225:        fi
        !           226: 
        !           227: clobber: clean
        !           228:        -$(RM) $(RMFLAGS) $(GARBAGE)
        !           229: 
        !           230: tags:  ALWAYS tags_link
        !           231:        $(RM) -f TAGS tags
        !           232:        etags -et $(SRCS)
        !           233:        ctags -w $(SRCS)
        !           234: 
        !           235: #
        !           236: # Internal targets
        !           237: # All targets below are executed in "source" directory
        !           238: #
        !           239: 
        !           240: DSTROOT OBJROOT: ALWAYS
        !           241:        @if [ -n "$($@)" ]; \
        !           242:        then \
        !           243:                exit 0; \
        !           244:        else \
        !           245:                echo Must define $@; \
        !           246:                exit 1; \
        !           247:        fi
        !           248: 
        !           249: $(DSTDIRS):
        !           250:        $(MKDIRS) $@
        !           251: 
        !           252: $(OBJROOT)/$(PROGRAM)_DBG_OBJS \
        !           253:  $(OBJROOT)/$(PROGRAM)_PROF_OBJS \
        !           254:  $(OBJROOT)/$(PROGRAM)_STD_OBJS \
        !           255:  $(SYMROOT)/$(PROGRAM)_DBG_OBJS \
        !           256:  $(SYMROOT)/$(PROGRAM)_PROF_OBJS \
        !           257:  $(SYMROOT)/$(PROGRAM)_STD_OBJS:
        !           258:        $(MKDIRS) $@
        !           259: 
        !           260: #
        !           261: # "Internal" target to building the command
        !           262: # Executed in $(OBJROOT)/$(PROGRAM)_$(TYPE)_OBJS
        !           263: #
        !           264: # This makefile when invoked in the OBJROOT will have the following
        !           265: # macros defined:
        !           266: #      SRCDIR -- path to the directory containing this Makefile
        !           267: #      SYMROOT -- path to the directory that is to contain the result
        !           268: #              of this build
        !           269: #
        !           270: $(SYMROOT)/$(PROGRAM)_$(TYPE)_OBJS/$(PROGRAM): \
        !           271:  $(OBJS) vers.o $(SRCDIR)/Makefile
        !           272:        $(CC) $(LDFLAGS) $(LDOPTS) $(RC_CFLAGS) \
        !           273:                -o $@ $(OBJS) vers.o $(XLIBS) $(LIBS)
        !           274:        
        !           275: vers.c: $(OBJS)
        !           276:        @$(RM) -f $@
        !           277:        vers_string -c $(PROGRAM)$(NAME) > $@
        !           278: 
        !           279: ALWAYS:
        !           280: 
        !           281: #
        !           282: # This must be designed to work in the context of
        !           283: # $(OBJROOT)/$(PROGRAM)_$(TYPE)_OBJS.  Since include
        !           284: # files are found relative to the Makefile, this should
        !           285: # do the trick.
        !           286: #
        !           287: -include $(OBJROOT)/$(PROGRAM)_$(TYPE)_OBJS/Makedep

unix.superglobalmegacorp.com

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