linux/tools/lib/lockdep/Makefile
<<
>>
Prefs
   1# SPDX-License-Identifier: GPL-2.0
   2# file format version
   3FILE_VERSION = 1
   4
   5LIBLOCKDEP_VERSION=$(shell make --no-print-directory -sC ../../.. kernelversion)
   6
   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
  18# Allow setting CC and AR and LD, or setting CROSS_COMPILE as a prefix.
  19$(call allow-override,CC,$(CROSS_COMPILE)gcc)
  20$(call allow-override,AR,$(CROSS_COMPILE)ar)
  21$(call allow-override,LD,$(CROSS_COMPILE)ld)
  22
  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
  40MAKEFLAGS += --no-print-directory
  41
  42include ../../scripts/Makefile.include
  43
  44# copy a bit from Linux kbuild
  45
  46ifeq ("$(origin V)", "command line")
  47  VERBOSE = $(V)
  48endif
  49ifndef VERBOSE
  50  VERBOSE = 0
  51endif
  52
  53ifeq ($(srctree),)
  54srctree := $(patsubst %/,%,$(dir $(CURDIR)))
  55srctree := $(patsubst %/,%,$(dir $(srctree)))
  56srctree := $(patsubst %/,%,$(dir $(srctree)))
  57#$(info Determined 'srctree' to be $(srctree))
  58endif
  59
  60# Shell quotes
  61libdir_SQ = $(subst ','\'',$(libdir))
  62bindir_SQ = $(subst ','\'',$(bindir))
  63
  64LIB_IN := $(OUTPUT)liblockdep-in.o
  65
  66BIN_FILE = lockdep
  67LIB_FILE = $(OUTPUT)liblockdep.a $(OUTPUT)liblockdep.so.$(LIBLOCKDEP_VERSION)
  68
  69CONFIG_INCLUDES =
  70CONFIG_LIBS     =
  71CONFIG_FLAGS    =
  72
  73OBJ             = $@
  74N               =
  75
  76export Q VERBOSE
  77
  78INCLUDES = -I. -I./uinclude -I./include -I../../include $(CONFIG_INCLUDES)
  79
  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
  82CFLAGS += -fPIC
  83CFLAGS += -Wall
  84
  85override CFLAGS += $(CONFIG_FLAGS) $(INCLUDES) $(PLUGIN_DIR_SQ)
  86
  87ifeq ($(VERBOSE),1)
  88  Q =
  89  print_shared_lib_compile =
  90  print_install =
  91else
  92  Q = @
  93  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';
  96endif
  97
  98all:
  99
 100export srctree OUTPUT CC LD CFLAGS V
 101include $(srctree)/tools/build/Makefile.include
 102
 103do_compile_shared_library =                     \
 104        ($(print_shared_lib_compile)            \
 105        $(CC) $(LDFLAGS) --shared $^ -o $@ -lpthread -ldl -Wl,-soname='$(@F)';$(shell ln -sf $(@F) $(@D)/liblockdep.so))
 106
 107do_build_static_lib =                           \
 108        ($(print_static_lib_build)              \
 109        $(RM) $@;  $(AR) rcs $@ $^)
 110
 111CMD_TARGETS = $(LIB_FILE)
 112
 113TARGETS = $(CMD_TARGETS)
 114
 115
 116all: fixdep all_cmd
 117
 118all_cmd: $(CMD_TARGETS)
 119
 120$(LIB_IN): force
 121        $(Q)$(MAKE) $(build)=liblockdep
 122
 123$(OUTPUT)liblockdep.so.$(LIBLOCKDEP_VERSION): $(LIB_IN)
 124        $(Q)$(do_compile_shared_library)
 125
 126$(OUTPUT)liblockdep.a: $(LIB_IN)
 127        $(Q)$(do_build_static_lib)
 128
 129tags:   force
 130        $(RM) tags
 131        find . -name '*.[ch]' | xargs ctags --extra=+f --c-kinds=+px \
 132        --regex-c++='/_PE\(([^,)]*).*/TEP_ERRNO__\1/'
 133
 134TAGS:   force
 135        $(RM) TAGS
 136        find . -name '*.[ch]' | xargs etags \
 137        --regex='/_PE(\([^,)]*\).*/TEP_ERRNO__\1/'
 138
 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:
 154        $(RM) $(OUTPUT)*.o *~ $(TARGETS) $(OUTPUT)*.a $(OUTPUT)*liblockdep*.so* $(VERSION_FILES) $(OUTPUT).*.d $(OUTPUT).*.cmd
 155        $(RM) tags TAGS
 156
 157PHONY += 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)
 163