blob: 9dafb8cb752fe066284dd9ea6d34e59ee97c5741 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001# SPDX-License-Identifier: GPL-2.0
Sasha Levin5634bd72013-06-13 18:41:17 -04002# file format version
3FILE_VERSION = 1
4
S. Lockwood-Childs0041898e2014-05-08 13:34:01 -04005LIBLOCKDEP_VERSION=$(shell make --no-print-directory -sC ../../.. kernelversion)
Sasha Levin5634bd72013-06-13 18:41:17 -04006
7# Makefiles suck: This macro sets a default value of $(2) for the
8# variable named by $(1), unless the variable has been set by
9# environment or command line. This is necessary for CC and AR
10# because make sets default values, so the simpler ?= approach
11# won't work as expected.
12define allow-override
13 $(if $(or $(findstring environment,$(origin $(1))),\
14 $(findstring command line,$(origin $(1)))),,\
15 $(eval $(1) = $(2)))
16endef
17
Eunbong Songd1e40e52015-04-24 04:36:27 +000018# Allow setting CC and AR and LD, or setting CROSS_COMPILE as a prefix.
Sasha Levin5634bd72013-06-13 18:41:17 -040019$(call allow-override,CC,$(CROSS_COMPILE)gcc)
20$(call allow-override,AR,$(CROSS_COMPILE)ar)
Eunbong Songd1e40e52015-04-24 04:36:27 +000021$(call allow-override,LD,$(CROSS_COMPILE)ld)
Sasha Levin5634bd72013-06-13 18:41:17 -040022
23INSTALL = install
24
25# Use DESTDIR for installing into a different root directory.
26# This is useful for building a package. The program will be
27# installed in this directory as if it was the root directory.
28# Then the build tool can move it later.
29DESTDIR ?=
30DESTDIR_SQ = '$(subst ','\'',$(DESTDIR))'
31
32prefix ?= /usr/local
33libdir_relative = lib
34libdir = $(prefix)/$(libdir_relative)
35bindir_relative = bin
36bindir = $(prefix)/$(bindir_relative)
37
38export DESTDIR DESTDIR_SQ INSTALL
39
Jiri Olsa9244e2c2015-01-09 17:11:04 +010040MAKEFLAGS += --no-print-directory
41
42include ../../scripts/Makefile.include
43
Sasha Levin5634bd72013-06-13 18:41:17 -040044# copy a bit from Linux kbuild
45
46ifeq ("$(origin V)", "command line")
47 VERBOSE = $(V)
48endif
49ifndef VERBOSE
50 VERBOSE = 0
51endif
52
Jiri Olsa9244e2c2015-01-09 17:11:04 +010053ifeq ($(srctree),)
Uwe Kleine-Könige19b7ce2016-11-22 09:30:26 +010054srctree := $(patsubst %/,%,$(dir $(CURDIR)))
Jiri Olsa9244e2c2015-01-09 17:11:04 +010055srctree := $(patsubst %/,%,$(dir $(srctree)))
56srctree := $(patsubst %/,%,$(dir $(srctree)))
57#$(info Determined 'srctree' to be $(srctree))
Sasha Levin5634bd72013-06-13 18:41:17 -040058endif
59
Sasha Levin5634bd72013-06-13 18:41:17 -040060# Shell quotes
61libdir_SQ = $(subst ','\'',$(libdir))
62bindir_SQ = $(subst ','\'',$(bindir))
63
Jiri Olsa9244e2c2015-01-09 17:11:04 +010064LIB_IN := $(OUTPUT)liblockdep-in.o
65
Sasha Levin5634bd72013-06-13 18:41:17 -040066BIN_FILE = lockdep
Jiri Olsa9244e2c2015-01-09 17:11:04 +010067LIB_FILE = $(OUTPUT)liblockdep.a $(OUTPUT)liblockdep.so.$(LIBLOCKDEP_VERSION)
Sasha Levin5634bd72013-06-13 18:41:17 -040068
69CONFIG_INCLUDES =
70CONFIG_LIBS =
71CONFIG_FLAGS =
72
73OBJ = $@
74N =
75
76export Q VERBOSE
77
Baruch Siach8baeccd2015-01-25 15:30:23 +020078INCLUDES = -I. -I./uinclude -I./include -I../../include $(CONFIG_INCLUDES)
Sasha Levin5634bd72013-06-13 18:41:17 -040079
80# Set compile option CFLAGS if not set elsewhere
81CFLAGS ?= -g -DCONFIG_LOCKDEP -DCONFIG_STACKTRACE -DCONFIG_PROVE_LOCKING -DBITS_PER_LONG=__WORDSIZE -DLIBLOCKDEP_VERSION='"$(LIBLOCKDEP_VERSION)"' -rdynamic -O0 -g
Jiri Olsa9244e2c2015-01-09 17:11:04 +010082CFLAGS += -fPIC
Ben Hutchingsdb8f7792017-05-25 12:58:36 +000083CFLAGS += -Wall
Sasha Levin5634bd72013-06-13 18:41:17 -040084
85override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ)
86
87ifeq ($(VERBOSE),1)
88 Q =
Sasha Levin5634bd72013-06-13 18:41:17 -040089 print_shared_lib_compile =
90 print_install =
91else
92 Q = @
Jiri Olsa9244e2c2015-01-09 17:11:04 +010093 print_shared_lib_compile = echo ' LD '$(OBJ);
94 print_static_lib_build = echo ' LD '$(OBJ);
95 print_install = echo ' INSTALL '$1' to $(DESTDIR_SQ)$2';
Sasha Levin5634bd72013-06-13 18:41:17 -040096endif
97
Jiri Olsa7c422f52015-09-23 12:34:02 +020098all:
99
Jiri Olsa9244e2c2015-01-09 17:11:04 +0100100export srctree OUTPUT CC LD CFLAGS V
Jiri Olsaab6201d2015-09-23 12:33:56 +0200101include $(srctree)/tools/build/Makefile.include
Sasha Levin5634bd72013-06-13 18:41:17 -0400102
103do_compile_shared_library = \
104 ($(print_shared_lib_compile) \
Ben Hutchingsd8633a32017-05-25 12:58:51 +0000105 $(CC) $(LDFLAGS) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='$(@F)';$(shell ln -sf $(@F) $(@D)/liblockdep.so))
Sasha Levin5634bd72013-06-13 18:41:17 -0400106
107do_build_static_lib = \
108 ($(print_static_lib_build) \
109 $(RM) $@; $(AR) rcs $@ $^)
110
Sasha Levin5634bd72013-06-13 18:41:17 -0400111CMD_TARGETS = $(LIB_FILE)
112
113TARGETS = $(CMD_TARGETS)
114
115
Jiri Olsa7c422f52015-09-23 12:34:02 +0200116all: fixdep all_cmd
Sasha Levin5634bd72013-06-13 18:41:17 -0400117
118all_cmd: $(CMD_TARGETS)
119
Jiri Olsa9244e2c2015-01-09 17:11:04 +0100120$(LIB_IN): force
121 $(Q)$(MAKE) $(build)=liblockdep
122
Ben Hutchingsea59f302017-05-25 12:58:48 +0000123$(OUTPUT)liblockdep.so.$(LIBLOCKDEP_VERSION): $(LIB_IN)
Sasha Levin5634bd72013-06-13 18:41:17 -0400124 $(Q)$(do_compile_shared_library)
125
Ben Hutchingsea59f302017-05-25 12:58:48 +0000126$(OUTPUT)liblockdep.a: $(LIB_IN)
Sasha Levin5634bd72013-06-13 18:41:17 -0400127 $(Q)$(do_build_static_lib)
128
Sasha Levin5634bd72013-06-13 18:41:17 -0400129tags: force
130 $(RM) tags
131 find . -name '*.[ch]' | xargs ctags --extra=+f --c-kinds=+px \
Tzvetomir Stoyanov (VMware)d97f4ef2018-08-08 14:02:58 -0400132 --regex-c++='/_PE\(([^,)]*).*/TEP_ERRNO__\1/'
Sasha Levin5634bd72013-06-13 18:41:17 -0400133
134TAGS: force
135 $(RM) TAGS
136 find . -name '*.[ch]' | xargs etags \
Tzvetomir Stoyanov (VMware)d97f4ef2018-08-08 14:02:58 -0400137 --regex='/_PE(\([^,)]*\).*/TEP_ERRNO__\1/'
Sasha Levin5634bd72013-06-13 18:41:17 -0400138
139define do_install
140 $(print_install) \
141 if [ ! -d '$(DESTDIR_SQ)$2' ]; then \
142 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$2'; \
143 fi; \
144 $(INSTALL) $1 '$(DESTDIR_SQ)$2'
145endef
146
147install_lib: all_cmd
148 $(Q)$(call do_install,$(LIB_FILE),$(libdir_SQ))
149 $(Q)$(call do_install,$(BIN_FILE),$(bindir_SQ))
150
151install: install_lib
152
153clean:
Ben Hutchingsea59f302017-05-25 12:58:48 +0000154 $(RM) $(OUTPUT)*.o *~ $(TARGETS) $(OUTPUT)*.a $(OUTPUT)*liblockdep*.so* $(VERSION_FILES) $(OUTPUT).*.d $(OUTPUT).*.cmd
Sasha Levin5634bd72013-06-13 18:41:17 -0400155 $(RM) tags TAGS
156
Sasha Levin5634bd72013-06-13 18:41:17 -0400157PHONY += force
158force:
159
160# Declare the contents of the .PHONY variable as phony. We keep that
161# information in a variable so we can use it in if_changed and friends.
162.PHONY: $(PHONY)