1# 2# Kernel Module Library code makefile 3# 4 5export MakeInc_cmd=${SRCROOT}/makedefs/MakeInc.cmd 6export MakeInc_def=${SRCROOT}/makedefs/MakeInc.def 7export MakeInc_rule=${SRCROOT}/makedefs/MakeInc.rule 8export MakeInc_dir=${SRCROOT}/makedefs/MakeInc.dir 9 10 11include $(MakeInc_cmd) 12include $(MakeInc_def) 13 14INSTALL_DIR = $(DSTROOT)/usr/lib 15KMOD_NAME = libkmod 16KMODCPP_NAME = libkmodc++ 17LIB_INSTALL_FLAGS = -p -m 444 18 19# -mkernel implies -mlong-branch/-mlong-calls/-mno-red-zone as needed for 20# code linked into kexts 21# -fno-stack-protector is necessary for the kernel, but not for kexts 22CFLAGS_KMOD = $(filter-out -O0 -O1 -O2 -O3 -O4 -Os -Oz -freorder-blocks -flto -fno-stack-protector,$(CFLAGS)) \ 23 -Os -mkernel -Wall 24 25ifneq ($(MACHINE_CONFIG), DEFAULT) 26COMPOBJROOT = $(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)/kmod 27INSTOBJROOT = $(OBJROOT)/$(INSTALL_TYPE)_$(ARCH_CONFIG)_$(MACHINE_CONFIG)/$(COMPONENT)/kmod 28else 29COMPOBJROOT = $(OBJROOT)/$(KERNEL_CONFIG)_$(ARCH_CONFIG)/$(COMPONENT)/kmod 30INSTOBJROOT = $(OBJROOT)/$(INSTALL_TYPE)_$(ARCH_CONFIG)/$(COMPONENT)/kmod 31endif 32 33KMOD_CFILES = c_start.c c_stop.c 34KMODCPP_CFILES = cplus_start.c cplus_stop.c 35 36KMOD_OFILES = $(KMOD_CFILES:.c=.o) 37KMODCPP_OFILES = $(KMODCPP_CFILES:.c=.o) 38 39ALL_OFILES = $(KMOD_OFILES) $(KMODCPP_OFILES) 40 41$(ALL_OFILES): %.o : %.c 42 @echo LIBKMOD_CC $@ 43 $(_v)${LIBKMOD_CC} -c ${CFLAGS_KMOD} ${${join $@,_CFLAGS}} ${INCFLAGS} ${${join $@,_INCFLAGS}} -o $(COMPOBJROOT)/$(*F).o $< 44 45$(COMPOBJROOT)/$(KMOD_NAME).a: $(KMOD_OFILES) 46 @echo LIBTOOL $(notdir $@) 47 $(_v)$(LIBTOOL) -static -o $@ $^ $(_vstdout) 2>&1 48 49$(COMPOBJROOT)/$(KMODCPP_NAME).a: $(KMODCPP_OFILES) 50 @echo LIBTOOL $(notdir $@) 51 $(_v)$(LIBTOOL) -static -o $@ $^ $(_vstdout) 2>&1 52 53do_build_all: $(COMPOBJROOT)/$(KMOD_NAME).a $(COMPOBJROOT)/$(KMODCPP_NAME).a 54 55$(INSTALL_DIR)/%.a: $(INSTOBJROOT)/%.a 56 @echo Installing $< in $@; 57 $(_v)$(RM) $@ || true; \ 58 ${MKDIR} $(INSTALL_DIR) $(SYMROOT); \ 59 if [ $(MACHINE_CONFIG) = DEFAULT ]; then \ 60 allarchs=""; \ 61 for onearch in $(INSTALL_ARCHS); do \ 62 if [ $${onearch} = ARM ] ; then \ 63 archdir=$(OBJROOT)/$(KERNEL_CONFIG)_$${onearch}_$(DEFAULT_ARM_MACHINE_CONFIG)/$(COMPONENT); \ 64 else \ 65 archdir=$(OBJROOT)/$(KERNEL_CONFIG)_$${onearch}/$(COMPONENT); \ 66 fi; \ 67 if [ -e $${archdir}/kmod/$(*F).a ]; then \ 68 allarchs="$${allarchs} $${archdir}/kmod/$(*F).a"; \ 69 fi; \ 70 done; \ 71 cmd="$(LIPO) $${allarchs} -create -output $(SYMROOT)/$(*F).a"; \ 72 echo $$cmd; eval $$cmd; \ 73 else \ 74 my_counter=1; \ 75 my_innercounter=1; \ 76 outputfile=$(SYMROOT)/$(*F).a; \ 77 for my_config in $(TARGET_CONFIGS_UC); do \ 78 if [ $${my_counter} -eq 1 ]; then \ 79 my_counter=2; \ 80 my_kconfig=$${my_config}; \ 81 elif [ $${my_counter} -eq 2 ]; then \ 82 my_counter=3; \ 83 my_aconfig=$${my_config}; \ 84 else \ 85 my_counter=1; \ 86 if [ $${my_aconfig} = ARM ] ; then \ 87 if [ $${my_config} = DEFAULT ] ; then \ 88 my_config=$(DEFAULT_ARM_MACHINE_CONFIG); \ 89 fi; \ 90 fi; \ 91 inputfile=$(OBJROOT)/$${my_kconfig}_$${my_aconfig}_$${my_config}/$(COMPONENT)/kmod/$(*F).a; \ 92 if [ -e $${inputfile} ]; then \ 93 if [ $${my_innercounter} -eq 1 ]; then \ 94 my_innercounter=2; \ 95 cmd="$(LIPO) -create $${inputfile} -o $${outputfile}"; \ 96 else \ 97 cmd="$(LIPO) -create $${outputfile} $${inputfile} -o $${outputfile} || true"; \ 98 fi; \ 99 echo $$cmd; eval $$cmd; \ 100 fi; \ 101 fi; \ 102 done; \ 103 fi; \ 104 cmd="$(INSTALL) $(LIB_INSTALL_FLAGS) $(SYMROOT)/$(*F).a $@"; \ 105 echo $$cmd; eval $$cmd 106 107do_build_install: $(INSTALL_DIR)/$(KMOD_NAME).a $(INSTALL_DIR)/$(KMODCPP_NAME).a 108 109# include $(MakeInc_rule) 110include $(MakeInc_dir) 111