📄 makefile.rules
字号:
then mv -f "$$@.d.tmp" "$$@.d" ; \ else rm -f "$$@.d.tmp" ; exit 1; \ fiendef# Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)define COMPILE_cc_o_template$(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " CXX $$@" $(Q) if $$(cc_o_COMPILE) $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \ then mv -f "$$@.d.tmp" "$$@.d" ; \ else rm -f "$$@.d.tmp" ; exit 1; \ fiendef# Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)define COMPILE_S_o_template$(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " AS $$@" $(Q) if $$(S_o_COMPILE) -D__ASSEMBLY__ $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \ then if [ -e "$$@.d.tmp" ] ; then mv -f "$$@.d.tmp" "$$@.d" ; fi ; \ else rm -f "$$@.d.tmp" ; exit 1; \ fiendef# Syntax: $(call CMETRIC_o_h_template,<object_file>,<target_header>)define CMETRIC_o_h_template$(2): $(1) @$(QUIET_CMD_ECHO) " CMETRIC $$@" $(Q)if [ -n `dirname $$@` ] ; then \ if [ ! -e `dirname $$@` ] ; then \ mkdir -p `dirname $$@` ; fi ; fi $(Q)echo >$$@ '/* Automatically generated from $$< */' $(Q)echo >>$$@ '/* Conditionals to control compilation */' $(Q)set -o pipefail ; $(NM) $$< \ | sed -n 's/^ *0*\(0[0-9A-Fa-f]*\) *A *_cmetric2cond_\([A-Za-z_0-9]*\) */#define \2 0x\1/p' \ | sort >>$$@ $(Q)echo >>$$@ '/* Defines from the values defined to symbols */' $(Q)set -o pipefail ; $(NM) $$< \ | sed -n 's/^ *0*\(0[0-9A-Fa-f]*\) *A *_cmetric2def_\([A-Za-z_0-9]*\) */#define \2 0x\1/p' \ | sort >>$$@endefdefine COMPILE_idl_template$(2).c $(2)-stubs.c $(2)-skels.c $(2)-common.c $(2).h: $(1) @$(QUIET_CMD_ECHO) " IDL $$@" $(Q) $$(idl_COMPILE) $(1)endef# Syntax: $(call PROGRAM_template,<dir>,<executable-name>,<executable-suffix>,<linker-sript>)define PROGRAM_templateUSER_IDLS += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL)$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-skels.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-common.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-stubs.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-common.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_IDL:%.idl=%.c))USER_GEN_SOURCES += $$($(1)_GEN_SOURCES)$(foreach x, $(USER_SOURCES2OBJS),$(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\ $$($(1)_SOURCES) $$($(1)_GEN_SOURCES))))$(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))USER_OBJS += $$($(1)_OBJS)USER_SOURCES += $$($(1)_SOURCES)$(2)/$(1): $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " LINK $$@" $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES:%.cxx=%.cc))" ] ; then echo $$(CC) ; else echo $$(CXX) ; fi) \ $$($(1)_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(LDFLAGS) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $(2)/$(1) @echo "$(2)/$(1): \\" >$(USER_OBJS_DIR)/$(1).exe.d @sed -n -e 's/^LOAD \(.*\)$$$$/ \1 \\/p' $(USER_OBJS_DIR)/$(1).exe.map >>$(USER_OBJS_DIR)/$(1).exe.d @echo >>$(USER_OBJS_DIR)/$(1).exe.dendef# Syntax: $(call LIBRARY_template,<library-name>)define LIBRARY_templateUSER_IDLS += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL)$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-skels.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-common.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-stubs.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-common.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_IDL:%.idl=%.c))USER_GEN_SOURCES += $$($(1)_GEN_SOURCES)$(foreach x, $(USER_SOURCES2OBJS),$(1)_OBJS += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\ $$($(1)_SOURCES) $$($(1)_GEN_SOURCES))))$(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))USER_OBJS += $$($(1)_OBJS)USER_SOURCES += $$($(1)_SOURCES)$(USER_LIB_DIR)/lib$(1).a: $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " AR $$@" $(Q) $(AR) rcs $$@ $$^endef# Syntax: $(call SOLIB_template,<library-name>)define SOLIB_templateUSER_IDLS += $$($(1)_SERVER_IDL) $$($(1)_CLIENT_IDL) $$($(1)_IDL)$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-skels.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_SERVER_IDL:%.idl=%-common.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-stubs.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_CLIENT_IDL:%.idl=%-common.c))$(1)_GEN_SOURCES += $$(filter %.c,$$($(1)_IDL:%.idl=%.c))SOLIB_GEN_SOURCES += $$($(1)_GEN_SOURCES)$(foreach x, $(USER_SOURCES2OBJSLO),$(1)_OBJSLO += $$(patsubst %$(notdir $(x)),%$(dir $(x)),$$(filter %$(notdir $(x)),\ $$($(1)_SOURCES) $$($(1)_GEN_SOURCES))))$(1)_OBJSLO := $$(sort $$($(1)_OBJSLO:%/=%))SOLIB_OBJS += $$($(1)_OBJSLO)SOLIB_SOURCES += $$($(1)_SOURCES)$(USER_LIB_DIR)/lib$(1).$(SOLIB_EXT): $$($(1)_OBJSLO) @$(QUIET_CMD_ECHO) " LINK $$@" $(Q) $(LD) --shared --soname=lib$(1).$(SOLIB_EXT) -o $$@ $$^ $$(LOADLIBES) $$(LDFLAGS) endeflibrary-pass-local: $(addprefix $(USER_INCLUDE_DIR)/,$(cmetric_include_HEADERS)) \ $(lib_LIBRARIES:%=$(USER_LIB_DIR)/lib%.a) $(shared_LIBRARIES:%=$(USER_LIB_DIR)/lib%.$(SOLIB_EXT))binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%)utils-pass-local: $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%)# Special rules for CMETRIC generated headers$(foreach cmetrh,$(cmetric_include_HEADERS),$(eval $(call COMPILE_c_o_template,\ $(SOURCES_DIR)/$($(basename $(notdir $(cmetrh)))_CMETRIC_SOURCES),\ $($(basename $(notdir $(cmetrh)))_CMETRIC_SOURCES:%.c=%.o),)))$(foreach cmetrh,$(cmetric_include_HEADERS),$(eval $(call CMETRIC_o_h_template,\ $($(basename $(notdir $(cmetrh)))_CMETRIC_SOURCES:%.c=%.o),\ $(addprefix $(USER_INCLUDE_DIR)/,$(cmetrh)))))GEN_HEADERS+=$(cmetric_include_HEADERS:%=$(USER_INCLUDE_DIR)/%)GEN_HEADERS+=$(filter %.h,$(USER_IDLS:%.idl=%.h))# Generate rules for compilation of programs and libraries$(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR))))$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR))))$(foreach lib,$(lib_LIBRARIES),$(eval $(call LIBRARY_template,$(lib))))$(foreach lib,$(shared_LIBRARIES),$(eval $(call SOLIB_template,$(lib))))-include $(USER_OBJS_DIR)/*.dendif#=====================================================================# Kernel-space rules and templates to compile modules, libraries etc.ifdef KERN_RULE_TEMPLATES$(KERN_LIB_DIR)/kernel.mk: $(LINUX_DIR)/.config $(MAKERULES_DIR)/kernelcfg2mk @$(QUIET_CMD_ECHO) " KCFG2MK $$@" $(Q) $(MAKERULES_DIR)/kernelcfg2mk $(LINUX_DIR) $(KERN_LIB_DIR)ifeq ($(CONFIG_RTLINUX),y)include $(RTL_DIR)/rtl.mkKERN_CC = $(CC)kern_GCCLIB_DIR=$(shell LANG=C LC_ALL=C LC_MESSAGES=C $(CC) -print-search-dirs | sed -n -e 's/^install: \(.*\)$$/\1/p' )INCLUDES := -I $(KERN_INCLUDE_DIR) $(INCLUDE) $(rtlinux_INCLUDES) $(kernel_INCLUDES)#-DEXPORT_NO_SYMBOLSc_o_kern_COMPILE = $(KERN_CC) -idirafter $(kern_GCCLIB_DIR)/include $(INCLUDES) $(CFLAGS) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB -nostdinccc_o_kern_COMPILE = $(CXX) $(INCLUDES) $(CXXFLAGS) -DOMK_FOR_KERNEL -DEXPORT_SYMTABKERN_EXE_SUFFIX := .oKERN_ARCH = $(ARCH)KERN_LD = $(LD)KERN_AR = $(AR)else # CONFIG_RTLINUXinclude $(KERN_LIB_DIR)/kernel.mkifeq ($(LINUX_SRC),)LINUX_SRC = $(LINUX_DIR)endifkernel_INCLUDES += -I $(LINUX_DIR) -idirafter $(LINUX_SRC)/include/linuxifdef LINUX_CCKERN_CC = $(LINUX_CC)kern_GCCLIB_DIR=$(shell LANG=C LC_ALL=C LC_MESSAGES=C $(LINUX_CC) -print-search-dirs | sed -n -e 's/^install: \(.*\)$$/\1/p' )elseKERN_CC = echo KERN_CC not defined - compilation skippedendifc_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CPPFLAGS) $(LINUX_CFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTAB -nostdinccc_o_kern_COMPILE = $(KERN_CC) $(kernel_INCLUDES) -idirafter $(kern_GCCLIB_DIR)/include $(LINUX_CPPFLAGS) $(LINUX_CFLAGS) $(LINUX_CFLAGS_MODULE) -DOMK_FOR_KERNEL -DEXPORT_SYMTABKERN_EXE_SUFFIX := $(LINUX_MODULE_EXT)KERN_LDFLAGS = $(LINUX_LDFLAGS)ifdef LINUX_ARCHKERN_ARCH = $(LINUX_ARCH)elseKERN_ARCH = echo KERN_ARCH not defined - skippedendififdef LINUX_LDKERN_LD = $(LINUX_LD)elseKERN_LD = echo KERN_LD not defined - skippedendififneq ($(LINUX_AR),)KERN_AR = $(LINUX_AR)elseKERN_AR = $(AR)endififeq ($(LINUX_QUOTE_MODNAME),y)KERN_MQ=\"endifendif # CONFIG_RTLINUXKERN_LOADLIBES += -L$(KERN_LIB_DIR) KERN_LOADLIBES += $(rtlinux_LOADLIBES:%=-l%)KERN_LOADLIBES += $(kernel_LOADLIBES:%=-l%)# Check GCC version for kernel part of buildifndef kern_CC_MAJOR_VERSIONkern_CC_MAJOR_VERSION := $(shell $(KERN_CC) -dumpversion | sed -e 's/\([^.]\)\..*/\1/')endif# Prepare suitable define for dependency buildingifeq ($(kern_CC_MAJOR_VERSION),2)kern_CC_DEPFLAGS = -Wp,-MD,"$@.d.tmp"elsekern_CC_DEPFLAGS = -MT $@ -MD -MP -MF "$@.d.tmp"endififeq ($(KERN_EXE_SUFFIX),.ko)ifeq ($(wildcard $(LINUX_DIR)/scripts/mod/modpost),)KERN_MODPOST = $(LINUX_DIR)/scripts/modpostelseKERN_MODPOST = $(LINUX_DIR)/scripts/mod/modpostendifKERN_MODULES_LINK_DIR = $(KERN_MODPOST_DIR)KERN_LINK_SUFFIX = .oelseKERN_MODULES_LINK_DIR = $(KERN_MODULES_DIR)KERN_LINK_SUFFIX = $(KERN_EXE_SUFFIX)endifdefine COMPILE_c_o_kern_template$(2): $(1) $(LOCAL_CONFIG_H) @$(QUIET_CMD_ECHO) " CC [K] $$@" $(Q) if $$(c_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $(3) -D"KBUILD_BASENAME=$(KERN_MQ)$(notdir $(basename $(1)))$(KERN_MQ)" \ -o $$@ -c $$< ; \ then mv -f "$$@.d.tmp" "$$@.d" ; \ else rm -f "$$@.d.tmp" ; exit 1; \ fiendefdefine COMPILE_cc_o_kern_template$(2): $(1) $(LOCAL_CONFIG_H) @$(QUIET_CMD_ECHO) " CXX [K] $$@" $(Q) if $$(cc_o_kern_COMPILE) $$(kern_CC_DEPFLAGS) $(3) -D"KBUILD_BASENAME=$(KERN_MQ)$(notdir $(basename $(1)))$(KERN_MQ)" \ -o $$@ -c $$< ; \ then mv -f "$$@.d.tmp" "$$@.d" ; \ else rm -f "$$@.d.tmp" ; exit 1; \ fiendefdefine MODULE_kern_template$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cc=%.o))$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.cxx=%.o))$(1)_OBJS := $$(sort $$($(1)_OBJS))KERN_OBJS += $$($(1)_OBJS)KERN_SOURCES += $$($(1)_SOURCES)# this is hack to build "__this_module" structure for 2.6.x kernels# modpost is used for that purpose now#$(1).mod.c:# echo "\# #include <linux/version.h>@\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -