Annotation of driverkit/MakefileDir/Makefile.device_common, revision 1.1.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.