]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/Modules.ia32
b34209f7def03ecd65345db619fe312c51556801
[l4.git] / kernel / fiasco / src / Modules.ia32
1 # -*- makefile -*-
2
3 SUBSYSTEMS = JABI ABI DRIVERS KERNEL CRT0 BOOT LIBK LIBAMM \
4              CHECKSUM CXXLIB MINILIBC LIBKERN TCBOFFSET SYMBOLS VERSION GBLCFG
5
6 ifeq ("$(CONFIG_GSTABS)","y")      
7   SUBSYSTEMS            += LINES
8 endif
9
10 PREPROCESS_PARTS        += arch $(CONFIG_ABI) 32bit iofp         \
11                            $(CONFIG_XARCH) apic abs-timeout-hack \
12                            i8259 pc i8254 fpu                    \
13                            abs_syscalls auto_map_kip
14
15 OBJ_SPACE-y = phys
16 OBJ_SPACE-  = virt
17 OBJ_SPACE   = $(OBJ_SPACE-$(CONFIG_DISABLE_VIRT_OBJ_SPACE))
18
19 PREPROCESS_PARTS += obj_space_$(OBJ_SPACE)
20
21 PREPROCESS_PARTS-$(CONFIG_MP)                += mp
22 PREPROCESS_PARTS-$(CONFIG_LIST_ALLOC_SANITY) += list_alloc_debug
23 PREPROCESS_PARTS-$(CONFIG_JDB)               += debug log
24 PREPROCESS_PARTS-$(CONFIG_PROFILE)           += profile
25 PREPROCESS_PARTS-$(CONFIG_SCHED_PIT)         += pit_timer
26 PREPROCESS_PARTS-$(CONFIG_SCHED_RTC)         += rtc_timer
27 PREPROCESS_PARTS-$(CONFIG_SCHED_APIC)        += apic_timer
28 PREPROCESS_PARTS-$(CONFIG_SCHED_HPET)        += hpet_timer
29 PREPROCESS_PARTS-$(CONFIG_SERIAL)            += serial 16550
30 PREPROCESS_PARTS-$(CONFIG_WATCHDOG)          += watchdog
31 PREPROCESS_PARTS-$(CONFIG_PERF_CNT)          += perf_cnt
32 PREPROCESS_PARTS-$(CONFIG_IO_PROT)           += io
33 PREPROCESS_PARTS-$(CONFIG_CPU_VIRT)          += svm
34 PREPROCESS_PARTS-$(CONFIG_SCHED_FIXED_PRIO)  += sched_fixed_prio
35 PREPROCESS_PARTS-$(CONFIG_SCHED_WFQ)         += sched_wfq
36 PREPROCESS_PARTS-$(CONFIG_SCHED_FP_WFQ)      += sched_fp_wfq
37 PREPROCESS_PARTS-$(CONFIG_HANDLE_SEGMENTS)   += segments
38 PREPROCESS_PARTS-$(CONFIG_IO_PROT_IOPL_3)    += iopl3
39
40 PREPROCESS_PARTS        += $(PREPROCESS_PARTS-y)
41
42 #
43 # TYPES subsystem
44 #
45 PRIVATE_INCDIR          += types/$(CONFIG_XARCH) types
46
47 #
48 # ABI Subsystem
49 #
50 ABI                     := libabi.a
51 VPATH                   += abi/$(CONFIG_XARCH) abi
52 INTERFACES_ABI          := l4_fpage l4_msg_item l4_buf_desc kip l4_types \
53                            l4_error virt
54
55 kip_IMPL                := kip kip-debug kip-ia32 kip-ia32-debug
56 l4_types_IMPL           := l4_types l4_types-debug
57 virt_IMPL               := virt-ia32-amd64
58
59 #
60 # JABI Subsystem
61 #
62 JABI                    := libjabi.a
63 VPATH                   += jabi/$(CONFIG_XARCH) jabi
64 INTERFACES_JABI         := jdb_ktrace
65
66 #
67 # DRIVERS subsystem
68 #
69 DRIVERS                 := libdrivers.a libgluedriverslibc.a
70 VPATH                   += drivers/$(CONFIG_XARCH) drivers
71 PRIVATE_INCDIR          += drivers/$(CONFIG_XARCH) drivers
72 INTERFACES_DRIVERS      := mux_console console keyb io pci vga_console reset \
73                            processor delayloop mem
74 ifeq ("$(CONFIG_SERIAL)","y")
75 INTERFACES_DRIVERS      += filter_console uart
76 endif
77 reset_IMPL              := reset-ia32
78 uart_IMPL               := uart uart-16550
79 CXXSRC_DRIVERS          := glue_libc.cc
80 NOOPT                   += $(patsubst %.o, %, $(OBJ_DRIVERS))
81
82 keyb_IMPL               := keyb keyb-pc 
83 io_IMPL                 := io io-ia32
84 mem_IMPL                := mem mem-ia32
85 processor_IMPL          := processor processor-ia32
86
87 #
88 # KERNEL subsystem
89 #
90 KERNEL                  := fiasco.image
91 VPATH                   += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern
92 PRIVATE_INCDIR          += kern/$(CONFIG_XARCH) kern/ia32/32 kern/ia32 kern
93
94 INTERFACES_KERNEL       := cpu_mask rcupdate pages kobject_mapdb \
95                            mem_region per_cpu_data startup boot_info cmdline \
96                            __main queue queue_item l4_buf_iter irq_pin \
97                            bitmap acpi io_apic mapping spin_lock \
98                            mapping_tree mappable dbg_page_info  \
99                            mapdb region pic dirq_pic_pin dirq_io_apic \
100                            kobject_dbg kobject ready_queue_wfq ready_queue_fp \
101                            obj_space ptab_base io_space_sigma0 irq_msi \
102                            io_space ram_quota ref_ptr ref_obj \
103                            mem_space mem_space_sigma0 space vlog \
104                            kmem kmem_alloc slab_cache_anon mem_layout        \
105                            kmem_slab_simple kmem_slab switch_lock kip_init   \
106                            thread_lock helping_lock cpu_lock timer timeout   \
107                            ipc_timeout timeslice_timeout    \
108                            per_cpu_data_alloc vcpu kobject_helper icu_helper \
109                            thread_state context mp_lock sender receiver      \
110                            mem_unit factory lock ipc_sender \
111                            thread syscalls kernel_thread map_util irq banner \
112                            warn app_cpu_thread                               \
113                            dirq globals apic watchdog kernel_uart pit        \
114                            checksum main config mapped_alloc      \
115                            vmem_alloc paging fpu fpu_state fpu_alloc cpu     \
116                            entry_frame kernel_console boot_console profile   \
117                            ipc_gate task kernel_task irq_controller          \
118                            irq_chip terminate continuation \
119                            sched_context utcb_init \
120                            perf_cnt x86desc gdt idt tss trap_state \
121                            buddy_alloc vkey kdb_ke prio_list ipi timer_irq \
122                            scheduler clock vm_factory \
123                            sys_call_page
124
125 INTERFACES_KERNEL-$(CONFIG_CPU_VIRT) += svm vm vm_svm
126
127 PREPROCESS_PARTS        += ulock
128 INTERFACES_KERNEL       += u_semaphore
129
130
131 apic_IMPL               := apic-ia32 apic-ia32-mp
132 boot_console_IMPL       := boot_console-ia32-amd64
133 boot_info_IMPL          := boot_info boot_info-ia32
134 clock_IMPL              := clock clock-ia32
135 config_IMPL             := config config-ia32-32 config-ia32
136 context_IMPL            := context context-ia32 context-ia32-32 context-vcpu
137 continuation_IMPL       := continuation-ia32-32
138 cpu_IMPL                := cpu cpu-ia32 cpu-32
139 dirq_IMPL               := dirq dirq-ia32-ux
140 dirq_pic_pin_IMPL       := dirq_pic_pin dirq_pic_pin-ia32-ux
141 entry_frame_IMPL        := entry_frame entry_frame-ia32-ux \
142                            entry_frame-abs-timeout-hack
143 fpu_IMPL                := fpu fpu-ia32-ux fpu-ia32
144 ipi_IMPL                := ipi ipi-ia32
145 kdb_ke_IMPL             := kdb_ke kdb_ke-ia32
146 kernel_thread_IMPL      := kernel_thread kernel_thread-std kernel_thread-ia32
147 kernel_uart_IMPL        := kernel_uart kernel_uart-16550
148 kip_init_IMPL           := kip_init-ia32
149 kmem_IMPL               := kmem-ia32 kmem-ia32-32
150 kmem_alloc_IMPL         := kmem_alloc kmem_alloc-ia32
151 main_IMPL               := main-ia32-32 main-ia32
152 mapping_IMPL            := mapping-ia32-32 mapping
153 map_util_IMPL           := map_util map_util-mem map_util-io map_util-objs
154 mem_layout_IMPL         := mem_layout mem_layout-ia32 mem_layout-ia32-32
155 mem_space_IMPL          := mem_space mem_space-user mem_space-ia32
156 mem_unit_IMPL           := mem_unit-ia32
157 obj_space_IMPL          := obj_space obj_space-$(OBJ_SPACE)
158 paging_IMPL             := paging-ia32-32 paging-ia32 paging
159 perf_cnt_IMPL           := perf_cnt perf_cnt-ia32
160 pic_IMPL                := pic pic-i8259
161 pit_IMPL                := pit-i8254
162 pmem_alloc_IMPL         := pmem_alloc pmem_alloc-ia32-ux
163 rtc_IMPL                := rtc-ia32
164 sched_context_IMPL      := sched_context-wfq sched_context-fixed_prio \
165                            sched_context-fp_wfq sched_context
166 space_IMPL              := space space-ia32
167 spin_lock_IMPL          := spin_lock spin_lock-ia32
168 startup_IMPL            := startup startup-ia32
169 sys_call_page_IMPL      := sys_call_page sys_call_page-abs-ia32
170 task_IMPL               := task task-ia32-amd64
171 tb_entry_IMPL           := tb_entry tb_entry-ia32-32
172 timer_IMPL              := timer timer-ia32-amd64-ux
173 thread_IMPL             := thread thread-ia32 thread-ia32-32 \
174                            thread-ipc \
175                            thread-list \
176                            thread-pagefault thread-log      \
177                            thread-debug thread-dbf thread-ulock thread-vcpu
178 utcb_init_IMPL          := utcb_init utcb_init-ia32
179 vmem_alloc_IMPL         := vmem_alloc vmem_alloc-ia32
180 vm_factory_IMPL         := vm_factory vm_factory-ia32
181 watchdog_IMPL           := watchdog watchdog-ia32
182
183 INTERFACES_KERNEL-$(CONFIG_SERIAL) += uart_console
184
185 ifeq ("$(CONFIG_PROFILE)","y")
186   cpu_lock_IMPL         := cpu_lock cpu_lock-pic
187 else
188   cpu_lock_IMPL         := cpu_lock cpu_lock-generic
189 endif
190
191 ifeq ("$(CONFIG_SCHED_PIT)","y")
192   timer_IMPL            += timer-pit
193 endif
194 ifeq ("$(CONFIG_SCHED_RTC)","y")
195   timer_IMPL            += timer-rtc
196   INTERFACES_KERNEL     += rtc
197 endif
198 ifeq ("$(CONFIG_SCHED_APIC)","y")
199   timer_IMPL            += timer-apic
200 endif
201 ifeq ("$(CONFIG_SCHED_HPET)","y")
202   timer_IMPL            += timer-hpet
203   INTERFACES_KERNEL     += hpet
204 endif
205
206
207 ifeq ("$(CONFIG_IO_PROT)","y")
208   space_IMPL            += space-io
209   thread_IMPL           += thread-io
210 endif
211
212 ifeq ("$(CONFIG_JDB)","y")
213 VPATH                   += jdb/ia32/32 jdb/ia32 jdb
214 INTERFACES_KERNEL       += jdb jdb_util jdb_prompt_ext jdb_symbol jdb_lines \
215                            jdb_dbinfo jdb_bp \
216                            jdb_tbuf jdb_module jdb_core jdb_io_ports \
217                            jdb_kern_info jdb_prompt_module jdb_tbuf_output \
218                            jdb_input jdb_dump jdb_ptab jdb_misc jdb_mapdb \
219                            jdb_tcb jdb_attach_irq jdb_tbuf_init jdb_trace \
220                            jdb_trace_set jdb_counters jdb_table kern_cnt  \
221                            tb_entry tb_entry_output jdb_exit_module \
222                            jdb_tbuf_show jdb_console_buffer virq \
223                            jdb_list jdb_screen push_console jdb_timeout \
224                            jdb_handler_queue jdb_halt_thread \
225                            jdb_kern_info_kmem_alloc jdb_kern_info_region \
226                            jdb_kern_info_kip jdb_kern_info_config \
227                            loadcnt jdb_utcb jdb_thread_list \
228                            jdb_entry_frame jdb_kobject jdb_space jdb_io_apic \
229                            jdb_trap_state jdb_ipi jdb_kobject_names \
230                            jdb_rcupdate jdb_bt jdb_ipc_gate jdb_obj_space \
231                            jdb_log jdb_factory jdb_semaphore jdb_iomap \
232                            jdb_thread jdb_scheduler jdb_sender_list \
233                            jdb_regex jdb_disasm
234
235 apic_IMPL               += apic-debug
236 jdb_IMPL                := jdb jdb-ia32-amd64 jdb-ansi jdb-ia32-ux jdb-thread \
237                            jdb-int3-ia32-amd64 jdb-int3-ia32-ux
238 jdb_bp_IMPL             := jdb_bp-ia32-ux jdb_bp-ia32-amd64 jdb_bp-ia32
239 jdb_bt_IMPL             := jdb_bt-ia32-ux
240 jdb_entry_frame_IMPL    := jdb_entry_frame-ia32
241 jdb_kern_info_IMPL      := jdb_kern_info jdb_kern_info-ia32-amd64 \
242                            jdb_kern_info-ia32-ux jdb_kern_info-apic \
243                            jdb_kern_info-pci jdb_kern_info-bench \
244                            jdb_kern_info-bench-ia32-32 \
245                            jdb_kern_info-dr jdb_kern_info-mtrr
246 jdb_misc_IMPL           := jdb_misc-ia32-amd64
247 jdb_ptab_IMPL           := jdb_ptab jdb_ptab-ia32-ux-arm
248 jdb_screen_IMPL         := jdb_screen jdb_screen-ia32
249 jdb_tcb_IMPL            := jdb_tcb jdb_tcb-ia32-ux
250 jdb_trace_set_IMPL      := jdb_trace_set jdb_trace_set-ia32-ux
251
252 INTERFACES_KERNEL-$(CONFIG_JDB_MISC)    += jdb_tetris
253 endif
254
255
256 CXXSRC_KERNEL           := kernel_panic.cc libc_backend_lock.cc
257 ASSRC_KERNEL            := entry.S entry-native.S sys_call_page-asm.S
258
259 ASSRC_KERNEL-$(CONFIG_MP)               += tramp-mp.S entry-mp.S
260 ASSRC_KERNEL-$(CONFIG_CPU_VIRT)         += vm_svm_asm.S
261 ASSRC_KERNEL                            += $(ASSRC_KERNEL-y)
262
263 NOOPT                   += $(filter jdb%,\
264                              $(foreach in,$(INTERFACES_KERNEL), \
265                                $(if $($(in)_IMPL),$($(in)_IMPL),$(in))))
266 NOOPT                   += tb_entry_output $(tb_entry_IMPL) $(perf_cnt_IMPL)  \
267                            kern_cnt loadcnt $(apic_IMPL) $(watchdog_IMPL) kdb \
268                            $(kernel_uart_IMPL) push_console virq thread-dbf   \
269                            trap_state
270
271 ### When testing with test threads, uncomment the following:
272 #
273 # VPATH                 += kern-test
274 # PRIVATE_INCDIR        += kern-test
275 #
276 # INTERFACES_KERNEL     += generic_test_thread test_thread node cpu \
277 #                          back_trace cpu_guard types
278 #
279 # node_IMPL             := node node-up
280 # cpu_IMPL              := cpu cpu-perf cpu-perfp4
281 # config_IMPL           := config config-test
282 #
283 # kernel_thread_IMPL    := $(filter-out kernel_thread-std,$(kernel_thread_IMPL)) \
284 #                          kernel_thread-test
285 #
286 # Replace this definition with your own test thread.
287 # test_thread_IMPL      := test_thread-test26
288 #
289 ### End of test-thread section
290
291 #
292 # CRT0 subsystem
293 #
294 CRT0                    := crt0.o
295 ASSRC_CRT0              := crt0.S
296
297 #
298 # BOOT subsystem
299 #
300 BOOT                    := main
301 VPATH                   += boot/$(CONFIG_XARCH) boot
302 PRIVATE_INCDIR          += boot boot/ia32
303 CXXSRC_BOOT             := boot_libc_glue.cc bootstrap.cc boot_cpu.cc \
304                            direct_cons_putchar.cc
305 ASSRC_BOOT              := boot.S boot_idt.S
306 NOOPT                   += $(patsubst %.o, %, $(OBJ_BOOT))
307
308 #
309 # TCBOFFSET subsystem
310 #
311 TCBOFFSET               := tcboffset.h
312 CXXSRC_TCBOFFSET        := tcboffset.cc dump_tcboffsets.cc
313
314 #
315 # SYMBOLS subsystem
316 #
317 SYMBOLS                 := Symbols
318
319 #
320 # LINES subsystem
321 #
322 LINES                   := Lines
323 PROG_LINES              := genlines
324
325 #
326 # CHECKSUM subsystem
327 #
328 CHECKSUM                := checksum
329 CXXSRC_CHECKSUM         := genchecksum.cc
330
331 #
332 # VERSION subsystem
333 #
334 VERSION                 := version.h
335
336 #
337 # GBLCFG subsystem
338 #
339 GBLCFG                  := gblcfg.o
340 OBJ_KERNEL              += gblcfg.o
341
342 #
343 # CXXLIB Subsystem
344 #
345
346 CXXLIB                  := libcxx.a
347 VPATH                   += lib/cxxlib
348 INTERFACES_CXXLIB       := paranoia s_cruft
349
350 #
351 # LIBK subsystem
352 #
353 LIBK            := libk.a
354 VPATH           += lib/libk/$(CONFIG_XARCH) lib/libk
355 PRIVATE_INCDIR  += lib/libk/$(CONFIG_XARCH) lib/libk
356 INTERFACES_LIBK := atomic lock_guard auto_ptr std_macros dlist
357 ifeq ("$(CONFIG_PROFILE)","y")
358 INTERFACES_LIBK += gmon unistd
359 endif
360 CSRC_LIBK       += gcc_lib.c
361
362 NOPROFILE       += profile gmon
363
364 #
365 # LIBKERN Subsystem
366 #
367 LIBKERN         := libkern.a
368 VPATH           += lib/kern
369 PRIVATE_INCDIR  += lib/kern/include
370 CSRC_LIBKERN    :=
371 NOOPT           += $(patsubst %.o, %, $(OBJ_LIBKERN))
372
373 #
374 # LIBAMM subsystem
375 #
376 LIBAMM          := libamm.a
377 VPATH           += lib/amm
378 PRIVATE_INCDIR  += lib/amm
379 CSRC_LIBAMM     := amm_alloc_entry.c amm_allocate.c amm_deallocate.c \
380                    amm_destroy.c amm_dump.c amm_find_addr.c amm_find_gen.c \
381                    amm_free_entry.c amm_init.c amm_init_gen.c amm_iterate.c \
382                    amm_iterate_gen.c amm_join.c amm_modify.c amm_protect.c \
383                    amm_reserve.c amm_select.c amm_split.c
384
385 #
386 # LIBGZIP subsystem (only for Jdb)
387 #
388 ifneq ($(CONFIG_JDB_GZIP),)
389   LIBGZIP               := libgzip.a
390   VPATH                 += lib/gzip
391   PRIVATE_INCDIR        += lib/gzip
392   CSRC_LIBGZIP          := adler32.c crc32.c gzip.c trees.c deflate.c zutil.c
393   NOOPT                 += $(patsubst %.o, %, $(OBJ_LIBGZIP))
394 endif
395
396 #
397 # LIBDISASM subsystem (only for Jdb)
398 #
399 ifeq ("$(CONFIG_JDB_DISASM)","y")
400   # $(srcdir)/lib/disasm may be removed
401   ifeq ($(wildcard $(srcdir)/lib/disasm),)
402     $(error $(srcdir)/lib/disasm is missing, disable CONFIG_JDB_DISASM)
403   endif
404
405   SUBSYSTEMS        += LIBDISASM
406   KERNEL_EXTRA_LIBS += $(LIBDISASM)
407   PREPROCESS_PARTS  += jdb_disasm
408
409   LIBDISASM         := libdisasm.a
410   VPATH             += lib/disasm lib/disasm/elf lib/disasm/include \
411                        lib/disasm/include/opcode lib/disasm/opcodes \
412                        lib/disasm/libiberty lib/disasm/bfd
413   PRIVATE_INCDIR    += lib/disasm lib/disasm/elf lib/disasm/include \
414                        lib/disasm/include/opcode lib/disasm/opcodes \
415                        lib/disasm/libiberty lib/disasm/bfd
416   PRIVATE_INCDIR    += lib/disasm
417   CSRC_LIBDISASM    := disasm.c dis-init.c i386-dis.c dis-buf.c
418   NOOPT             += $(patsubst %.o, %, $(OBJ_LIBDISASM))
419 endif
420
421 #
422 # LIBPERFCTR subsystem (only for Jdb)
423 #
424 LIBPERFCTR      := libperfctr.a
425 VPATH           += lib/perfctr
426 PRIVATE_INCDIR  += lib/perfctr
427 CSRC_LIBPERFCTR := event_set_p5.c event_set_p6.c event_set_amd.c \
428                    event_set_p4.c event_set_x86.c perfctr.c \
429                    event_set_centaur.c
430 NOOPT           += $(patsubst %.o, %, $(OBJ_LIBPERFCTR))
431
432 #
433 # LIBREGEX subsystem (only for Jdb)
434 #
435 LIBREGEX        := libregex.a
436 VPATH           += lib/regex
437 PRIVATE_INCDIR  += lib/regex
438 CSRC_LIBREGEX   := alloc.c rx.c
439 NOOPT           += $(patsubst %.o, %, $(OBJ_LIBREGEX))
440
441 #
442 # MINILIBC Subsystem
443 #
444 MINILIBC        := libc.a
445 VPATH           += lib/minilibc/$(CONFIG_XARCH) lib/minilibc
446 PRIVATE_INCDIR  += lib/minilibc/$(CONFIG_XARCH)/include lib/minilibc/include
447 CSRC_MINILIBC   := atexit.c memccpy.c memcmp.c memmove.c memset.c memcpy.c \
448                    memchr.c strchr.c strcmp.c strcpy.c strlen.c strncmp.c \
449                    strncpy.c strstr.c __assert_fail.c printf.c __v_printf.c \
450                    vprintf.c strtol.c strtoul.c lltostr.c __ltostr.c \
451                    putchar.c puts.c getchar.c gets.c construction.c sprintf.c \
452                    snprintf.c vsnprintf.c vsprintf.c longjmp.c isalnum.c \
453                    isalpha.c isascii.c isblank.c iscntrl.c isdigit.c \
454                    isgraph.c islower.c isprint.c ispunct.c isspace.c \
455                    isupper.c isxdigit.c tolower.c strcspn.c strspn.c panic.c
456 ASSRC_MINILIBC  := setjmp.S
457
458 # do not profile all of MINILIBC, because it is used in the BOOT subsystem
459 NOOPT           += $(patsubst %.o, %, $(OBJ_MINILIBC))
460
461 ifeq ("$(CONFIG_JDB)","y")
462
463 ifneq ($(CONFIG_JDB_GZIP),)
464  ifneq ($(wildcard $(srcdir)/lib/gzip),)
465   SUBSYSTEMS            += LIBGZIP
466   KERNEL_EXTRA_LIBS     += $(LIBGZIP)
467   INTERFACES_KERNEL     += jdb_gzip
468  endif
469 endif
470
471 ifneq ($(wildcard $(srcdir)/lib/perfctr),)
472   SUBSYSTEMS            += LIBPERFCTR
473   KERNEL_EXTRA_LIBS     += $(LIBPERFCTR)
474   KERNEL_UNRES_SYMS     += -u perfctr_set_cputype
475 endif
476
477 ifneq ($(wildcard $(srcdir)/lib/regex),)
478   SUBSYSTEMS            += LIBREGEX
479   KERNEL_EXTRA_LIBS     += $(LIBREGEX)
480   PREPROCESS_PARTS      += jdb_regex
481 endif
482
483 endif
484
485 MODULES_FILES = $(MODULES_FILE) $(MODULES_FILE_BSP)
486
487 INTERFACES_KERNEL       += $(INTERFACES_KERNEL-y)