1# The default target of this Makefile is... 2all:: 3 4# Define V=1 to have a more verbose compile. 5# 6# Define SNPRINTF_RETURNS_BOGUS if your are on a system which snprintf() 7# or vsnprintf() return -1 instead of number of characters which would 8# have been written to the final string if enough space had been available. 9# 10# Define FREAD_READS_DIRECTORIES if your are on a system which succeeds 11# when attempting to read from an fopen'ed directory. 12# 13# Define NO_OPENSSL environment variable if you do not have OpenSSL. 14# This also implies MOZILLA_SHA1. 15# 16# Define CURLDIR=/foo/bar if your curl header and library files are in 17# /foo/bar/include and /foo/bar/lib directories. 18# 19# Define EXPATDIR=/foo/bar if your expat header and library files are in 20# /foo/bar/include and /foo/bar/lib directories. 21# 22# Define NO_D_INO_IN_DIRENT if you don't have d_ino in your struct dirent. 23# 24# Define NO_D_TYPE_IN_DIRENT if your platform defines DT_UNKNOWN but lacks 25# d_type in struct dirent (latest Cygwin -- will be fixed soonish). 26# 27# Define NO_C99_FORMAT if your formatted IO functions (printf/scanf et.al.) 28# do not support the 'size specifiers' introduced by C99, namely ll, hh, 29# j, z, t. (representing long long int, char, intmax_t, size_t, ptrdiff_t). 30# some C compilers supported these specifiers prior to C99 as an extension. 31# 32# Define NO_STRCASESTR if you don't have strcasestr. 33# 34# Define NO_MEMMEM if you don't have memmem. 35# 36# Define NO_STRTOUMAX if you don't have strtoumax in the C library. 37# If your compiler also does not support long long or does not have 38# strtoull, define NO_STRTOULL. 39# 40# Define NO_SETENV if you don't have setenv in the C library. 41# 42# Define NO_UNSETENV if you don't have unsetenv in the C library. 43# 44# Define NO_MKDTEMP if you don't have mkdtemp in the C library. 45# 46# Define NO_SYS_SELECT_H if you don't have sys/select.h. 47# 48# Define NO_SYMLINK_HEAD if you never want .perf/HEAD to be a symbolic link. 49# Enable it on Windows. By default, symrefs are still used. 50# 51# Define NO_SVN_TESTS if you want to skip time-consuming SVN interoperability 52# tests. These tests take up a significant amount of the total test time 53# but are not needed unless you plan to talk to SVN repos. 54# 55# Define NO_FINK if you are building on Darwin/Mac OS X, have Fink 56# installed in /sw, but don't want PERF to link against any libraries 57# installed there. If defined you may specify your own (or Fink's) 58# include directories and library directories by defining CFLAGS 59# and LDFLAGS appropriately. 60# 61# Define NO_DARWIN_PORTS if you are building on Darwin/Mac OS X, 62# have DarwinPorts installed in /opt/local, but don't want PERF to 63# link against any libraries installed there. If defined you may 64# specify your own (or DarwinPort's) include directories and 65# library directories by defining CFLAGS and LDFLAGS appropriately. 66# 67# Define PPC_SHA1 environment variable when running make to make use of 68# a bundled SHA1 routine optimized for PowerPC. 69# 70# Define ARM_SHA1 environment variable when running make to make use of 71# a bundled SHA1 routine optimized for ARM. 72# 73# Define MOZILLA_SHA1 environment variable when running make to make use of 74# a bundled SHA1 routine coming from Mozilla. It is GPL'd and should be fast 75# on non-x86 architectures (e.g. PowerPC), while the OpenSSL version (default 76# choice) has very fast version optimized for i586. 77# 78# Define NEEDS_SSL_WITH_CRYPTO if you need -lcrypto with -lssl (Darwin). 79# 80# Define NEEDS_LIBICONV if linking with libc is not enough (Darwin). 81# 82# Define NEEDS_SOCKET if linking with libc is not enough (SunOS, 83# Patrick Mauritz). 84# 85# Define NO_MMAP if you want to avoid mmap. 86# 87# Define NO_PTHREADS if you do not have or do not want to use Pthreads. 88# 89# Define NO_PREAD if you have a problem with pread() system call (e.g. 90# cygwin.dll before v1.5.22). 91# 92# Define NO_FAST_WORKING_DIRECTORY if accessing objects in pack files is 93# generally faster on your platform than accessing the working directory. 94# 95# Define NO_TRUSTABLE_FILEMODE if your filesystem may claim to support 96# the executable mode bit, but doesn't really do so. 97# 98# Define NO_IPV6 if you lack IPv6 support and getaddrinfo(). 99# 100# Define NO_SOCKADDR_STORAGE if your platform does not have struct 101# sockaddr_storage. 102# 103# Define NO_ICONV if your libc does not properly support iconv. 104# 105# Define OLD_ICONV if your library has an old iconv(), where the second 106# (input buffer pointer) parameter is declared with type (const char **). 107# 108# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound. 109# 110# Define NO_R_TO_GCC_LINKER if your gcc does not like "-R/path/lib" 111# that tells runtime paths to dynamic libraries; 112# "-Wl,-rpath=/path/lib" is used instead. 113# 114# Define USE_NSEC below if you want perf to care about sub-second file mtimes 115# and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and 116# it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely 117# randomly break unless your underlying filesystem supports those sub-second 118# times (my ext3 doesn't). 119# 120# Define USE_ST_TIMESPEC if your "struct stat" uses "st_ctimespec" instead of 121# "st_ctim" 122# 123# Define NO_NSEC if your "struct stat" does not have "st_ctim.tv_nsec" 124# available. This automatically turns USE_NSEC off. 125# 126# Define USE_STDEV below if you want perf to care about the underlying device 127# change being considered an inode change from the update-index perspective. 128# 129# Define NO_ST_BLOCKS_IN_STRUCT_STAT if your platform does not have st_blocks 130# field that counts the on-disk footprint in 512-byte blocks. 131# 132# Define ASCIIDOC8 if you want to format documentation with AsciiDoc 8 133# 134# Define DOCBOOK_XSL_172 if you want to format man pages with DocBook XSL v1.72. 135# 136# Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's 137# MakeMaker (e.g. using ActiveState under Cygwin). 138# 139# Define NO_PERL if you do not want Perl scripts or libraries at all. 140# 141# Define INTERNAL_QSORT to use Git's implementation of qsort(), which 142# is a simplified version of the merge sort used in glibc. This is 143# recommended if Git triggers O(n^2) behavior in your platform's qsort(). 144# 145# Define NO_EXTERNAL_GREP if you don't want "perf grep" to ever call 146# your external grep (e.g., if your system lacks grep, if its grep is 147# broken, or spawning external process is slower than built-in grep perf has). 148 149PERF-VERSION-FILE: .FORCE-PERF-VERSION-FILE 150 @$(SHELL_PATH) util/PERF-VERSION-GEN 151-include PERF-VERSION-FILE 152 153uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') 154uname_M := $(shell sh -c 'uname -m 2>/dev/null || echo not') 155uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not') 156uname_R := $(shell sh -c 'uname -r 2>/dev/null || echo not') 157uname_P := $(shell sh -c 'uname -p 2>/dev/null || echo not') 158uname_V := $(shell sh -c 'uname -v 2>/dev/null || echo not') 159 160# If we're on a 64-bit kernel, use -m64 161ifndef NO_64BIT 162 ifneq ($(patsubst %64,%,$(uname_M)),$(uname_M)) 163 M64 := -m64 164 endif 165endif 166 167# CFLAGS and LDFLAGS are for the users to override from the command line. 168 169CFLAGS = $(M64) -ggdb3 -Wall -Wextra -Wstrict-prototypes -Wmissing-declarations -Wmissing-prototypes -std=gnu99 -Wdeclaration-after-statement -Werror -O6 170LDFLAGS = -lpthread -lrt -lelf -lm 171ALL_CFLAGS = $(CFLAGS) 172ALL_LDFLAGS = $(LDFLAGS) 173STRIP ?= strip 174 175# Among the variables below, these: 176# perfexecdir 177# template_dir 178# mandir 179# infodir 180# htmldir 181# ETC_PERFCONFIG (but not sysconfdir) 182# can be specified as a relative path some/where/else; 183# this is interpreted as relative to $(prefix) and "perf" at 184# runtime figures out where they are based on the path to the executable. 185# This can help installing the suite in a relocatable way. 186 187prefix = $(HOME) 188bindir_relative = bin 189bindir = $(prefix)/$(bindir_relative) 190mandir = share/man 191infodir = share/info 192perfexecdir = libexec/perf-core 193sharedir = $(prefix)/share 194template_dir = share/perf-core/templates 195htmldir = share/doc/perf-doc 196ifeq ($(prefix),/usr) 197sysconfdir = /etc 198ETC_PERFCONFIG = $(sysconfdir)/perfconfig 199else 200sysconfdir = $(prefix)/etc 201ETC_PERFCONFIG = etc/perfconfig 202endif 203lib = lib 204# DESTDIR= 205 206export prefix bindir sharedir sysconfdir 207 208CC = gcc 209AR = ar 210RM = rm -f 211TAR = tar 212FIND = find 213INSTALL = install 214RPMBUILD = rpmbuild 215PTHREAD_LIBS = -lpthread 216 217# sparse is architecture-neutral, which means that we need to tell it 218# explicitly what architecture to check for. Fix this up for yours.. 219SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__ 220 221 222 223### --- END CONFIGURATION SECTION --- 224 225# Those must not be GNU-specific; they are shared with perl/ which may 226# be built by a different compiler. (Note that this is an artifact now 227# but it still might be nice to keep that distinction.) 228BASIC_CFLAGS = -Iutil/include 229BASIC_LDFLAGS = 230 231# Guard against environment variables 232BUILTIN_OBJS = 233BUILT_INS = 234COMPAT_CFLAGS = 235COMPAT_OBJS = 236LIB_H = 237LIB_OBJS = 238SCRIPT_PERL = 239SCRIPT_SH = 240TEST_PROGRAMS = 241 242# 243# No scripts right now: 244# 245 246# SCRIPT_SH += perf-am.sh 247 248# 249# No Perl scripts right now: 250# 251 252# SCRIPT_PERL += perf-add--interactive.perl 253 254SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \ 255 $(patsubst %.perl,%,$(SCRIPT_PERL)) 256 257# Empty... 258EXTRA_PROGRAMS = 259 260# ... and all the rest that could be moved out of bindir to perfexecdir 261PROGRAMS += $(EXTRA_PROGRAMS) 262 263# 264# Single 'perf' binary right now: 265# 266PROGRAMS += perf 267 268# List built-in command $C whose implementation cmd_$C() is not in 269# builtin-$C.o but is linked in as part of some other command. 270# 271# None right now: 272# 273# BUILT_INS += perf-init $X 274 275# what 'all' will build and 'install' will install, in perfexecdir 276ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS) 277 278# what 'all' will build but not install in perfexecdir 279OTHER_PROGRAMS = perf$X 280 281# Set paths to tools early so that they can be used for version tests. 282ifndef SHELL_PATH 283 SHELL_PATH = /bin/sh 284endif 285ifndef PERL_PATH 286 PERL_PATH = /usr/bin/perl 287endif 288 289export PERL_PATH 290 291LIB_FILE=libperf.a 292 293LIB_H += ../../include/linux/perf_counter.h 294LIB_H += ../../include/linux/rbtree.h 295LIB_H += ../../include/linux/list.h 296LIB_H += util/include/linux/list.h 297LIB_H += perf.h 298LIB_H += util/types.h 299LIB_H += util/levenshtein.h 300LIB_H += util/parse-options.h 301LIB_H += util/parse-events.h 302LIB_H += util/quote.h 303LIB_H += util/util.h 304LIB_H += util/help.h 305LIB_H += util/strbuf.h 306LIB_H += util/string.h 307LIB_H += util/strlist.h 308LIB_H += util/run-command.h 309LIB_H += util/sigchain.h 310LIB_H += util/symbol.h 311LIB_H += util/module.h 312LIB_H += util/color.h 313LIB_H += util/values.h 314 315LIB_OBJS += util/abspath.o 316LIB_OBJS += util/alias.o 317LIB_OBJS += util/config.o 318LIB_OBJS += util/ctype.o 319LIB_OBJS += util/environment.o 320LIB_OBJS += util/exec_cmd.o 321LIB_OBJS += util/help.o 322LIB_OBJS += util/levenshtein.o 323LIB_OBJS += util/parse-options.o 324LIB_OBJS += util/parse-events.o 325LIB_OBJS += util/path.o 326LIB_OBJS += util/rbtree.o 327LIB_OBJS += util/run-command.o 328LIB_OBJS += util/quote.o 329LIB_OBJS += util/strbuf.o 330LIB_OBJS += util/string.o 331LIB_OBJS += util/strlist.o 332LIB_OBJS += util/usage.o 333LIB_OBJS += util/wrapper.o 334LIB_OBJS += util/sigchain.o 335LIB_OBJS += util/symbol.o 336LIB_OBJS += util/module.o 337LIB_OBJS += util/color.o 338LIB_OBJS += util/pager.o 339LIB_OBJS += util/header.o 340LIB_OBJS += util/callchain.o 341LIB_OBJS += util/values.o 342 343BUILTIN_OBJS += builtin-annotate.o 344BUILTIN_OBJS += builtin-help.o 345BUILTIN_OBJS += builtin-list.o 346BUILTIN_OBJS += builtin-record.o 347BUILTIN_OBJS += builtin-report.o 348BUILTIN_OBJS += builtin-stat.o 349BUILTIN_OBJS += builtin-top.o 350 351PERFLIBS = $(LIB_FILE) 352 353# 354# Platform specific tweaks 355# 356 357# We choose to avoid "if .. else if .. else .. endif endif" 358# because maintaining the nesting to match is a pain. If 359# we had "elif" things would have been much nicer... 360 361-include config.mak.autogen 362-include config.mak 363 364ifeq ($(uname_S),Darwin) 365 ifndef NO_FINK 366 ifeq ($(shell test -d /sw/lib && echo y),y) 367 BASIC_CFLAGS += -I/sw/include 368 BASIC_LDFLAGS += -L/sw/lib 369 endif 370 endif 371 ifndef NO_DARWIN_PORTS 372 ifeq ($(shell test -d /opt/local/lib && echo y),y) 373 BASIC_CFLAGS += -I/opt/local/include 374 BASIC_LDFLAGS += -L/opt/local/lib 375 endif 376 endif 377 PTHREAD_LIBS = 378endif 379 380ifneq ($(shell sh -c "(echo '\#include <libelf.h>'; echo 'int main(void) { Elf * elf = elf_begin(0, ELF_C_READ_MMAP, 0); return (long)elf; }') | $(CC) -x c - $(ALL_CFLAGS) -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -o /dev/null $(ALL_LDFLAGS) > /dev/null 2>&1 && echo y"), y) 381 msg := $(error No libelf.h/libelf found, please install libelf-dev/elfutils-libelf-devel); 382endif 383 384ifdef NO_DEMANGLE 385 BASIC_CFLAGS += -DNO_DEMANGLE 386else 387 388 has_bfd := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd > /dev/null 2>&1 && echo y") 389 390 has_bfd_iberty := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd -liberty > /dev/null 2>&1 && echo y") 391 392 has_bfd_iberty_z := $(shell sh -c "(echo '\#include <bfd.h>'; echo 'int main(void) { bfd_demangle(0, 0, 0); return 0; }') | $(CC) -x c - $(ALL_CFLAGS) -o /dev/null $(ALL_LDFLAGS) -lbfd -liberty -lz > /dev/null 2>&1 && echo y") 393 394 ifeq ($(has_bfd),y) 395 EXTLIBS += -lbfd 396 else ifeq ($(has_bfd_iberty),y) 397 EXTLIBS += -lbfd -liberty 398 else ifeq ($(has_bfd_iberty_z),y) 399 EXTLIBS += -lbfd -liberty -lz 400 else 401 msg := $(warning No bfd.h/libbfd found, install binutils-dev[el] to gain symbol demangling) 402 BASIC_CFLAGS += -DNO_DEMANGLE 403 endif 404endif 405 406ifndef CC_LD_DYNPATH 407 ifdef NO_R_TO_GCC_LINKER 408 # Some gcc does not accept and pass -R to the linker to specify 409 # the runtime dynamic library path. 410 CC_LD_DYNPATH = -Wl,-rpath, 411 else 412 CC_LD_DYNPATH = -R 413 endif 414endif 415 416ifdef NEEDS_SOCKET 417 EXTLIBS += -lsocket 418endif 419ifdef NEEDS_NSL 420 EXTLIBS += -lnsl 421endif 422ifdef NO_D_TYPE_IN_DIRENT 423 BASIC_CFLAGS += -DNO_D_TYPE_IN_DIRENT 424endif 425ifdef NO_D_INO_IN_DIRENT 426 BASIC_CFLAGS += -DNO_D_INO_IN_DIRENT 427endif 428ifdef NO_ST_BLOCKS_IN_STRUCT_STAT 429 BASIC_CFLAGS += -DNO_ST_BLOCKS_IN_STRUCT_STAT 430endif 431ifdef USE_NSEC 432 BASIC_CFLAGS += -DUSE_NSEC 433endif 434ifdef USE_ST_TIMESPEC 435 BASIC_CFLAGS += -DUSE_ST_TIMESPEC 436endif 437ifdef NO_NSEC 438 BASIC_CFLAGS += -DNO_NSEC 439endif 440ifdef NO_C99_FORMAT 441 BASIC_CFLAGS += -DNO_C99_FORMAT 442endif 443ifdef SNPRINTF_RETURNS_BOGUS 444 COMPAT_CFLAGS += -DSNPRINTF_RETURNS_BOGUS 445 COMPAT_OBJS += compat/snprintf.o 446endif 447ifdef FREAD_READS_DIRECTORIES 448 COMPAT_CFLAGS += -DFREAD_READS_DIRECTORIES 449 COMPAT_OBJS += compat/fopen.o 450endif 451ifdef NO_SYMLINK_HEAD 452 BASIC_CFLAGS += -DNO_SYMLINK_HEAD 453endif 454ifdef NO_STRCASESTR 455 COMPAT_CFLAGS += -DNO_STRCASESTR 456 COMPAT_OBJS += compat/strcasestr.o 457endif 458ifdef NO_STRTOUMAX 459 COMPAT_CFLAGS += -DNO_STRTOUMAX 460 COMPAT_OBJS += compat/strtoumax.o 461endif 462ifdef NO_STRTOULL 463 COMPAT_CFLAGS += -DNO_STRTOULL 464endif 465ifdef NO_SETENV 466 COMPAT_CFLAGS += -DNO_SETENV 467 COMPAT_OBJS += compat/setenv.o 468endif 469ifdef NO_MKDTEMP 470 COMPAT_CFLAGS += -DNO_MKDTEMP 471 COMPAT_OBJS += compat/mkdtemp.o 472endif 473ifdef NO_UNSETENV 474 COMPAT_CFLAGS += -DNO_UNSETENV 475 COMPAT_OBJS += compat/unsetenv.o 476endif 477ifdef NO_SYS_SELECT_H 478 BASIC_CFLAGS += -DNO_SYS_SELECT_H 479endif 480ifdef NO_MMAP 481 COMPAT_CFLAGS += -DNO_MMAP 482 COMPAT_OBJS += compat/mmap.o 483else 484 ifdef USE_WIN32_MMAP 485 COMPAT_CFLAGS += -DUSE_WIN32_MMAP 486 COMPAT_OBJS += compat/win32mmap.o 487 endif 488endif 489ifdef NO_PREAD 490 COMPAT_CFLAGS += -DNO_PREAD 491 COMPAT_OBJS += compat/pread.o 492endif 493ifdef NO_FAST_WORKING_DIRECTORY 494 BASIC_CFLAGS += -DNO_FAST_WORKING_DIRECTORY 495endif 496ifdef NO_TRUSTABLE_FILEMODE 497 BASIC_CFLAGS += -DNO_TRUSTABLE_FILEMODE 498endif 499ifdef NO_IPV6 500 BASIC_CFLAGS += -DNO_IPV6 501endif 502ifdef NO_UINTMAX_T 503 BASIC_CFLAGS += -Duintmax_t=uint32_t 504endif 505ifdef NO_SOCKADDR_STORAGE 506ifdef NO_IPV6 507 BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in 508else 509 BASIC_CFLAGS += -Dsockaddr_storage=sockaddr_in6 510endif 511endif 512ifdef NO_INET_NTOP 513 LIB_OBJS += compat/inet_ntop.o 514endif 515ifdef NO_INET_PTON 516 LIB_OBJS += compat/inet_pton.o 517endif 518 519ifdef NO_ICONV 520 BASIC_CFLAGS += -DNO_ICONV 521endif 522 523ifdef OLD_ICONV 524 BASIC_CFLAGS += -DOLD_ICONV 525endif 526 527ifdef NO_DEFLATE_BOUND 528 BASIC_CFLAGS += -DNO_DEFLATE_BOUND 529endif 530 531ifdef PPC_SHA1 532 SHA1_HEADER = "ppc/sha1.h" 533 LIB_OBJS += ppc/sha1.o ppc/sha1ppc.o 534else 535ifdef ARM_SHA1 536 SHA1_HEADER = "arm/sha1.h" 537 LIB_OBJS += arm/sha1.o arm/sha1_arm.o 538else 539ifdef MOZILLA_SHA1 540 SHA1_HEADER = "mozilla-sha1/sha1.h" 541 LIB_OBJS += mozilla-sha1/sha1.o 542else 543 SHA1_HEADER = <openssl/sha.h> 544 EXTLIBS += $(LIB_4_CRYPTO) 545endif 546endif 547endif 548ifdef NO_PERL_MAKEMAKER 549 export NO_PERL_MAKEMAKER 550endif 551ifdef NO_HSTRERROR 552 COMPAT_CFLAGS += -DNO_HSTRERROR 553 COMPAT_OBJS += compat/hstrerror.o 554endif 555ifdef NO_MEMMEM 556 COMPAT_CFLAGS += -DNO_MEMMEM 557 COMPAT_OBJS += compat/memmem.o 558endif 559ifdef INTERNAL_QSORT 560 COMPAT_CFLAGS += -DINTERNAL_QSORT 561 COMPAT_OBJS += compat/qsort.o 562endif 563ifdef RUNTIME_PREFIX 564 COMPAT_CFLAGS += -DRUNTIME_PREFIX 565endif 566 567ifdef DIR_HAS_BSD_GROUP_SEMANTICS 568 COMPAT_CFLAGS += -DDIR_HAS_BSD_GROUP_SEMANTICS 569endif 570ifdef NO_EXTERNAL_GREP 571 BASIC_CFLAGS += -DNO_EXTERNAL_GREP 572endif 573 574ifeq ($(PERL_PATH),) 575NO_PERL=NoThanks 576endif 577 578QUIET_SUBDIR0 = +$(MAKE) -C # space to separate -C and subdir 579QUIET_SUBDIR1 = 580 581ifneq ($(findstring $(MAKEFLAGS),w),w) 582PRINT_DIR = --no-print-directory 583else # "make -w" 584NO_SUBDIR = : 585endif 586 587ifneq ($(findstring $(MAKEFLAGS),s),s) 588ifndef V 589 QUIET_CC = @echo ' ' CC $@; 590 QUIET_AR = @echo ' ' AR $@; 591 QUIET_LINK = @echo ' ' LINK $@; 592 QUIET_BUILT_IN = @echo ' ' BUILTIN $@; 593 QUIET_GEN = @echo ' ' GEN $@; 594 QUIET_SUBDIR0 = +@subdir= 595 QUIET_SUBDIR1 = ;$(NO_SUBDIR) echo ' ' SUBDIR $$subdir; \ 596 $(MAKE) $(PRINT_DIR) -C $$subdir 597 export V 598 export QUIET_GEN 599 export QUIET_BUILT_IN 600endif 601endif 602 603ifdef ASCIIDOC8 604 export ASCIIDOC8 605endif 606 607# Shell quote (do not use $(call) to accommodate ancient setups); 608 609SHA1_HEADER_SQ = $(subst ','\'',$(SHA1_HEADER)) 610ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG)) 611 612DESTDIR_SQ = $(subst ','\'',$(DESTDIR)) 613bindir_SQ = $(subst ','\'',$(bindir)) 614bindir_relative_SQ = $(subst ','\'',$(bindir_relative)) 615mandir_SQ = $(subst ','\'',$(mandir)) 616infodir_SQ = $(subst ','\'',$(infodir)) 617perfexecdir_SQ = $(subst ','\'',$(perfexecdir)) 618template_dir_SQ = $(subst ','\'',$(template_dir)) 619htmldir_SQ = $(subst ','\'',$(htmldir)) 620prefix_SQ = $(subst ','\'',$(prefix)) 621 622SHELL_PATH_SQ = $(subst ','\'',$(SHELL_PATH)) 623PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH)) 624 625LIBS = $(PERFLIBS) $(EXTLIBS) 626 627BASIC_CFLAGS += -DSHA1_HEADER='$(SHA1_HEADER_SQ)' \ 628 $(COMPAT_CFLAGS) 629LIB_OBJS += $(COMPAT_OBJS) 630 631ALL_CFLAGS += $(BASIC_CFLAGS) 632ALL_LDFLAGS += $(BASIC_LDFLAGS) 633 634export TAR INSTALL DESTDIR SHELL_PATH 635 636 637### Build rules 638 639SHELL = $(SHELL_PATH) 640 641all:: shell_compatibility_test $(ALL_PROGRAMS) $(BUILT_INS) $(OTHER_PROGRAMS) PERF-BUILD-OPTIONS 642ifneq (,$X) 643 $(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) perf$X)), test '$p' -ef '$p$X' || $(RM) '$p';) 644endif 645 646all:: 647 648please_set_SHELL_PATH_to_a_more_modern_shell: 649 @$$(:) 650 651shell_compatibility_test: please_set_SHELL_PATH_to_a_more_modern_shell 652 653strip: $(PROGRAMS) perf$X 654 $(STRIP) $(STRIP_OPTS) $(PROGRAMS) perf$X 655 656perf.o: perf.c common-cmds.h PERF-CFLAGS 657 $(QUIET_CC)$(CC) -DPERF_VERSION='"$(PERF_VERSION)"' \ 658 '-DPERF_HTML_PATH="$(htmldir_SQ)"' \ 659 $(ALL_CFLAGS) -c $(filter %.c,$^) 660 661perf$X: perf.o $(BUILTIN_OBJS) $(PERFLIBS) 662 $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ perf.o \ 663 $(BUILTIN_OBJS) $(ALL_LDFLAGS) $(LIBS) 664 665builtin-help.o: builtin-help.c common-cmds.h PERF-CFLAGS 666 $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \ 667 '-DPERF_HTML_PATH="$(htmldir_SQ)"' \ 668 '-DPERF_MAN_PATH="$(mandir_SQ)"' \ 669 '-DPERF_INFO_PATH="$(infodir_SQ)"' $< 670 671$(BUILT_INS): perf$X 672 $(QUIET_BUILT_IN)$(RM) $@ && \ 673 ln perf$X $@ 2>/dev/null || \ 674 ln -s perf$X $@ 2>/dev/null || \ 675 cp perf$X $@ 676 677common-cmds.h: util/generate-cmdlist.sh command-list.txt 678 679common-cmds.h: $(wildcard Documentation/perf-*.txt) 680 $(QUIET_GEN)util/generate-cmdlist.sh > $@+ && mv $@+ $@ 681 682$(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh 683 $(QUIET_GEN)$(RM) $@ $@+ && \ 684 sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \ 685 -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \ 686 -e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \ 687 -e 's/@@PERF_VERSION@@/$(PERF_VERSION)/g' \ 688 -e 's/@@NO_CURL@@/$(NO_CURL)/g' \ 689 $@.sh >$@+ && \ 690 chmod +x $@+ && \ 691 mv $@+ $@ 692 693configure: configure.ac 694 $(QUIET_GEN)$(RM) $@ $<+ && \ 695 sed -e 's/@@PERF_VERSION@@/$(PERF_VERSION)/g' \ 696 $< > $<+ && \ 697 autoconf -o $@ $<+ && \ 698 $(RM) $<+ 699 700# These can record PERF_VERSION 701perf.o perf.spec \ 702 $(patsubst %.sh,%,$(SCRIPT_SH)) \ 703 $(patsubst %.perl,%,$(SCRIPT_PERL)) \ 704 : PERF-VERSION-FILE 705 706%.o: %.c PERF-CFLAGS 707 $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $< 708%.s: %.c PERF-CFLAGS 709 $(QUIET_CC)$(CC) -S $(ALL_CFLAGS) $< 710%.o: %.S 711 $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) $< 712 713util/exec_cmd.o: util/exec_cmd.c PERF-CFLAGS 714 $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) \ 715 '-DPERF_EXEC_PATH="$(perfexecdir_SQ)"' \ 716 '-DBINDIR="$(bindir_relative_SQ)"' \ 717 '-DPREFIX="$(prefix_SQ)"' \ 718 $< 719 720builtin-init-db.o: builtin-init-db.c PERF-CFLAGS 721 $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DDEFAULT_PERF_TEMPLATE_DIR='"$(template_dir_SQ)"' $< 722 723util/config.o: util/config.c PERF-CFLAGS 724 $(QUIET_CC)$(CC) -o $*.o -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $< 725 726util/rbtree.o: ../../lib/rbtree.c PERF-CFLAGS 727 $(QUIET_CC)$(CC) -o util/rbtree.o -c $(ALL_CFLAGS) -DETC_PERFCONFIG='"$(ETC_PERFCONFIG_SQ)"' $< 728 729perf-%$X: %.o $(PERFLIBS) 730 $(QUIET_LINK)$(CC) $(ALL_CFLAGS) -o $@ $(ALL_LDFLAGS) $(filter %.o,$^) $(LIBS) 731 732$(LIB_OBJS) $(BUILTIN_OBJS): $(LIB_H) 733$(patsubst perf-%$X,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h) 734builtin-revert.o wt-status.o: wt-status.h 735 736$(LIB_FILE): $(LIB_OBJS) 737 $(QUIET_AR)$(RM) $@ && $(AR) rcs $@ $(LIB_OBJS) 738 739doc: 740 $(MAKE) -C Documentation all 741 742man: 743 $(MAKE) -C Documentation man 744 745html: 746 $(MAKE) -C Documentation html 747 748info: 749 $(MAKE) -C Documentation info 750 751pdf: 752 $(MAKE) -C Documentation pdf 753 754TAGS: 755 $(RM) TAGS 756 $(FIND) . -name '*.[hcS]' -print | xargs etags -a 757 758tags: 759 $(RM) tags 760 $(FIND) . -name '*.[hcS]' -print | xargs ctags -a 761 762cscope: 763 $(RM) cscope* 764 $(FIND) . -name '*.[hcS]' -print | xargs cscope -b 765 766### Detect prefix changes 767TRACK_CFLAGS = $(subst ','\'',$(ALL_CFLAGS)):\ 768 $(bindir_SQ):$(perfexecdir_SQ):$(template_dir_SQ):$(prefix_SQ) 769 770PERF-CFLAGS: .FORCE-PERF-CFLAGS 771 @FLAGS='$(TRACK_CFLAGS)'; \ 772 if test x"$$FLAGS" != x"`cat PERF-CFLAGS 2>/dev/null`" ; then \ 773 echo 1>&2 " * new build flags or prefix"; \ 774 echo "$$FLAGS" >PERF-CFLAGS; \ 775 fi 776 777# We need to apply sq twice, once to protect from the shell 778# that runs PERF-BUILD-OPTIONS, and then again to protect it 779# and the first level quoting from the shell that runs "echo". 780PERF-BUILD-OPTIONS: .FORCE-PERF-BUILD-OPTIONS 781 @echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@ 782 @echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@ 783 @echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@ 784 @echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@ 785 786### Testing rules 787 788# 789# None right now: 790# 791# TEST_PROGRAMS += test-something$X 792 793all:: $(TEST_PROGRAMS) 794 795# GNU make supports exporting all variables by "export" without parameters. 796# However, the environment gets quite big, and some programs have problems 797# with that. 798 799export NO_SVN_TESTS 800 801check: common-cmds.h 802 if sparse; \ 803 then \ 804 for i in *.c */*.c; \ 805 do \ 806 sparse $(ALL_CFLAGS) $(SPARSE_FLAGS) $$i || exit; \ 807 done; \ 808 else \ 809 echo 2>&1 "Did you mean 'make test'?"; \ 810 exit 1; \ 811 fi 812 813remove-dashes: 814 ./fixup-builtins $(BUILT_INS) $(PROGRAMS) $(SCRIPTS) 815 816### Installation rules 817 818ifneq ($(filter /%,$(firstword $(template_dir))),) 819template_instdir = $(template_dir) 820else 821template_instdir = $(prefix)/$(template_dir) 822endif 823export template_instdir 824 825ifneq ($(filter /%,$(firstword $(perfexecdir))),) 826perfexec_instdir = $(perfexecdir) 827else 828perfexec_instdir = $(prefix)/$(perfexecdir) 829endif 830perfexec_instdir_SQ = $(subst ','\'',$(perfexec_instdir)) 831export perfexec_instdir 832 833install: all 834 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)' 835 $(INSTALL) perf$X '$(DESTDIR_SQ)$(bindir_SQ)' 836ifdef BUILT_INS 837 $(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)' 838 $(INSTALL) $(BUILT_INS) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)' 839ifneq (,$X) 840 $(foreach p,$(patsubst %$X,%,$(filter %$X,$(ALL_PROGRAMS) $(BUILT_INS) perf$X)), $(RM) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/$p';) 841endif 842endif 843 844install-doc: 845 $(MAKE) -C Documentation install 846 847install-man: 848 $(MAKE) -C Documentation install-man 849 850install-html: 851 $(MAKE) -C Documentation install-html 852 853install-info: 854 $(MAKE) -C Documentation install-info 855 856install-pdf: 857 $(MAKE) -C Documentation install-pdf 858 859quick-install-doc: 860 $(MAKE) -C Documentation quick-install 861 862quick-install-man: 863 $(MAKE) -C Documentation quick-install-man 864 865quick-install-html: 866 $(MAKE) -C Documentation quick-install-html 867 868 869### Maintainer's dist rules 870# 871# None right now 872# 873# 874# perf.spec: perf.spec.in 875# sed -e 's/@@VERSION@@/$(PERF_VERSION)/g' < $< > $@+ 876# mv $@+ $@ 877# 878# PERF_TARNAME=perf-$(PERF_VERSION) 879# dist: perf.spec perf-archive$(X) configure 880# ./perf-archive --format=tar \ 881# --prefix=$(PERF_TARNAME)/ HEAD^{tree} > $(PERF_TARNAME).tar 882# @mkdir -p $(PERF_TARNAME) 883# @cp perf.spec configure $(PERF_TARNAME) 884# @echo $(PERF_VERSION) > $(PERF_TARNAME)/version 885# $(TAR) rf $(PERF_TARNAME).tar \ 886# $(PERF_TARNAME)/perf.spec \ 887# $(PERF_TARNAME)/configure \ 888# $(PERF_TARNAME)/version 889# @$(RM) -r $(PERF_TARNAME) 890# gzip -f -9 $(PERF_TARNAME).tar 891# 892# htmldocs = perf-htmldocs-$(PERF_VERSION) 893# manpages = perf-manpages-$(PERF_VERSION) 894# dist-doc: 895# $(RM) -r .doc-tmp-dir 896# mkdir .doc-tmp-dir 897# $(MAKE) -C Documentation WEBDOC_DEST=../.doc-tmp-dir install-webdoc 898# cd .doc-tmp-dir && $(TAR) cf ../$(htmldocs).tar . 899# gzip -n -9 -f $(htmldocs).tar 900# : 901# $(RM) -r .doc-tmp-dir 902# mkdir -p .doc-tmp-dir/man1 .doc-tmp-dir/man5 .doc-tmp-dir/man7 903# $(MAKE) -C Documentation DESTDIR=./ \ 904# man1dir=../.doc-tmp-dir/man1 \ 905# man5dir=../.doc-tmp-dir/man5 \ 906# man7dir=../.doc-tmp-dir/man7 \ 907# install 908# cd .doc-tmp-dir && $(TAR) cf ../$(manpages).tar . 909# gzip -n -9 -f $(manpages).tar 910# $(RM) -r .doc-tmp-dir 911# 912# rpm: dist 913# $(RPMBUILD) -ta $(PERF_TARNAME).tar.gz 914 915### Cleaning rules 916 917distclean: clean 918# $(RM) configure 919 920clean: 921 $(RM) *.o */*.o $(LIB_FILE) 922 $(RM) $(ALL_PROGRAMS) $(BUILT_INS) perf$X 923 $(RM) $(TEST_PROGRAMS) 924 $(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo common-cmds.h TAGS tags cscope* 925 $(RM) -r autom4te.cache 926 $(RM) config.log config.mak.autogen config.mak.append config.status config.cache 927 $(RM) -r $(PERF_TARNAME) .doc-tmp-dir 928 $(RM) $(PERF_TARNAME).tar.gz perf-core_$(PERF_VERSION)-*.tar.gz 929 $(RM) $(htmldocs).tar.gz $(manpages).tar.gz 930 $(MAKE) -C Documentation/ clean 931 $(RM) PERF-VERSION-FILE PERF-CFLAGS PERF-BUILD-OPTIONS 932 933.PHONY: all install clean strip 934.PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell 935.PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS 936.PHONY: .FORCE-PERF-BUILD-OPTIONS 937 938### Make sure built-ins do not have dups and listed in perf.c 939# 940check-builtins:: 941 ./check-builtins.sh 942 943### Test suite coverage testing 944# 945# None right now 946# 947# .PHONY: coverage coverage-clean coverage-build coverage-report 948# 949# coverage: 950# $(MAKE) coverage-build 951# $(MAKE) coverage-report 952# 953# coverage-clean: 954# rm -f *.gcda *.gcno 955# 956# COVERAGE_CFLAGS = $(CFLAGS) -O0 -ftest-coverage -fprofile-arcs 957# COVERAGE_LDFLAGS = $(CFLAGS) -O0 -lgcov 958# 959# coverage-build: coverage-clean 960# $(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" all 961# $(MAKE) CFLAGS="$(COVERAGE_CFLAGS)" LDFLAGS="$(COVERAGE_LDFLAGS)" \ 962# -j1 test 963# 964# coverage-report: 965# gcov -b *.c */*.c 966# grep '^function.*called 0 ' *.c.gcov */*.c.gcov \ 967# | sed -e 's/\([^:]*\)\.gcov: *function \([^ ]*\) called.*/\1: \2/' \ 968# | tee coverage-untested-functions 969