📄 makefile.rules
字号:
# Makefile.rules - OCERA make framework common project rules -*- makefile -*-# # (C) Copyright 2003 by Pavel Pisa - OCERA team member## The uLan driver is distributed under the Gnu General Public License. # See file COPYING for details.### input variables# V .. if set to 1, full command text is shown else short form is used# SUBDIRS .. list of subdirectories intended for make from actual directory# lib_LIBRARIES .. list of the user-space libraries# shared_LIBRARIES .. list of the user-space shared libraries# kernel_LIBRARIES .. list of the kernel-space libraries# rtlinux_LIBRARIES.. list of the RT-Linux kernel-space libraries# include_HEADERS .. list of the user-space public header files# nobase_include_HEADERS .. public headers copied even with directory part# renamed_include_HEADERS .. public headers copied to the different target name# kernel_HEADERS .. list of the kernel-space public header files# rtlinux_HEADERS .. list of the RT-Linux kernel-space public header files# bin_PROGRAMS .. list of the require binary programs# utils_PROGRAMS .. list of the development utility programs# kernel_MODULES .. list of the kernel side modules/applications# rtlinux_MODULES .. list of RT-Linux the kernel side modules/applications# xxx_SOURCES .. list of specific target sources# INCLUDES .. additional include directories and defines for user-space# kernel_INCLUDES .. additional include directories and defines for kernel-space# rtlinux_INCLUDES .. additional include directories and defines for RT-Linux# default_CONFIG .. list of default config assignments CONFIG_XXX=y/n ...## LINUX_DIR .. location of Linux kernel sources# RTL_DIR .. location of RT-Linux sources# Hack to check RT-Linux rules#LINUX_DIR := /home/cvs/ocera/ocera-build/kernel/linux#RTL_DIR := /home/cvs/ocera/ocera-build/kernel/rtlinux#CONFIG_RTLINUX = y#OCERA_DIR := $(shell ( cd -L $(MAKERULES_DIR)/../../.. ; pwd -L ) )BUILD_DIR_NAME = _buildCOMPILED_DIR_NAME = _compiledifndef GROUP_DIR_NAMEGROUP_DIR_NAME = nogroupendif# We need to ensure definition of sources directory firstifndef SOURCES_DIRSOURCES_DIR := $(shell ( pwd -L ) )endifall: defaultifdef OCERA_DIRifeq ($(wildcard $(OCERA_DIR)/ocera.mk),)$(warning "ocera.mk" file does not exist. Adapt Makefile.rules for standalone compilation)$(warning (comment out definition of OCERA_DIR line and optionally select RTL_DIR) )$(error or go to the ocera/ directory and do 'make' to generate the "ocera.mk" file first, please)endifinclude $(OCERA_DIR)/ocera.mkKERN_INCLUDE_DIR := $(OCERA_KERNEL_INCLUDES_DIR)KERN_LIB_DIR := $(OCERA_KERNEL_LIBRARIES_DIR)KERN_MODULES_DIR := $(OCERA_MODULES_DIR)KERN_BUILD_DIR := $(BUILD_DIR)/kern/$(GROUP_DIR_NAME)KERN_MODPOST_DIR := $(BUILD_DIR)/kern-modpostUSER_INCLUDE_DIR := $(OCERA_USER_INCLUDES_DIR)USER_LIB_DIR := $(OCERA_USER_LIBRARIES_DIR)USER_UTILS_DIR := $(TARGET_DIR)/usr/binUSER_BIN_DIR := $(TARGET_DIR)/usr/binUSER_BUILD_DIR := $(BUILD_DIR)/user/$(GROUP_DIR_NAME)#LINUX_DIR := $(OCERA_DIR)/kernel/linux#RTL_DIR := $(OCERA_DIR)/kernel/rtlinux#CONFIG_FILE := $(OCERA_DIR)/emdebsys/.config ifneq ($(wildcard $(CONFIG_FILE)),)#include $(CONFIG_FILE)CONFIG_FILE_OK = yendifelse # OCERA_DIRKERN_INCLUDE_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/include-kernKERN_LIB_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/lib-kernKERN_MODULES_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/modulesKERN_BUILD_DIR := $(MAKERULES_DIR)/$(BUILD_DIR_NAME)/kernKERN_MODPOST_DIR := $(MAKERULES_DIR)/$(BUILD_DIR_NAME)/kern-modpostUSER_INCLUDE_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/includeUSER_LIB_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/libUSER_UTILS_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/bin-utilsUSER_BIN_DIR := $(MAKERULES_DIR)/$(COMPILED_DIR_NAME)/binUSER_BUILD_DIR := $(MAKERULES_DIR)/$(BUILD_DIR_NAME)/userifndef CONFIG_FILECONFIG_FILE := $(MAKERULES_DIR)/config.omkendififneq ($(wildcard $(CONFIG_FILE)-default),)-include $(CONFIG_FILE)-defaultelse$(warning Please, run "make default-config" first)endififneq ($(wildcard $(CONFIG_FILE)),)include $(CONFIG_FILE)CONFIG_FILE_OK = yendififndef LINUX_VERSIONLINUX_VERSION=$(shell uname -r)endififndef LINUX_DIRLINUX_DIR=/lib/modules/$(LINUX_VERSION)/buildendifendif # OCERA_DIR# Check and include real OCERA style Makefile.omk nowifndef OMK_INCLUDEDinclude $(SOURCES_DIR)/Makefile.omkOMK_INCLUDED := 1endififeq ($(TARGET_OS),) # Check for target ifeq ($(OS),Windows_NT) TARGET_OS = win32 else TARGET_OS = $(shell uname | tr '[A-Z]' '[a-z]' ) #$(warning TARGET_OS=$(TARGET_OS)) endifendifexport SOURCES_DIR MAKERULES_DIR RELATIVE_DIR LINUX_DIR LINUX_VERSION RTL_DIRexport CONFIG_FILE OMK_SERIALIZE_INCLUDED OMK_VERBOSE OMK_SILENTexport TARGET_OS NMifeq ($(NM),) NM = nmendif#CFLAGS += -ggdbCFLAGS += -O2 CFLAGS += -Wall#CXXFLAGS += -ggdbCXXFLAGS += -O2CXXFLAGS += -WallCPPFLAGS += -I $(USER_INCLUDE_DIR)LOADLIBES += -L$(USER_LIB_DIR) LOADLIBES += $(lib_LOADLIBES:%=-l%)LIB_CPPFLAGS += $(CPPFLAGS)LIB_CFLAGS += $(CFLAGS)ifeq ($(TARGET_OS),win32) SOLIB_EXT = dllelse SOLIB_EXT = so SOLIB_PICFLAGS += -fpicendififndef RELATIVE_DIRRELATIVE_DIR := $(SOURCES_DIR:$(MAKERULES_DIR)%=%)endifoverride RELATIVE_DIR := $(RELATIVE_DIR:/%=%)override RELATIVE_DIR := $(RELATIVE_DIR:\\%=%)#$(warning RELATIVE_DIR $(RELATIVE_DIR))override BACK2TOP_DIR := $(shell echo $(RELATIVE_DIR)/ | sed -e 's_//_/_g' -e 's_/\./_/_g' -e 's_^\./__g' -e 's_\([^/][^/]*\)_.._g' -e 's_/$$__')#$(warning BACK2TOP_DIR $(BACK2TOP_DIR))#$(warning SOURCES_DIR = $(SOURCES_DIR))#$(warning MAKERULES_DIR = $(MAKERULES_DIR))#$(warning RELATIVE_DIR = $(RELATIVE_DIR))override RELATIVE_PREFIX := $(RELATIVE_DIR)/override RELATIVE_PREFIX := $(RELATIVE_PREFIX:/%=%)#vpath %.c $(SOURCES_DIR)#vpath %.cc $(SOURCES_DIR)#vpath %.cxx $(SOURCES_DIR)VPATH = $(SOURCES_DIR)srcdir = $(SOURCES_DIR)USER_OBJS_DIR = $(USER_BUILD_DIR)/$(RELATIVE_DIR)KERN_OBJS_DIR = $(KERN_BUILD_DIR)/$(RELATIVE_DIR).PHONY: default dep subdirs clean clean-custom cleandepend default-config.PHONY: check-make-ver check-dir include-pass library-pass binary-pass utils-pass.PHONY: kernel-lib-pass kernel-pass kernel-mod-pass kernel-modpost-pass default-config-pass.PHONY: check-dir-local include-pass-local library-pass-local binary-pass-local .PHONY: utils-pass-local kernel-lib-pass-local kernel-mod-pass-local kernel-modpost-pass-local.PHONY: default-config-pass-local# Some support to serialize some targets for parallel makeifneq ($(OMK_SERIALIZE_INCLUDED),y)include-pass: check-dirlibrary-pass: include-passbinary-pass utils-pass: library-passkernel-lib-pass: include-passkernel-mod-pass: kernel-lib-passkernel-modpost-pass: kernel-mod-passkernel-pass: kernel-mod-pass kernel-modpost-passOMK_SERIALIZE_INCLUDED = yendif# Defines for quiet compilationifdef V ifeq ("$(origin V)", "command line") OMK_VERBOSE = $(V) endifendififndef OMK_VERBOSE OMK_VERBOSE = 0endififeq ($(OMK_VERBOSE),1) Q =else Q = @endififneq ($(findstring s,$(MAKEFLAGS)),) QUIET_CMD_ECHO = true OMK_SILENT = 1else QUIET_CMD_ECHO = echo CPHEADER_FLAGS += -vendifdefault: check-make-ver check-dir include-pass library-pass binary-pass utils-pass kernel-lib-pass kernel-pass#=====================================================================# Common utility rulesdefine mkdir_def [ -d $(1) ] || mkdir -p $(1) || exit 1endef# Syntax: $(call BUILD_CONFIG_H_template,<header_file_path>,<list_of_options_to_export>,<header_barrier>)define BUILD_CONFIG_H_template$(1) : $(wildcard $(CONFIG_FILE)) $(wildcard $(CONFIG_FILE)-default) @$(QUIET_CMD_ECHO) " CONFGEN $$@ in `pwd`" @if [ ! -d `dirname $(1).tmp` ] ; then \ mkdir `dirname $(1).tmp` ; fi @echo "/* Automatically generated from */" > "$(1).tmp" @echo "/* config file: $$< */" >> "$(1).tmp" @echo "#ifndef $(3)" >> "$(1).tmp" @echo "#define $(3)" >> "$(1).tmp" @( $(foreach x, $(shell echo '$($(2))' | sed -e 's/\<\([^ =]*\)\(=[^ ]\+\|\)\>/\1/g' ), \ echo '$(x).$($(x))' ; ) echo ; ) | \ sed -e '/^[^.]*\.n$$$$/d' -e '/^[^.]*\.$$$$/d' -e 's/^\([^.]*\)\.[ym]$$$$/\1.1/' | \ sed -n -e 's/^\([^.]*\)\.\(.*\)$$$$/#define \1 \2/p' \ >> "$(1).tmp" @echo "#endif /*$(3)*/" >> "$(1).tmp" @if cmp --quiet "$(1).tmp" "$(1)" ; then \ echo rm "$(1).tmp" ; \ else mv "$(1).tmp" "$(1)" ; \ echo Updated configuration "$(1)" ; fiendefifdef LOCAL_CONFIG_H$(eval $(call BUILD_CONFIG_H_template,$(LOCAL_CONFIG_H),default_CONFIG,_LOCAL_CONFIG_H) )endifcheck-make-ver: @GOOD_MAKE_VERSION=`echo $(MAKE_VERSION) | sed -n -e 's/^[4-9]\..*\|^3\.9[0-9].*\|^3\.8[1-9].*/y/p'` ; \ if [ x$$GOOD_MAKE_VERSION != xy ] ; then \ echo "Your make program version is too old and does not support OMK system." ; \ echo "Please update to make program 3.81beta1 or newer." ; exit 1 ; \ fi#=====================================================================# User-space rules and templates to compile programs, libraries etc.ifdef USER_RULE_TEMPLATESUSER_SOURCES2OBJS = .o/.c .o/.cc .o/.cxx .o/.oUSER_SOURCES2OBJSLO = .lo/.c .lo/.cc .lo/.cxx .lo/.lo#%.lo: %.c# $(CC) -o $@ $(LCFLAGS) -c $<c_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_USERcc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -DOMK_FOR_USERidl_COMPILE = $(IDL_COMPILER)# Check GCC version for user buildifndef CC_MAJOR_VERSIONCC_MAJOR_VERSION := $(shell $(CC) -dumpversion | sed -e 's/\([^.]\)\..*/\1/')endif# Prepare suitable define for dependency buildingifeq ($(CC_MAJOR_VERSION),2)CC_DEPFLAGS = -Wp,-MD,"$@.d.tmp"elseCC_DEPFLAGS = -MT $@ -MD -MP -MF "$@.d.tmp"endif# Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)define COMPILE_c_o_template$(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " CC $$@" $(Q) if $$(c_o_COMPILE) $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -