Annotation of driverkit/MakefileDir/Makefile.device_common, revision 1.1

1.1     ! root        1: #
        !             2: # Common makefile fragment for use by driverkit-based driver projects.
        !             3: #
        !             4: 
        !             5: MAKEFILEDIR = $(MAKEFILEPATH)/pb_makefiles
        !             6: include $(MAKEFILEDIR)/platform.make
        !             7: 
        !             8: ifneq "" "$(wildcard /bin/mkdirs)"
        !             9:   MKDIRS = /bin/mkdirs
        !            10: else
        !            11:   MKDIRS = /bin/mkdir -p
        !            12: endif
        !            13: 
        !            14: #
        !            15: # OBJROOT and SYMROOT are overridden by RC tools for builds from read-only
        !            16: # source.
        !            17: #
        !            18: OBJROOT= .
        !            19: SYMROOT= .
        !            20: 
        !            21: #
        !            22: # Macros used for compiling.
        !            23: #
        !            24: CFILES= $(COMMON_CFILES) $(MACHINE_COMMON_CFILES)
        !            25: MFILES= $(COMMON_MFILES) $(MACHINE_COMMON_MFILES)
        !            26: MD_CFILES=$(${MACHINE}_CFILES)
        !            27: MD_MFILES=$(${MACHINE}_MFILES)
        !            28: 
        !            29: COMMON_OFILES=         $(CFILES:.c=.o) $(MFILES:.m=.o)
        !            30: KERNEL_OFILES=         $(KERNEL_CFILES:.c=.o) $(KERNEL_MFILES:.m=.o)
        !            31: USER_OFILES=   $(USER_CFILES:.c=.o) $(USER_MFILES:.m=.o)
        !            32: MD_OFILES=     $(MD_CFILES:.c=.o) $(MD_MFILES:.m=.o)
        !            33: 
        !            34: IO_SERVER=
        !            35: #IO_SERVER= -DIOSERVER
        !            36: 
        !            37: #
        !            38: # For installsrc and tags.
        !            39: #
        !            40: COMMONSOURCE=  $(COMMON_MFILES) $(COMMON_CFILES) \
        !            41:        $(USER_MFILES) $(USER_CFILES) $(KERNEL_MFILES) $(KERNEL_CFILES) \
        !            42:        $(COMMON_PUBLIC_HFILES) $(COMMON_PRIVATE_HFILES) $(OTHER_SOURCE) 
        !            43: 
        !            44: 
        !            45: CFLAGS= -g -O -Wall -Wnoformat -I. -I.. -MD
        !            46: VPATH = $(OBJROOT)/$(BUILD_DIR):$(SYMROOT)/$(BUILD_DIR):$(MACHINE):$(OPT_VPATH)
        !            47: EXEC_LD= /bin/cc
        !            48: RELOC_LD= /bin/ld
        !            49: KL_LD= /usr/bin/kl_ld
        !            50: 
        !            51: m88k_CFLAGS=
        !            52: m68k_CFLAGS=   
        !            53: i386_CFLAGS=
        !            54: MD_CFLAGS=     $(${MACHINE}_CFLAGS)
        !            55: 
        !            56: #
        !            57: # For building user-level executable .o file.
        !            58: #
        !            59: # Forcing dependency on both SYMROOT and OBJROOT is necessary here to avoid
        !            60: # making actual binary builds dependent on the modify date of the directory 
        !            61: # they are in - in such a case, successive makes would repeatedly build the
        !            62: # binary since the modify time of one of its dependencies keeps getting
        !            63: # changed. If SYMROOT and OBJROOT are identical (as in normal developement
        !            64: # builds, in which case they're both '.'), we'll get a warning because
        !            65: # there will be two rules for building '.'. This won't break anything.
        !            66: #
        !            67: # NRW_BUILD is currently defined to allow testing of IODeviceNRW stuff on
        !            68: # 68k platforms.
        !            69: #
        !            70: release: $(SYMROOT) $(OBJROOT) always
        !            71:        @echo '********** Building $(MACHINE) release $(BUILD_NAME) **********'
        !            72:        $(MAKE) $(BUILD_NAME) \
        !            73:                "BUILD_DIR=$(MACHINE)release" \
        !            74:                "OBJROOT=$(OBJROOT)" \
        !            75:                "SYMROOT=$(SYMROOT)" \
        !            76:                "MACHINE=$(MACHINE)" \
        !            77:                "LIBS=$(RELEASE_LIBS)" \
        !            78:                "OFILES= $(COMMON_OFILES) $(USER_OFILES) $(MD_OFILES)" \
        !            79:                "LDFLAGS= $(RELEASE_LDFLAGS)" \
        !            80:                "OTHER_CFLAGS=$(RELEASE_CFLAGS) $(MD_CFLAGS) \
        !            81:                -arch $(MACHINE) $(IO_SERVER) "
        !            82: 
        !            83: debug: $(SYMROOT) $(OBJROOT) always
        !            84:        @echo '********** Building $(MACHINE) debug $(BUILD_NAME) **********'
        !            85:        $(MAKE) $(BUILD_NAME) \
        !            86:                "BUILD_DIR=$(MACHINE)debug" \
        !            87:                "OBJROOT=$(OBJROOT)" \
        !            88:                "SYMROOT=$(SYMROOT)" \
        !            89:                "MACHINE=$(MACHINE)" \
        !            90:                "CFLAGS=-DDEBUG -DDDM_DEBUG $(CFLAGS)" \
        !            91:                "LIBS=$(DEBUG_LIBS)" \
        !            92:                "OFILES= $(COMMON_OFILES) $(USER_OFILES) $(MD_OFILES)" \
        !            93:                "LDFLAGS= $(DEBUG_LDFLAGS)" \
        !            94:                "OTHER_CFLAGS=$(DEBUG_CFLAGS) $(MD_CFLAGS) \
        !            95:                 -arch $(MACHINE) $(IO_SERVER) "
        !            96: 
        !            97: #
        !            98: # For building kern-loadable modules.
        !            99: #
        !           100: relocrelease: $(SYMROOT) $(OBJROOT) always
        !           101:        @echo '******** Building $(MACHINE) $(BUILD_NAME)_reloc ********'
        !           102:        $(MAKE) $(BUILD_NAME)_reloc \
        !           103:                "BUILD_DIR=$(MACHINE)relocrelease" \
        !           104:                "OBJROOT=$(OBJROOT)" \
        !           105:                "SYMROOT=$(SYMROOT)" \
        !           106:                "MACHINE=$(MACHINE)" \
        !           107:                "LIBS=$(RELEASE_KERN_LIBS)" \
        !           108:                "OFILES= $(COMMON_OFILES) $(KERNEL_OFILES) $(MD_OFILES)" \
        !           109:                "LDFLAGS= $(KL_RELEASE_FLAGS)" \
        !           110:                "OTHER_CFLAGS=$(RELEASE_CFLAGS) -arch $(MACHINE) \
        !           111:                 -DKERNEL -DMACH_USER_API -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders"
        !           112: 
        !           113: relocdebug: $(SYMROOT) $(OBJROOT) always
        !           114:        @echo '******** Building $(MACHINE) debug $(BUILD_NAME)_reloc ********'
        !           115:        $(MAKE) $(BUILD_NAME)_reloc \
        !           116:                "BUILD_DIR=$(MACHINE)relocdebug" \
        !           117:                "OBJROOT=$(OBJROOT)" \
        !           118:                "SYMROOT=$(SYMROOT)" \
        !           119:                "MACHINE=$(MACHINE)" \
        !           120:                "LIBS=$(DEBUG_KERN_LIBS)" \
        !           121:                "OFILES= $(COMMON_OFILES) $(KERNEL_OFILES) $(MD_OFILES)" \
        !           122:                "LDFLAGS= $(KL_DEBUG_FLAGS)" \
        !           123:                "OTHER_CFLAGS=$(DEBUG_CFLAGS) -arch $(MACHINE) \
        !           124:                 -DKERNEL -DMACH_USER_API -I$(NEXT_ROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/System.framework/PrivateHeaders \
        !           125:                 -DDEBUG -DDDM_DEBUG"
        !           126: 
        !           127: all:   targets lipoize tags
        !           128: 
        !           129: #
        !           130: # Build all targets. 
        !           131: #
        !           132: targets:       always
        !           133:        @if [ -n "$(RC_ARCHS_LOCAL)" ]; then                            \
        !           134:            machines="$(RC_ARCHS_LOCAL)";                               \
        !           135:        elif [ -n "$(RC_ARCHS)" ]; then                                 \
        !           136:            machines="$(RC_ARCHS)";                                     \
        !           137:        elif [ -n "$(MACHINE_LIST)" ]; then                             \
        !           138:            machines="$(MACHINE_LIST)";                                 \
        !           139:        elif [ -n "$(MACHINE)" ]; then                                  \
        !           140:            machines="$(MACHINE)";                                      \
        !           141:        else                                                            \
        !           142:            echo no machine list found;                                 \
        !           143:            exit 1;                                                     \
        !           144:        fi;                                                             \
        !           145:        for machine in $$machines; do                                   \
        !           146:            echo "========== Building all for $$machine ==========";    \
        !           147:            $(MAKE) $(TARGET_LIST)                                      \
        !           148:                "MACHINE=$$machine"                                     \
        !           149:                "OBJROOT=$(OBJROOT)"                                    \
        !           150:                "SYMROOT=$(SYMROOT)"                                    \
        !           151:                "DSTROOT=$(DSTROOT)";                                   \
        !           152:        done
        !           153: 
        !           154: #
        !           155: # Create fat versions if necessary. If there is more than 
        !           156: # one machine in INSTALL_MACHINES, lipo together all 
        !           157: # architectures for each INSTALL_TARGET. In either case, 
        !           158: # installable target(s) are left in $(SYMROOT).
        !           159: #
        !           160: lipoize: always
        !           161:        @if [ -n "$(RC_ARCHS_LOCAL)" ]; then                            \
        !           162:            machines="$(RC_ARCHS_LOCAL)";                               \
        !           163:        elif [ -n "$(RC_ARCHS)" ]; then                                 \
        !           164:            machines="$(RC_ARCHS)";                                     \
        !           165:        elif [ -n "$(INSTALL_MACHINES)" ]; then                         \
        !           166:            machines="$(INSTALL_MACHINES)";                             \
        !           167:        elif [ -n "$(MACHINE)" ]; then                                  \
        !           168:            machines="$(MACHINE)";                                      \
        !           169:        else                                                            \
        !           170:            echo no machine list found;                                 \
        !           171:            exit 1;                                                     \
        !           172:        fi;                                                             \
        !           173:        for target in $(TARGET_LIST); do                                \
        !           174:            if [ $$target = relocrelease ]; then                        \
        !           175:                modname="$(BUILD_NAME)_reloc";                          \
        !           176:            elif [ $$target = relocdebug ]; then                        \
        !           177:                modname="$(BUILD_NAME)_reloc";                          \
        !           178:            else                                                        \
        !           179:                modname="$(BUILD_NAME)";                                \
        !           180:            fi;                                                         \
        !           181:            echo rm -f $(SYMROOT)/$$modname;                            \
        !           182:            rm -f $(SYMROOT)/$$modname;                                 \
        !           183:            if [ "`echo $$machines | wc -w`" -eq 1 ]; then              \
        !           184:                machine=$$machines;                                     \
        !           185:                echo cp -p $(OBJROOT)/$$machine"`echo $$target`"/$$modname $(SYMROOT); \
        !           186:                cp -p $(OBJROOT)/$$machine"`echo $$target`"/$$modname $(SYMROOT); \
        !           187:            else                                                        \
        !           188:                args="";                                                \
        !           189:                for machine in $$machines; do                           \
        !           190:                    args="$$args $(OBJROOT)/$$machine$$target""/$$modname"; \
        !           191:                done;                                                   \
        !           192:                echo lipo -create -output $(SYMROOT)/$$modname $$args;  \
        !           193:                lipo -create -output $(SYMROOT)/$$modname $$args;       \
        !           194:            fi;                                                         \
        !           195:        done
        !           196: 
        !           197: install: DSTROOT $(DSTROOT)/$(INSTALL_BIN_DIR) targets lipoize                 \
        !           198:                installhdrs other_install
        !           199:        @echo cd $(SYMROOT);                                            \
        !           200:        cd $(SYMROOT);                                                  \
        !           201:        for target in `echo $(INSTALL_TARGETS)`; do                     \
        !           202:            if [ $$target = relocrelease ]; then                        \
        !           203:                    modname="$(BUILD_NAME)_reloc";                      \
        !           204:            elif [ $$target = relocdebug ]; then                        \
        !           205:                    modname="$(BUILD_NAME)_reloc";                      \
        !           206:            else                                                        \
        !           207:                    modname="$(BUILD_NAME)";                            \
        !           208:            fi;                                                         \
        !           209:            echo install $(INSTALLFLAGS) $$modname $(DSTROOT)$(INSTALL_BIN_DIR); \
        !           210:            install $(INSTALLFLAGS) $$modname                           \
        !           211:                    $(DSTROOT)$(INSTALL_BIN_DIR);                       \
        !           212:        done
        !           213: 
        !           214: installsrc:    SRCROOT $(SRCROOT)
        !           215: #      
        !           216: # first install the common source (in this directory).
        !           217: #
        !           218:        gnutar cf - $(COMMONSOURCE) Makefile | (cd $(SRCROOT); gnutar xpf -)    
        !           219: #
        !           220: # now install all of the machine-dependent source (if there is any).
        !           221: #
        !           222:        @if [ -n "${SOURCE_SUBDIRS}" ]; \
        !           223:        then \
        !           224:                SUBDIRS="$(SOURCE_SUBDIRS)"; \
        !           225:        else \
        !           226:                SUBDIRS=foo; \
        !           227:        fi; \
        !           228:        if [ -n "${SOURCE_SUBDIRS}" ]; \
        !           229:        then  \
        !           230:            for i in $$SUBDIRS; \
        !           231:            do \
        !           232:                    echo ================= make $@ for $$i =================; \
        !           233:                    (cd $$i; ${MAKE} SRCROOT=$(SRCROOT)/$$i $@) || exit $?; \
        !           234:            done \
        !           235:        fi
        !           236:        
        !           237: installhdrs:   DSTROOT $(DSTROOT)/$(INSTALL_HDR_DIR)
        !           238: #
        !           239: # first install the public header files from this directory.
        !           240:        @if [ -n "${COMMON_PUBLIC_HFILES}" ];           \
        !           241:        then                                            \
        !           242:            echo install -c -m 644 $(COMMON_PUBLIC_HFILES) $(DSTROOT)$(INSTALL_HDR_DIR); \
        !           243:            install -c -m 644 $(COMMON_PUBLIC_HFILES)   \
        !           244:                $(DSTROOT)$(INSTALL_HDR_DIR);           \
        !           245:        fi
        !           246: #
        !           247: # now install all of the machine-dependent headers (if there are any).
        !           248: #
        !           249:        @if [ -n "${SOURCE_SUBDIRS}" ];                 \
        !           250:        then                                            \
        !           251:                SUBDIRS="$(SOURCE_SUBDIRS)";            \
        !           252:        else                                            \
        !           253:                SUBDIRS=foo;                            \
        !           254:        fi;                                             \
        !           255:        if [ -n "${SOURCE_SUBDIRS}" ];                  \
        !           256:        then                                            \
        !           257:            for i in $$SUBDIRS;                         \
        !           258:            do                                          \
        !           259:                echo ================= make $@ for $$i =================; \
        !           260:                (cd $$i; ${MAKE} DSTDIR=$(DSTROOT)$(INSTALL_HDR_DIR) $@) || exit $?; \
        !           261:            done                                        \
        !           262:        fi;
        !           263:        
        !           264: $(OBJROOT)/$(BUILD_DIR) $(SYMROOT)/$(BUILD_DIR)                \
        !           265: $(DSTROOT)/$(INSTALL_BIN_DIR) $(DSTROOT)/$(INSTALL_HDR_DIR)    \
        !           266: $(OBJROOT) $(SRCROOT) $(SYMROOT):
        !           267:        $(MKDIRS) $@
        !           268: 
        !           269: tags:  $(OBJROOT) always
        !           270:        rm -f tags
        !           271:        ctags -o $(OBJROOT)/tags $(COMMONSOURCE)
        !           272: 
        !           273: always:
        !           274: 
        !           275: clean:
        !           276:        -rm -rf $(OBJROOT)/*debug               \
        !           277:                $(OBJROOT)/*release             \
        !           278:                $(OBJROOT)/*kerndebug           \
        !           279:                $(OBJROOT)/*kernrelease         \
        !           280:                $(OBJROOT)/*relocdebug          \
        !           281:                $(OBJROOT)/*relocrelease        \
        !           282:                $(SYMROOT)/$(BUILD_NAME) $(SYMROOT)/$(BUILD_NAME)_reloc \
        !           283:                *.d Makedep *~ tags $(OTHER_CLEAN_FILES) 
        !           284:        @if [ -n "${SOURCE_SUBDIRS}" ]; \
        !           285:        then \
        !           286:                SUBDIRS="$(SOURCE_SUBDIRS)"; \
        !           287:        else \
        !           288:                SUBDIRS=foo; \
        !           289:        fi; \
        !           290:        if [ -n "${SOURCE_SUBDIRS}" ]; \
        !           291:        then  \
        !           292:            for i in $$SUBDIRS; \
        !           293:            do \
        !           294:                    echo ================= make $@ for $$i =================; \
        !           295:                    (cd $$i; ${MAKE} $@) || exit $?; \
        !           296:            done \
        !           297:        fi
        !           298: 
        !           299: #
        !           300: # Build executable and relocatable .o.
        !           301: #
        !           302: # setting LDFLAGS to '-r' in the device-specific Makefile prevents
        !           303: # an executable from being generated.
        !           304: #
        !           305: # Main Makefile may define OTHER_DEPENDS.
        !           306: #
        !           307: $(BUILD_NAME): $(OBJROOT)/$(BUILD_DIR) $(OTHER_DEPENDS) $(OFILES)
        !           308:        $(LD) -arch $(MACHINE) $(LDFLAGS) -o $(OBJROOT)/$(BUILD_DIR)/$@ \
        !           309:                $(OFILES) $(LIBS)
        !           310: 
        !           311: #
        !           312: # Build kern-loadable relocatable.
        !           313: # Main Makefile Must define:
        !           314: #      SERVER_NAME
        !           315: #      KS_VAR_NAME
        !           316: #
        !           317: # May define:
        !           318: #      OTHER_DEPENDS (typically which will force a mig run). 
        !           319: #
        !           320: $(BUILD_NAME)_reloc: $(OBJROOT)/$(BUILD_DIR) \
        !           321:                     $(OTHER_DEPENDS) $(OFILES) $(LOAD_COMMANDS) \
        !           322:                     $(UNLOAD_COMMANDS)
        !           323:        @if [ -n "${UNLOAD_COMMANDS}" ]; \
        !           324:        then \
        !           325:                UNLOAD="-u $(UNLOAD_COMMANDS)"; \
        !           326:        else \
        !           327:                UNLOAD=" "; \
        !           328:        fi; \
        !           329:        echo $(KL_LD) -n $(SERVER_NAME) -l $(LOAD_COMMANDS) \
        !           330:                $$UNLOAD -i $(KS_VAR_NAME) $(LDFLAGS) \
        !           331:                -o $(OBJROOT)/$(BUILD_DIR)/$@  $(OFILES) $(LIBS); \
        !           332:        $(KL_LD) -n $(SERVER_NAME) -l $(LOAD_COMMANDS) \
        !           333:                $$UNLOAD -i $(KS_VAR_NAME) $(LDFLAGS) \
        !           334:                -o $(OBJROOT)/$(BUILD_DIR)/$@  $(OFILES) $(LIBS)
        !           335: 
        !           336: #
        !           337: # The additional -I here picks up possible header files which are
        !           338: # created in the build directory (say, by MIG).
        !           339: #
        !           340: .c.o:
        !           341:        $(CC) $(CFLAGS) $(OTHER_CFLAGS) -c $(*F).c \
        !           342:                -I$(OBJROOT)/$(BUILD_DIR) \
        !           343:                -dependency-file $(OBJROOT)/$(BUILD_DIR)/$(*F).d \
        !           344:                -o $(OBJROOT)/$(BUILD_DIR)/$(*F).o 
        !           345:        md -u $(OBJROOT)/$(BUILD_DIR)/Makedep -d $(OBJROOT)/$(BUILD_DIR)/$(*F).d
        !           346: 
        !           347: .m.o:
        !           348:        $(CC) $(CFLAGS) $(OTHER_CFLAGS) -c $(*F).m \
        !           349:                -I$(OBJROOT)/$(BUILD_DIR) \
        !           350:                -dependency-file $(OBJROOT)/$(BUILD_DIR)/$(*F).d \
        !           351:                -o $(OBJROOT)/$(BUILD_DIR)/$(*F).o 
        !           352:        md -u $(OBJROOT)/$(BUILD_DIR)/Makedep -d $(OBJROOT)/$(BUILD_DIR)/$(*F).d
        !           353: 
        !           354: SRCROOT DSTROOT:
        !           355:        @if [ -n "${$@}" ]; \
        !           356:        then \
        !           357:                exit 0; \
        !           358:        else \
        !           359:                echo Must define $@; \
        !           360:                exit 1; \
        !           361:        fi
        !           362: 
        !           363: -include Makedep
        !           364: 

unix.superglobalmegacorp.com

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