2013-06-13 18:41:17 -04:00
# file format version
FILE_VERSION = 1
2014-05-08 13:34:01 -04:00
LIBLOCKDEP_VERSION = $( shell make --no-print-directory -sC ../../.. kernelversion)
2013-06-13 18:41:17 -04:00
# Makefiles suck: This macro sets a default value of $(2) for the
# variable named by $(1), unless the variable has been set by
# environment or command line. This is necessary for CC and AR
# because make sets default values, so the simpler ?= approach
# won't work as expected.
d e f i n e a l l o w - o v e r r i d e
$( if $( or $( findstring environment,$( origin $( 1) ) ) ,\
$( findstring command line,$( origin $( 1) ) ) ) ,,\
$( eval $( 1) = $( 2) ) )
e n d e f
2015-04-24 04:36:27 +00:00
# Allow setting CC and AR and LD, or setting CROSS_COMPILE as a prefix.
2013-06-13 18:41:17 -04:00
$( call allow -override ,CC ,$ ( CROSS_COMPILE ) gcc )
$( call allow -override ,AR ,$ ( CROSS_COMPILE ) ar )
2015-04-24 04:36:27 +00:00
$( call allow -override ,LD ,$ ( CROSS_COMPILE ) ld )
2013-06-13 18:41:17 -04:00
INSTALL = install
# Use DESTDIR for installing into a different root directory.
# This is useful for building a package. The program will be
# installed in this directory as if it was the root directory.
# Then the build tool can move it later.
DESTDIR ?=
DESTDIR_SQ = '$(subst ' ,'\' ',$(DESTDIR))'
prefix ?= /usr/local
libdir_relative = lib
libdir = $( prefix) /$( libdir_relative)
bindir_relative = bin
bindir = $( prefix) /$( bindir_relative)
export DESTDIR DESTDIR_SQ INSTALL
2015-01-09 17:11:04 +01:00
MAKEFLAGS += --no-print-directory
i n c l u d e . . / . . / s c r i p t s / M a k e f i l e . i n c l u d e
2013-06-13 18:41:17 -04:00
# copy a bit from Linux kbuild
i f e q ( "$(origin V)" , "command line" )
VERBOSE = $( V)
e n d i f
i f n d e f V E R B O S E
VERBOSE = 0
e n d i f
2015-01-09 17:11:04 +01:00
i f e q ( $( srctree ) , )
srctree := $( patsubst %/,%,$( dir $( shell pwd ) ) )
srctree := $( patsubst %/,%,$( dir $( srctree) ) )
srctree := $( patsubst %/,%,$( dir $( srctree) ) )
#$(info Determined 'srctree' to be $(srctree))
2013-06-13 18:41:17 -04:00
e n d i f
# Shell quotes
libdir_SQ = $( subst ',' \' ' ,$( libdir) )
bindir_SQ = $( subst ',' \' ' ,$( bindir) )
2015-01-09 17:11:04 +01:00
LIB_IN := $( OUTPUT) liblockdep-in.o
2013-06-13 18:41:17 -04:00
BIN_FILE = lockdep
2015-01-09 17:11:04 +01:00
LIB_FILE = $( OUTPUT) liblockdep.a $( OUTPUT) liblockdep.so.$( LIBLOCKDEP_VERSION)
2013-06-13 18:41:17 -04:00
CONFIG_INCLUDES =
CONFIG_LIBS =
CONFIG_FLAGS =
OBJ = $@
N =
export Q VERBOSE
2015-01-25 15:30:23 +02:00
INCLUDES = -I. -I./uinclude -I./include -I../../include $( CONFIG_INCLUDES)
2013-06-13 18:41:17 -04:00
# Set compile option CFLAGS if not set elsewhere
CFLAGS ?= -g -DCONFIG_LOCKDEP -DCONFIG_STACKTRACE -DCONFIG_PROVE_LOCKING -DBITS_PER_LONG= __WORDSIZE -DLIBLOCKDEP_VERSION= '"$(LIBLOCKDEP_VERSION)"' -rdynamic -O0 -g
2015-01-09 17:11:04 +01:00
CFLAGS += -fPIC
2013-06-13 18:41:17 -04:00
o v e r r i d e CFLAGS += $( CONFIG_FLAGS) $( INCLUDES) $( PLUGIN_DIR_SQ)
i f e q ( $( VERBOSE ) , 1 )
Q =
print_shared_lib_compile =
print_install =
e l s e
Q = @
2015-01-09 17:11:04 +01:00
print_shared_lib_compile = echo ' LD ' $( OBJ) ;
print_static_lib_build = echo ' LD ' $( OBJ) ;
print_install = echo ' INSTALL ' $1 ' to $(DESTDIR_SQ)$2' ;
2013-06-13 18:41:17 -04:00
e n d i f
2015-09-23 12:34:02 +02:00
all :
2015-01-09 17:11:04 +01:00
export srctree OUTPUT CC LD CFLAGS V
2015-09-23 12:33:56 +02:00
i n c l u d e $( srctree ) / t o o l s / b u i l d / M a k e f i l e . i n c l u d e
2013-06-13 18:41:17 -04:00
do_compile_shared_library = \
( $( print_shared_lib_compile) \
2016-02-29 10:29:59 +01:00
$( CC) --shared $^ -o $@ -lpthread -ldl -Wl,-soname= '"$@"' ; $( shell ln -sf $@ liblockdep.so) )
2013-06-13 18:41:17 -04:00
do_build_static_lib = \
( $( print_static_lib_build) \
$( RM) $@ ; $( AR) rcs $@ $^)
CMD_TARGETS = $( LIB_FILE)
TARGETS = $( CMD_TARGETS)
2015-09-23 12:34:02 +02:00
all : fixdep all_cmd
2013-06-13 18:41:17 -04:00
all_cmd : $( CMD_TARGETS )
2015-01-09 17:11:04 +01:00
$(LIB_IN) : force
$( Q) $( MAKE) $( build) = liblockdep
liblockdep.so.$(LIBLOCKDEP_VERSION) : $( LIB_IN )
2013-06-13 18:41:17 -04:00
$( Q) $( do_compile_shared_library)
2015-01-09 17:11:04 +01:00
liblockdep.a : $( LIB_IN )
2013-06-13 18:41:17 -04:00
$( Q) $( do_build_static_lib)
tags : force
$( RM) tags
find . -name '*.[ch]' | xargs ctags --extra= +f --c-kinds= +px \
--regex-c++= '/_PE\(([^,)]*).*/PEVENT_ERRNO__\1/'
TAGS : force
$( RM) TAGS
find . -name '*.[ch]' | xargs etags \
--regex= '/_PE(\([^,)]*\).*/PEVENT_ERRNO__\1/'
d e f i n e d o _ i n s t a l l
$( print_install) \
if [ ! -d '$(DESTDIR_SQ)$2' ] ; then \
$( INSTALL) -d -m 755 '$(DESTDIR_SQ)$2' ; \
fi ; \
$( INSTALL) $1 '$(DESTDIR_SQ)$2'
e n d e f
install_lib : all_cmd
$( Q) $( call do_install,$( LIB_FILE) ,$( libdir_SQ) )
$( Q) $( call do_install,$( BIN_FILE) ,$( bindir_SQ) )
install : install_lib
clean :
2016-01-11 11:54:50 +01:00
$( RM) *.o *~ $( TARGETS) *.a *liblockdep*.so* $( VERSION_FILES) .*.d .*.cmd
2013-06-13 18:41:17 -04:00
$( RM) tags TAGS
PHONY += force
force :
# Declare the contents of the .PHONY variable as phony. We keep that
# information in a variable so we can use it in if_changed and friends.
.PHONY : $( PHONY )