home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / amiga / os / kludge03.tz / kludge03 / mk74 / user / libmach / makefile.old < prev    next >
Makefile  |  1992-05-05  |  16KB  |  446 lines

  1. #
  2. # Mach Operating System
  3. # Copyright (c) 1992,1991,1990,1989 Carnegie Mellon University
  4. # All Rights Reserved.
  5. # Permission to use, copy, modify and distribute this software and its
  6. # documentation is hereby granted, provided that both the copyright
  7. # notice and this permission notice appear in all copies of the
  8. # software, derivative works or modified versions, and any portions
  9. # thereof, and that both notices appear in supporting documentation.
  10. # CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
  11. # CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
  12. # ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  13. # Carnegie Mellon requests users of this software to return to
  14. #  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
  15. #  School of Computer Science
  16. #  Carnegie Mellon University
  17. #  Pittsburgh PA 15213-3890
  18. # any improvements or extensions that they make and grant Carnegie Mellon
  19. # the rights to redistribute these changes.
  20. #  
  21. #
  22. # HISTORY
  23. # $Log:    Makefile,v $
  24. # Revision 2.32  92/05/04  11:28:37  danner
  25. #     The unixoid trap cs files now have a define UNIXOID_TRAP 1 in
  26. #      them. This is for systems that need to generate different
  27. #      syscall stubs for unixoid and pure mach syscalls.
  28. #     [92/04/14            danner]
  29. # Revision 2.31  92/04/08  23:19:52  rpd
  30. #     Fixed to remove tmp directory before creating it.
  31. #     [92/03/18            jvh]
  32. # Revision 2.30  92/03/05  22:46:21  rpd
  33. #     Added bootstrap functions.
  34. #     [92/03/02            rpd]
  35. #     Changed to use double-colon rules for top-level targets.
  36. #     [92/02/28            rpd]
  37. # Revision 2.29  92/02/20  13:42:51  elf
  38. #     Added default_pager_paging_file.
  39. #     [92/02/19  17:37:12  af]
  40. # Revision 2.28  92/02/19  16:07:29  elf
  41. #     Added thread_depress_abort.
  42. #     Added i386/memcpy.s.
  43. #     [92/02/19            elf]
  44. # Revision 2.27  92/02/19  15:10:38  elf
  45. #     Added mach_error_string.o, htg_vm_map.o, panic.o,
  46. #     doprnt.o, printf.o, sprintf.o, get_privileged_ports.o.
  47. #     [92/02/11            rpd]
  48. # Revision 2.26  92/02/19  10:51:30  elf
  49. #     Added SA_LUNA88K_OBJS. Updated Copyright.
  50. #     [92/02/19            danner]
  51. # Revision 2.25  92/01/24  00:50:04  rpd
  52. #     Fixed exc_server.o to have type-checking.
  53. #     [92/01/23            rpd]
  54. # Revision 2.24  92/01/23  15:21:49  rpd
  55. #     Revised for new Makefile organization.
  56. #     [92/01/16            rpd]
  57.  
  58. include ${MAKETOP}Makefile-common
  59.  
  60. # find machine-dependent files in machine subdirectory
  61. # find mig source files, mach/syscall_sw.h on CPATH
  62.  
  63. VPATH = .:${cpu}:${CPATH}
  64.  
  65. # top-level targets
  66.  
  67. TARGETS = libmach.a libmach_sa.a crt0.o
  68. ITARGETS = ${TARGETS;.*;${INSTALLDIR}/lib/&}
  69. TTARGETS = ${TARGETS;.*;${TRELEASEDIR}/lib/&}
  70.  
  71. all :: ${TARGETS}
  72.  
  73. install :: ${ITARGETS}
  74.  
  75. release :: ${TTARGETS}
  76.  
  77. clean ::
  78.     ${RM} ${ITARGETS}
  79.  
  80. # installation rules
  81.  
  82. ${INSTALLDIR}/lib/libmach.a : libmach.a
  83.     ${RM} $@
  84.     ${CP} $? $@
  85.     ${CHMOD_LIB} $@
  86.  
  87. ${INSTALLDIR}/lib/libmach_sa.a : libmach_sa.a
  88.     ${RM} $@
  89.     ${CP} $? $@
  90.     ${CHMOD_LIB} $@
  91.  
  92. ${INSTALLDIR}/lib/crt0.o : crt0.o
  93.     ${RM} $@
  94.     ${CP} $? $@
  95.     ${CHMOD_O} $@
  96.  
  97. # release rules
  98.  
  99. ${TRELEASEDIR}/lib/libmach.a : ${FRELEASEDIR}/lib/libmach.a
  100.     ${RM} $@
  101.     ${CP} $? $@
  102.  
  103. ${TRELEASEDIR}/lib/libmach_sa.a : ${FRELEASEDIR}/lib/libmach_sa.a
  104.     ${RM} $@
  105.     ${CP} $? $@
  106.  
  107. ${TRELEASEDIR}/lib/crt0.o : ${FRELEASEDIR}/lib/crt0.o
  108.     ${RM} $@
  109.     ${CP} $? $@
  110.  
  111. # normal Mach system calls from mach/syscall_sw.h
  112.  
  113. MACH_TRAPS = evc_wait mach_msg_trap mach_reply_port mach_thread_self \
  114.     mach_task_self mach_host_self swtch_pri swtch thread_switch
  115.  
  116. # system calls from mach/syscall_sw.h which the kernel doesn't implement
  117.  
  118. UNIXOID_TRAPS = task_by_pid pid_by_task init_process map_fd \
  119.     rfs_make_symlink htg_syscall
  120.  
  121. # routines from mach/mach.defs which have fast syscall versions
  122.  
  123. MACH_SYSCALLS = vm_allocate vm_map vm_deallocate task_create \
  124.     task_terminate task_suspend task_set_special_port \
  125.     thread_depress_abort
  126.  
  127. # other routines from mach/mach.defs
  128.  
  129. MACH_ROUTINES = task_threads thread_terminate vm_protect vm_inherit \
  130.     vm_read vm_write vm_copy vm_region vm_statistics \
  131.     mach_ports_register mach_ports_lookup \
  132.     memory_object_data_provided memory_object_data_unavailable \
  133.     memory_object_get_attributes vm_set_default_memory_manager \
  134.     memory_object_lock_request task_get_emulation_vector \
  135.     task_set_emulation_vector task_resume task_get_special_port \
  136.     task_info thread_create thread_suspend thread_resume \
  137.     thread_abort thread_get_state thread_set_state \
  138.     thread_get_special_port thread_set_special_port thread_info \
  139.     task_set_emulation memory_object_data_error \
  140.     memory_object_set_attributes memory_object_destroy \
  141.     memory_object_data_supply memory_object_ready \
  142.     memory_object_change_attributes vm_machine_attribute
  143.  
  144. # routines from mach/mach_port.defs which have fast syscall versions
  145.  
  146. MACH_PORT_SYSCALLS = mach_port_allocate mach_port_allocate_name \
  147.     mach_port_deallocate mach_port_insert_right
  148.  
  149. # other routines from mach/mach_port.defs
  150.  
  151. MACH_PORT_ROUTINES = mach_port_names mach_port_type mach_port_rename \
  152.     mach_port_destroy mach_port_get_refs mach_port_mod_refs \
  153.     old_mach_port_get_receive_status mach_port_set_qlimit \
  154.     mach_port_set_mscount mach_port_get_set_status \
  155.     mach_port_move_member mach_port_request_notification \
  156.     mach_port_extract_right mach_port_get_receive_status \
  157.     mach_port_set_seqno
  158.  
  159. # routines from device/device.defs
  160.  
  161. DEVICE_ROUTINES = device_open device_close device_write \
  162.     device_write_inband device_read device_read_inband \
  163.     device_set_status device_get_status device_set_filter device_map
  164.  
  165. # routines from mach/mach_host.defs
  166.  
  167. MACH_HOST_ROUTINES = host_processors host_info processor_info \
  168.     processor_start processor_exit processor_control \
  169.     processor_set_default xxx_processor_set_default_priv \
  170.     processor_set_create processor_set_destroy processor_set_info \
  171.     processor_assign processor_get_assignment thread_assign \
  172.     thread_assign_default thread_get_assignment task_assign \
  173.     task_assign_default task_get_assignment host_kernel_version \
  174.     thread_priority thread_max_priority task_priority \
  175.     processor_set_max_priority thread_policy \
  176.     processor_set_policy_enable processor_set_policy_disable \
  177.     processor_set_tasks processor_set_threads host_processor_sets \
  178.     host_processor_set_priv host_set_time host_adjust_time \
  179.     host_get_time host_reboot vm_wire thread_wire
  180.  
  181. # routines from mach_debug/mach_debug.defs
  182.  
  183. MACH_DEBUG_ROUTINES = host_zone_info mach_port_get_srights \
  184.     host_ipc_hash_info host_ipc_marequest_info mach_port_space_info \
  185.     mach_port_dnrequest_info mach_vm_region_info mach_vm_object_info \
  186.     mach_vm_object_pages host_stack_usage processor_set_stack_usage \
  187.     host_virtual_physical_table_info host_load_symbol_table \
  188.     mach_port_kernel_object
  189.  
  190. # routines from mach/default_pager.defs
  191.  
  192. DPAGER_ROUTINES = default_pager_object_create default_pager_info \
  193.     default_pager_objects default_pager_object_pages \
  194.     default_pager_paging_file
  195.  
  196. # routines from mach/bootstrap.defs
  197.  
  198. BOOTSTRAP_ROUTINES = bootstrap_privileged_ports
  199.  
  200. # all system calls from mach/syscall_sw.h
  201.  
  202. PURE_TRAPS = ${MACH_TRAPS} \
  203.     ${MACH_SYSCALLS/.*/syscall_&} ${MACH_PORT_SYSCALLS/.*/syscall_&}
  204.  
  205. ALL_TRAPS = ${PURE_TRAPS} ${UNIXOID_TRAPS}
  206.  
  207. # mig rules to generate intermediate source files in the object directory
  208.  
  209. ${UNIXOID_TRAPS/.*/&.cs} : mach/syscall_sw.h
  210.     { echo '#define UNIXOID_TRAP 1'; \
  211.        echo '#include <mach/machine/syscall_sw.h>'; \
  212.       egrep '^kernel_trap\($*,' mach/syscall_sw.h; } > $@
  213.  
  214. ${PURE_TRAPS/.*/&.cs} : mach/syscall_sw.h
  215.     { echo '#include <mach/machine/syscall_sw.h>'; \
  216.       egrep '^kernel_trap\($*,' mach/syscall_sw.h; } > $@
  217.  
  218. MIG_SYSCALL_SRCS = ${MACH_SYSCALLS/.*/mig_&.c} ${MACH_PORT_SYSCALLS/.*/mig_&.c}
  219.  
  220. ${MIG_SYSCALL_SRCS} : $${@/mig_(.*)\.c/\1.c}
  221.     name=${@/mig_(.*)\.c/\1}; \
  222.     sed -e "s/$${name}/mig_$${name}/g" < $${name}.c > mig_$${name}.c
  223.  
  224. MACH_USER_SRCS = ${MACH_ROUTINES/.*/&.c} ${MACH_SYSCALLS/.*/&.c}
  225. MACH_SRCS = mach_interface.h ${MACH_USER_SRCS} mach_server.c
  226.  
  227. ${MACH_SRCS} : mach/mach.defs
  228.     ${MIG} ${MIGFLAGS} -i ./ -user '$${MACH_USER_SRCS}' -header mach_interface.h -server mach_server.c mach/mach.defs
  229.  
  230. MACH_PORT_USER_SRCS = ${MACH_PORT_ROUTINES/.*/&.c} ${MACH_PORT_SYSCALLS/.*/&.c}
  231. MACH_PORT_SRCS = mach_port.h ${MACH_PORT_USER_SRCS} mach_port_server.c
  232.  
  233. ${MACH_PORT_SRCS} : mach/mach_port.defs
  234.     ${MIG} ${MIGFLAGS} -i ./ -user '$${MACH_PORT_USER_SRCS}' -server mach_port_server.c mach/mach_port.defs
  235.  
  236. DEVICE_USER_SRCS = ${DEVICE_ROUTINES/.*/&.c}
  237. DEVICE_SRCS = device.h ${DEVICE_USER_SRCS} device_server.c
  238.  
  239. ${DEVICE_SRCS} : device/device.defs
  240.     ${MIG} ${MIGFLAGS} -i ./ -user '$${DEVICE_USER_SRCS}' -server device_server.c device/device.defs
  241.  
  242. MACH_HOST_USER_SRCS = ${MACH_HOST_ROUTINES/.*/&.c}
  243. MACH_HOST_SRCS = mach_host.h ${MACH_HOST_USER_SRCS} mach_host_server.c
  244.  
  245. ${MACH_HOST_SRCS} : mach/mach_host.defs
  246.     ${MIG} ${MIGFLAGS} -i ./ -user '$${MACH_HOST_USER_SRCS}' -server mach_host_server.c mach/mach_host.defs
  247.  
  248. MACH_DEBUG_USER_SRCS = ${MACH_DEBUG_ROUTINES/.*/&.c}
  249. MACH_DEBUG_SRCS = mach_debug.h ${MACH_DEBUG_USER_SRCS} mach_debug_server.c
  250.  
  251. ${MACH_DEBUG_SRCS} : mach_debug/mach_debug.defs
  252.     ${MIG} ${MIGFLAGS} -i ./ -user '$${MACH_DEBUG_USER_SRCS}' -server mach_debug_server.c mach_debug/mach_debug.defs
  253.  
  254. DPAGER_USER_SRCS = ${DPAGER_ROUTINES/.*/&.c}
  255. DPAGER_SRCS = default_pager.h ${DPAGER_USER_SRCS} default_pager_server.c
  256.  
  257. ${DPAGER_SRCS} : mach/default_pager.defs
  258.     ${MIG} ${MIGFLAGS} -i ./ -user '$${DPAGER_USER_SRCS}' -server default_pager_server.c mach/default_pager.defs
  259.  
  260. BOOTSTRAP_USER_SRCS = ${BOOTSTRAP_ROUTINES/.*/&.c}
  261. BOOTSTRAP_SRCS = bootstrap.h ${BOOTSTRAP_USER_SRCS} bootstrap_server.c
  262.  
  263. ${BOOTSTRAP_SRCS} : mach/bootstrap.defs
  264.     ${MIG} ${MIGFLAGS} -i ./ -user '$${BOOTSTRAP_USER_SRCS}' -server bootstrap_server.c mach/bootstrap.defs
  265.  
  266. EXC_SRCS = exc.h exc_user.c exc_server.c
  267.  
  268. ${EXC_SRCS} : mach/exc.defs
  269.     ${MIG} ${MIGFLAGS} -user exc_user.c -server exc_server.c mach/exc.defs
  270.  
  271. NOTIFY_SRCS = notify_user.h notify_user.c notify_server.c
  272.  
  273. ${NOTIFY_SRCS} : mach/notify.defs
  274.     ${MIG} ${MIGFLAGS} -header notify_user.h -user notify_user.c -server notify_server.c mach/notify.defs
  275.  
  276. seqnos_notify_server.c : mach/notify.defs
  277.     ${MIG} ${MIGFLAGS} -DSEQNOS -header /dev/null -user /dev/null -server seqnos_notify_server.c mach/notify.defs
  278.  
  279. MEMORY_OBJECT_SRCS = memory_object_user.h \
  280.     memory_object_user.c memory_object_server.c
  281.  
  282. ${MEMORY_OBJECT_SRCS} : mach/memory_object.defs
  283.     ${MIG} ${MIGFLAGS} -header memory_object_user.h -user memory_object_user.c -server memory_object_server.c mach/memory_object.defs
  284.  
  285. seqnos_memory_object_server.c : mach/memory_object.defs
  286.     ${MIG} ${MIGFLAGS} -DSEQNOS -header /dev/null -user /dev/null -server seqnos_memory_object_server.c mach/memory_object.defs
  287.  
  288. MEMORY_OBJECT_DEFAULT_SRCS = memory_object_default.h \
  289.     memory_object_default_user.c memory_object_default_server.c
  290.  
  291. ${MEMORY_OBJECT_DEFAULT_SRCS} : mach/memory_object_default.defs
  292.     ${MIG} ${MIGFLAGS} -header memory_object_default.h -user memory_object_default_user.c -server memory_object_default_server.c mach/memory_object_default.defs
  293.  
  294. seqnos_memory_object_default_server.c : mach/memory_object_default.defs
  295.     ${MIG} ${MIGFLAGS} -DSEQNOS -header /dev/null -user /dev/null -server seqnos_memory_object_default_server.c mach/memory_object_default.defs
  296.  
  297. DEVICE_REQUEST_SRCS = device_request.h device_request_user.c
  298.  
  299. ${DEVICE_REQUEST_SRCS} : device/device_request.defs
  300.     ${MIG} ${MIGFLAGS} -user device_request_user.c -server /dev/null device/device_request.defs
  301.  
  302. DEVICE_REPLY_SRCS = device_reply_server.c
  303.  
  304. ${DEVICE_REPLY_SRCS} : device/device_reply.defs
  305.     ${MIG} ${MIGFLAGS} -server device_reply_server.c -header /dev/null -user /dev/null device/device_reply.defs
  306.  
  307. NORMA_SRCS = mach_norma.h mach_norma_user.c mach_norma_server.c
  308.  
  309. ${NORMA_SRCS} : mach/mach_norma.defs
  310.     ${MIG} ${MIGFLAGS} -user mach_norma_user.c -server mach_norma_server.c mach/mach_norma.defs
  311.  
  312. MACH_I386_SRCS = mach_i386.h mach_i386_user.c mach_i386_server.c
  313.  
  314. ${MACH_I386_SRCS} : mach/i386/mach_i386.defs
  315.     ${MIG} ${MIGFLAGS} -user mach_i386_user.c -server mach_i386_server.c mach/i386/mach_i386.defs
  316.  
  317. # This is a funny one.  We do the mig into a temporary directory and
  318. # then pick out the one file that we actually want.  We use a
  319. # temporary directory to avoid interfering with the files normally
  320. # generated from mach/mach.defs.  We use htg_vm_map.defs instead of
  321. # using mach/mach.defs directly so that the dependencies show up in
  322. # htg_vm_map.defs.d instead of overwriting mach.defs.d.
  323.  
  324. htg_vm_map.c : htg_vm_map.defs
  325.     -${RM} -r tmp
  326.     mkdir tmp
  327.     ${MIG} ${MIGFLAGS} -DEMULATOR -i tmp/ -user htg_vm_map.c -header tmp/mach_interface.h -server /dev/null htg_vm_map.defs
  328.     mv tmp/htg_vm_map.c htg_vm_map.c
  329.  
  330. htg_vm_map.defs : mach/mach.defs
  331.     ln -s $? $@
  332.  
  333. htg_vm_map.o : mach_interface.h
  334.  
  335. # mig generated code normally does stringent type-checking of received
  336. # messages.  We disable this type-checking (for performance reasons)
  337. # on messages that are received from the kernel, because the kernel
  338. # is trusted to send correct messages.  Exceptions:
  339. #    mach_debug user stubs - the mach_debug interface changes often,
  340. #        so type-checking is useful to catch version skew
  341. #    exc_server.c - users also have access to exception ports and
  342. #        can make exception RPCs directly
  343.  
  344. NO_TYPE_CHECK_SRCS = ${MACH_USER_SRCS} ${MACH_PORT_USER_SRCS} \
  345.     ${MIG_SYSCALL_SRCS} ${DEVICE_USER_SRCS} ${MACH_HOST_USER_SRCS} \
  346.     notify_server.c seqnos_notify_server.c \
  347.     memory_object_server.c seqnos_memory_object_server.c \
  348.     memory_object_default_server.c \
  349.     seqnos_memory_object_default_server.c device_request_user.c \
  350.     device_reply_server.c mach_norma_user.c mach_i386_user.c \
  351.     htg_vm_map.c bootstrap_server.c ${BOOTSTRAP_USER_SRCS}
  352.  
  353. NO_TYPE_CHECK_OBJS = ${NO_TYPE_CHECK_SRCS/(.*)\.c/\1.o}
  354.  
  355. ${NO_TYPE_CHECK_OBJS} : $${@/(.*)\.o/\1.c}
  356.     ${CC} -c ${CFLAGS} -DTypeCheck=0 ${@/(.*)\.o/\1.c}
  357.  
  358. # rules to generate the libraries
  359.  
  360. MACH_OBJS = mach_init.o mach_msg.o mach_msg_send.o mach_msg_receive.o \
  361.     mach_msg_destroy.o  mach_msg_server.o
  362.  
  363. MIG_OBJS = mig_support.o mig_strncpy.o \
  364.     mig_allocate.o mig_deallocate.o mig_reply_setup.o
  365.  
  366. USER_OBJS = slot_name.o error_codes.o mach_error_string.o
  367.  
  368. LIBC_OBJS = sbrk.o fork.o Ovfork.o
  369.  
  370. PURE_I386_OBJS = mach_i386_user.o
  371.  
  372. PURE_OBJS = ${MACH_OBJS} ${MIG_OBJS} ${USER_OBJS} \
  373.     ${PURE_${TARGET_MACHINE}_OBJS} htg_vm_map.o \
  374.     device_request_user.o device_reply_server.o \
  375.     exc_user.o exc_server.o mach_norma_user.o \
  376.     memory_object_server.o seqnos_memory_object_server.o \
  377.     memory_object_default_server.o seqnos_memory_object_default_server.o \
  378.     notify_user.o notify_server.o seqnos_notify_server.o \
  379.     mach_server.o mach_port_server.o mach_host_server.o \
  380.     mach_debug_server.o mach_norma_server.o device_server.o \
  381.     default_pager_server.o memory_object_user.o \
  382.     memory_object_default_user.o ${PURE_TRAPS/.*/&.o} \
  383.     ${MACH_SYSCALLS/.*/ms_&.o} ${MACH_SYSCALLS/.*/mig_&.o} \
  384.     ${MACH_PORT_SYSCALLS/.*/ms_&.o} ${MACH_PORT_SYSCALLS/.*/mig_&.o} \
  385.     ${MACH_ROUTINES/.*/&.o} ${MACH_PORT_ROUTINES/.*/&.o} \
  386.     ${DEVICE_ROUTINES/.*/&.o} ${MACH_HOST_ROUTINES/.*/&.o} \
  387.     ${MACH_DEBUG_ROUTINES/.*/&.o} ${DPAGER_ROUTINES/.*/&.o} \
  388.     bootstrap_server.o ${BOOTSTRAP_ROUTINES/.*/&.o}
  389.  
  390. UNIXOID_OBJS = mach_init_ports.o mach_error.o \
  391.     ${LIBC_OBJS} ${UNIXOID_TRAPS/.*/&.o}
  392.  
  393. SA_VAX_OBJS     = urem.o udiv.o
  394. SA_SUN3_OBJS    = start_float.o
  395. SA_I386_OBJS    = gcc.o memcpy.o
  396. SA_I860_OBJS    = pre_crt0.o
  397. SA_LUNA88K_OBJS = gcc.o
  398.  
  399. SA_OBJS = mach_init_sa.o ${SA_${TARGET_MACHINE}_OBJS} \
  400.     exit.o _setjmp.o bzero.o bcopy.o \
  401.     strcmp.o strlen.o strncpy.o strcat.o strcpy.o \
  402.     doprnt.o printf.o sprintf.o panic.o \
  403.     get_privileged_ports.o
  404.  
  405.  
  406. LIBMACH_OBJS = ${PURE_OBJS} ${UNIXOID_OBJS}
  407.  
  408. libmach.a : ${LIBMACH_OBJS}
  409.     ${RM} $@
  410.     ${AR} cq $@ ${LIBMACH_OBJS}
  411.     ${RANLIB} $@
  412.  
  413. LIBMACH_SA_OBJS = ${PURE_OBJS} ${SA_OBJS}
  414.  
  415. libmach_sa.a : ${LIBMACH_SA_OBJS}
  416.     ${RM} $@
  417.     ${AR} cq $@ ${LIBMACH_SA_OBJS}
  418.     ${RANLIB} $@
  419.  
  420. # Special '.cc' suffix for putting crt0 thru cpp twice.
  421.  
  422. .SUFFIXES: .cc
  423.  
  424. .cc.o:
  425.     ${CP} $*.cc $*.c
  426.     ${CC} -S -DCRT0 $*.c
  427.     ${CPP} $*.s > $*.i
  428.     ${AS} ${ASFLAGS} -o $*.o $*.i
  429.  
  430. -include Makedep
  431.