public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH/RFC 0/3] perf ui/gtk: Separate out GTK code to a shared object (v3)
@ 2013-08-08  6:34 Namhyung Kim
  2013-08-08  6:34 ` [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so Namhyung Kim
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Namhyung Kim @ 2013-08-08  6:34 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML,
	Pekka Enberg, Andi Kleen, Jiri Olsa

Hi,

This is v3 of gtk code separation patchset to reduce library
dependencies of the perf executable.

I only built libperf-gtk.so with -fPIC, and it's not linked to libperf
at build time.  All unresolved symbols used for perf should be
resolved at runtime via perf executable (so libperf.a) - I didn't know
that the linker permits unresolved symbols in a shared library at
build time.

Tested on my x86-64 machine only.  It seems work well for me.

v3 changes:
 * fix build failure on O= option
 * fix build failure on NO_GTK2= option
 * add Reviewed-by tag from Pekka
 * patch 1 of previous series already merged

You can find it on my 'perf/separate-v3' branch in my tree at:

  git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git


Any comments are welcome, thanks
Namhyung


Cc: Pekka Enberg <penberg@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>

Namhyung Kim (3):
  perf tools: Separate out GTK codes to libperf-gtk.so
  perf tools: Setup GTK browser dynamically
  perf tools: Run dynamic loaded GTK browser

 tools/perf/Makefile           | 39 +++++++++++++++++++++++----------
 tools/perf/builtin-annotate.c | 26 +++++++++++++++++++---
 tools/perf/builtin-report.c   | 16 ++++++++++++--
 tools/perf/config/Makefile    | 12 ++++++++---
 tools/perf/ui/gtk/annotate.c  | 13 ++++++++---
 tools/perf/ui/gtk/gtk.h       | 16 ++++++++++++++
 tools/perf/ui/setup.c         | 50 +++++++++++++++++++++++++++++++++++++++++--
 tools/perf/ui/ui.h            | 12 +----------
 tools/perf/util/annotate.h    | 24 ---------------------
 tools/perf/util/hist.h        | 15 -------------
 10 files changed, 149 insertions(+), 74 deletions(-)

-- 
1.7.11.7


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so
  2013-08-08  6:34 [PATCH/RFC 0/3] perf ui/gtk: Separate out GTK code to a shared object (v3) Namhyung Kim
@ 2013-08-08  6:34 ` Namhyung Kim
  2013-08-08 15:21   ` Arnaldo Carvalho de Melo
  2013-08-08  6:34 ` [PATCH 2/3] perf tools: Setup GTK browser dynamically Namhyung Kim
  2013-08-08  6:34 ` [PATCH 3/3] perf tools: Run dynamic loaded GTK browser Namhyung Kim
  2 siblings, 1 reply; 7+ messages in thread
From: Namhyung Kim @ 2013-08-08  6:34 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML,
	Pekka Enberg, Andi Kleen, Jiri Olsa, Andi Kleen

Separate out GTK codes to a shared object called libperf-gtk.so.  This
time only GTK codes are built with -fPIC and libperf remains as is.

Cc: Andi Kleen <ak@linux.intel.com>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/Makefile        | 39 ++++++++++++++++++++++++++++-----------
 tools/perf/config/Makefile | 14 ++++++++++----
 2 files changed, 38 insertions(+), 15 deletions(-)

diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index e0d3d9f96771..dba23d201f27 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -113,6 +113,7 @@ SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
 BUILTIN_OBJS =
 LIB_H =
 LIB_OBJS =
+GTK_OBJS =
 PYRF_OBJS =
 SCRIPT_SH =
 
@@ -485,13 +486,19 @@ ifndef NO_SLANG
 endif
 
 ifndef NO_GTK2
-  LIB_OBJS += $(OUTPUT)ui/gtk/browser.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/hists.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/setup.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/util.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/helpline.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/progress.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/annotate.o
+  ALL_PROGRAMS += $(OUTPUT)libperf-gtk.so
+
+  GTK_OBJS += $(OUTPUT)ui/gtk/browser.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/hists.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/setup.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/util.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/helpline.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/progress.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/annotate.o
+
+install-gtk: $(OUTPUT)libperf-gtk.so
+	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(libdir_SQ)'
+	$(INSTALL) $(OUTPUT)libperf-gtk.so '$(DESTDIR_SQ)$(libdir_SQ)'
 endif
 
 ifndef NO_LIBPERL
@@ -545,6 +552,12 @@ $(OUTPUT)perf: $(OUTPUT)perf.o $(BUILTIN_OBJS) $(PERFLIBS)
 	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(OUTPUT)perf.o \
                $(BUILTIN_OBJS) $(LIBS) -o $@
 
+$(GTK_OBJS): $(OUTPUT)%.o: %.c $(LIB_H)
+	$(QUIET_CC)$(CC) -o $@ -c -fPIC $(CFLAGS) $(GTK_CFLAGS) $<
+
+$(OUTPUT)libperf-gtk.so: $(GTK_OBJS) $(PERFLIBS)
+	$(QUIET_LINK)$(CC) -o $@ -shared $(ALL_LDFLAGS) $(filter %.o,$^) $(GTK_LIBS)
+
 $(OUTPUT)builtin-help.o: builtin-help.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
 	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) \
 		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
@@ -763,7 +776,9 @@ check: $(OUTPUT)common-cmds.h
 
 ### Installation rules
 
-install-bin: all
+install-gtk:
+
+install-bin: all install-gtk
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'
@@ -796,15 +811,17 @@ $(INSTALL_DOC_TARGETS):
 ### Cleaning rules
 
 clean: $(LIBTRACEEVENT)-clean $(LIBLK)-clean
-	$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
+	$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(GTK_OBJS)
+	$(RM) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
 	$(RM) $(ALL_PROGRAMS) perf
-	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
+	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo
+	$(RM) $(OUTPUT)common-cmds.h TAGS tags cscope*
 	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
 	$(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
 	$(RM) $(OUTPUT)util/*-bison*
 	$(RM) $(OUTPUT)util/*-flex*
 	$(python-clean)
 
-.PHONY: all install clean strip $(LIBTRACEEVENT) $(LIBLK)
+.PHONY: all install clean strip $(LIBTRACEEVENT) $(LIBLK) install-gtk
 .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
 .PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 214e17e97e5c..6bdfd0302c4e 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -267,11 +267,11 @@ ifndef NO_GTK2
     NO_GTK2 := 1
   else
     ifeq ($(call try-cc,$(SOURCE_GTK2_INFOBAR),$(FLAGS_GTK2),-DHAVE_GTK_INFO_BAR),y)
-      CFLAGS += -DHAVE_GTK_INFO_BAR
+      GTK_CFLAGS := -DHAVE_GTK_INFO_BAR
     endif
-    CFLAGS += -DGTK2_SUPPORT
-    CFLAGS += $(shell pkg-config --cflags gtk+-2.0 2>/dev/null)
-    EXTLIBS += $(shell pkg-config --libs gtk+-2.0 2>/dev/null)
+    GTK_CFLAGS += -DGTK2_SUPPORT
+    GTK_CFLAGS += $(shell pkg-config --cflags gtk+-2.0 2>/dev/null)
+    GTK_LIBS := $(shell pkg-config --libs gtk+-2.0 2>/dev/null)
   endif
 endif
 
@@ -456,7 +456,12 @@ else
 sysconfdir = $(prefix)/etc
 ETC_PERFCONFIG = etc/perfconfig
 endif
+ifeq ($(IS_X86_64),1)
+lib = lib64
+else
 lib = lib
+endif
+libdir = $(prefix)/$(lib)
 
 # Shell quote (do not use $(call) to accommodate ancient setups);
 ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
@@ -469,6 +474,7 @@ template_dir_SQ = $(subst ','\'',$(template_dir))
 htmldir_SQ = $(subst ','\'',$(htmldir))
 prefix_SQ = $(subst ','\'',$(prefix))
 sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
+libdir_SQ = $(subst ','\'',$(libdir))
 
 ifneq ($(filter /%,$(firstword $(perfexecdir))),)
 perfexec_instdir = $(perfexecdir)
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] perf tools: Setup GTK browser dynamically
  2013-08-08  6:34 [PATCH/RFC 0/3] perf ui/gtk: Separate out GTK code to a shared object (v3) Namhyung Kim
  2013-08-08  6:34 ` [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so Namhyung Kim
@ 2013-08-08  6:34 ` Namhyung Kim
  2013-08-08  6:34 ` [PATCH 3/3] perf tools: Run dynamic loaded GTK browser Namhyung Kim
  2 siblings, 0 replies; 7+ messages in thread
From: Namhyung Kim @ 2013-08-08  6:34 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML,
	Pekka Enberg, Andi Kleen, Jiri Olsa, Andi Kleen

Call setup/exit GTK browser function using libdl.

Cc: Andi Kleen <ak@linux.intel.com>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/ui/gtk/gtk.h |  3 +++
 tools/perf/ui/setup.c   | 50 +++++++++++++++++++++++++++++++++++++++++++++++--
 tools/perf/ui/ui.h      | 12 +-----------
 3 files changed, 52 insertions(+), 13 deletions(-)

diff --git a/tools/perf/ui/gtk/gtk.h b/tools/perf/ui/gtk/gtk.h
index 3d96785ef155..09b7a062fd48 100644
--- a/tools/perf/ui/gtk/gtk.h
+++ b/tools/perf/ui/gtk/gtk.h
@@ -20,6 +20,9 @@ struct perf_gtk_context {
 	guint statbar_ctx_id;
 };
 
+int perf_gtk__init(void);
+void perf_gtk__exit(bool wait_for_ok);
+
 extern struct perf_gtk_context *pgctx;
 
 static inline bool perf_gtk__is_active_context(struct perf_gtk_context *ctx)
diff --git a/tools/perf/ui/setup.c b/tools/perf/ui/setup.c
index 47d9a571f261..33338c03741b 100644
--- a/tools/perf/ui/setup.c
+++ b/tools/perf/ui/setup.c
@@ -1,10 +1,56 @@
 #include <pthread.h>
+#include <dlfcn.h>
 
 #include "../util/cache.h"
 #include "../util/debug.h"
 #include "../util/hist.h"
 
 pthread_mutex_t ui__lock = PTHREAD_MUTEX_INITIALIZER;
+void *perf_gtk_handle;
+
+#ifdef GTK2_SUPPORT
+static int setup_gtk_browser(void)
+{
+	int (*perf_ui_init)(void);
+
+	perf_gtk_handle = dlopen("libperf-gtk.so", RTLD_LAZY);
+	if (perf_gtk_handle == NULL)
+		return -1;
+
+	perf_ui_init = dlsym(perf_gtk_handle, "perf_gtk__init");
+	if (perf_ui_init == NULL)
+		goto out_close;
+
+	if (perf_ui_init() == 0)
+		return 0;
+
+out_close:
+	dlclose(perf_gtk_handle);
+	return -1;
+}
+
+static void exit_gtk_browser(bool wait_for_ok)
+{
+	void (*perf_ui_exit)(bool);
+
+	if (perf_gtk_handle == NULL)
+		return;
+
+	perf_ui_exit = dlsym(perf_gtk_handle, "perf_gtk__exit");
+	if (perf_ui_exit == NULL)
+		goto out_close;
+
+	perf_ui_exit(wait_for_ok);
+
+out_close:
+	dlclose(perf_gtk_handle);
+
+	perf_gtk_handle = NULL;
+}
+#else
+static inline int setup_gtk_browser(void) { return -1; }
+static inline void exit_gtk_browser(bool wait_for_ok __maybe_unused) {}
+#endif
 
 void setup_browser(bool fallback_to_pager)
 {
@@ -17,7 +63,7 @@ void setup_browser(bool fallback_to_pager)
 
 	switch (use_browser) {
 	case 2:
-		if (perf_gtk__init() == 0)
+		if (setup_gtk_browser() == 0)
 			break;
 		/* fall through */
 	case 1:
@@ -39,7 +85,7 @@ void exit_browser(bool wait_for_ok)
 {
 	switch (use_browser) {
 	case 2:
-		perf_gtk__exit(wait_for_ok);
+		exit_gtk_browser(wait_for_ok);
 		break;
 
 	case 1:
diff --git a/tools/perf/ui/ui.h b/tools/perf/ui/ui.h
index 70cb0d4eb8aa..4f7cbe6a2608 100644
--- a/tools/perf/ui/ui.h
+++ b/tools/perf/ui/ui.h
@@ -6,6 +6,7 @@
 #include <linux/compiler.h>
 
 extern pthread_mutex_t ui__lock;
+extern void *perf_gtk_handle;
 
 extern int use_browser;
 
@@ -23,17 +24,6 @@ static inline int ui__init(void)
 static inline void ui__exit(bool wait_for_ok __maybe_unused) {}
 #endif
 
-#ifdef GTK2_SUPPORT
-int perf_gtk__init(void);
-void perf_gtk__exit(bool wait_for_ok);
-#else
-static inline int perf_gtk__init(void)
-{
-	return -1;
-}
-static inline void perf_gtk__exit(bool wait_for_ok __maybe_unused) {}
-#endif
-
 void ui__refresh_dimensions(bool force);
 
 #endif /* _PERF_UI_H_ */
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] perf tools: Run dynamic loaded GTK browser
  2013-08-08  6:34 [PATCH/RFC 0/3] perf ui/gtk: Separate out GTK code to a shared object (v3) Namhyung Kim
  2013-08-08  6:34 ` [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so Namhyung Kim
  2013-08-08  6:34 ` [PATCH 2/3] perf tools: Setup GTK browser dynamically Namhyung Kim
@ 2013-08-08  6:34 ` Namhyung Kim
  2 siblings, 0 replies; 7+ messages in thread
From: Namhyung Kim @ 2013-08-08  6:34 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML,
	Pekka Enberg, Andi Kleen, Jiri Olsa, Andi Kleen

Run GTK hist and annotation browser using libdl.

Cc: Andi Kleen <ak@linux.intel.com>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/builtin-annotate.c | 26 +++++++++++++++++++++++---
 tools/perf/builtin-report.c   | 16 ++++++++++++++--
 tools/perf/config/Makefile    |  2 +-
 tools/perf/ui/gtk/annotate.c  | 13 ++++++++++---
 tools/perf/ui/gtk/gtk.h       | 13 +++++++++++++
 tools/perf/util/annotate.h    | 24 ------------------------
 tools/perf/util/hist.h        | 15 ---------------
 7 files changed, 61 insertions(+), 48 deletions(-)

diff --git a/tools/perf/builtin-annotate.c b/tools/perf/builtin-annotate.c
index db491e9a812b..82469b3ead07 100644
--- a/tools/perf/builtin-annotate.c
+++ b/tools/perf/builtin-annotate.c
@@ -30,6 +30,7 @@
 #include "util/tool.h"
 #include "arch/common.h"
 
+#include <dlfcn.h>
 #include <linux/bitmap.h>
 
 struct perf_annotate {
@@ -143,8 +144,18 @@ find_next:
 
 		if (use_browser == 2) {
 			int ret;
+			int (*annotate)(struct hist_entry *he,
+					struct perf_evsel *evsel,
+					struct hist_browser_timer *hbt);
+
+			annotate = dlsym(perf_gtk_handle,
+					 "hist_entry__gtk_annotate");
+			if (annotate == NULL) {
+				ui__error("GTK browser not found!\n");
+				return;
+			}
 
-			ret = hist_entry__gtk_annotate(he, evsel, NULL);
+			ret = annotate(he, evsel, NULL);
 			if (!ret || !ann->skip_missing)
 				return;
 
@@ -246,8 +257,17 @@ static int __cmd_annotate(struct perf_annotate *ann)
 		goto out_delete;
 	}
 
-	if (use_browser == 2)
-		perf_gtk__show_annotations();
+	if (use_browser == 2) {
+		void (*show_annotations)(void);
+
+		show_annotations = dlsym(perf_gtk_handle,
+					 "perf_gtk__show_annotations");
+		if (show_annotations == NULL) {
+			ui__error("GTK browser not found!\n");
+			goto out_delete;
+		}
+		show_annotations();
+	}
 
 out_delete:
 	/*
diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
index d785d89ed226..05c0e80c8ae4 100644
--- a/tools/perf/builtin-report.c
+++ b/tools/perf/builtin-report.c
@@ -35,6 +35,7 @@
 #include "util/hist.h"
 #include "arch/common.h"
 
+#include <dlfcn.h>
 #include <linux/bitmap.h>
 
 struct perf_report {
@@ -592,8 +593,19 @@ static int __cmd_report(struct perf_report *rep)
 				ret = 0;
 
 		} else if (use_browser == 2) {
-			perf_evlist__gtk_browse_hists(session->evlist, help,
-						      NULL, rep->min_percent);
+			int (*hist_browser)(struct perf_evlist *,
+					    const char *,
+					    struct hist_browser_timer *,
+					    float min_pcnt);
+
+			hist_browser = dlsym(perf_gtk_handle,
+					     "perf_evlist__gtk_browse_hists");
+			if (hist_browser == NULL) {
+				ui__error("GTK browser not found!\n");
+				return ret;
+			}
+			hist_browser(session->evlist, help, NULL,
+				     rep->min_percent);
 		}
 	} else
 		perf_evlist__tty_browse_hists(session->evlist, rep, help);
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 6bdfd0302c4e..1b6ccb242609 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -269,7 +269,7 @@ ifndef NO_GTK2
     ifeq ($(call try-cc,$(SOURCE_GTK2_INFOBAR),$(FLAGS_GTK2),-DHAVE_GTK_INFO_BAR),y)
       GTK_CFLAGS := -DHAVE_GTK_INFO_BAR
     endif
-    GTK_CFLAGS += -DGTK2_SUPPORT
+    CFLAGS += -DGTK2_SUPPORT
     GTK_CFLAGS += $(shell pkg-config --cflags gtk+-2.0 2>/dev/null)
     GTK_LIBS := $(shell pkg-config --libs gtk+-2.0 2>/dev/null)
   endif
diff --git a/tools/perf/ui/gtk/annotate.c b/tools/perf/ui/gtk/annotate.c
index f538794615db..9c7ff8d31b27 100644
--- a/tools/perf/ui/gtk/annotate.c
+++ b/tools/perf/ui/gtk/annotate.c
@@ -154,9 +154,9 @@ static int perf_gtk__annotate_symbol(GtkWidget *window, struct symbol *sym,
 	return 0;
 }
 
-int symbol__gtk_annotate(struct symbol *sym, struct map *map,
-			 struct perf_evsel *evsel,
-			 struct hist_browser_timer *hbt)
+static int symbol__gtk_annotate(struct symbol *sym, struct map *map,
+				struct perf_evsel *evsel,
+				struct hist_browser_timer *hbt)
 {
 	GtkWidget *window;
 	GtkWidget *notebook;
@@ -226,6 +226,13 @@ int symbol__gtk_annotate(struct symbol *sym, struct map *map,
 	return 0;
 }
 
+int hist_entry__gtk_annotate(struct hist_entry *he,
+			     struct perf_evsel *evsel,
+			     struct hist_browser_timer *hbt)
+{
+	return symbol__gtk_annotate(he->ms.sym, he->ms.map, evsel, hbt);
+}
+
 void perf_gtk__show_annotations(void)
 {
 	GtkWidget *window;
diff --git a/tools/perf/ui/gtk/gtk.h b/tools/perf/ui/gtk/gtk.h
index 09b7a062fd48..62922d284bca 100644
--- a/tools/perf/ui/gtk/gtk.h
+++ b/tools/perf/ui/gtk/gtk.h
@@ -51,4 +51,17 @@ static inline GtkWidget *perf_gtk__setup_info_bar(void)
 }
 #endif
 
+struct perf_evsel;
+struct perf_evlist;
+struct hist_entry;
+struct hist_browser_timer;
+
+int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist, const char *help,
+				  struct hist_browser_timer *hbt,
+				  float min_pcnt);
+int hist_entry__gtk_annotate(struct hist_entry *he,
+			     struct perf_evsel *evsel,
+			     struct hist_browser_timer *hbt);
+void perf_gtk__show_annotations(void);
+
 #endif /* _PERF_GTK_H_ */
diff --git a/tools/perf/util/annotate.h b/tools/perf/util/annotate.h
index af755156d278..31b898312c3f 100644
--- a/tools/perf/util/annotate.h
+++ b/tools/perf/util/annotate.h
@@ -165,30 +165,6 @@ static inline int symbol__tui_annotate(struct symbol *sym __maybe_unused,
 }
 #endif
 
-#ifdef GTK2_SUPPORT
-int symbol__gtk_annotate(struct symbol *sym, struct map *map,
-			 struct perf_evsel *evsel,
-			 struct hist_browser_timer *hbt);
-
-static inline int hist_entry__gtk_annotate(struct hist_entry *he,
-					   struct perf_evsel *evsel,
-					   struct hist_browser_timer *hbt)
-{
-	return symbol__gtk_annotate(he->ms.sym, he->ms.map, evsel, hbt);
-}
-
-void perf_gtk__show_annotations(void);
-#else
-static inline int hist_entry__gtk_annotate(struct hist_entry *he __maybe_unused,
-				struct perf_evsel *evsel __maybe_unused,
-				struct hist_browser_timer *hbt __maybe_unused)
-{
-	return 0;
-}
-
-static inline void perf_gtk__show_annotations(void) {}
-#endif
-
 extern const char	*disassembler_style;
 
 #endif	/* __PERF_ANNOTATE_H */
diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h
index 1329b6b6ffe6..7f29792efc58 100644
--- a/tools/perf/util/hist.h
+++ b/tools/perf/util/hist.h
@@ -224,20 +224,5 @@ static inline int script_browse(const char *script_opt __maybe_unused)
 #define K_SWITCH_INPUT_DATA -3000
 #endif
 
-#ifdef GTK2_SUPPORT
-int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist, const char *help,
-				  struct hist_browser_timer *hbt __maybe_unused,
-				  float min_pcnt);
-#else
-static inline
-int perf_evlist__gtk_browse_hists(struct perf_evlist *evlist __maybe_unused,
-				  const char *help __maybe_unused,
-				  struct hist_browser_timer *hbt __maybe_unused,
-				  float min_pcnt __maybe_unused)
-{
-	return 0;
-}
-#endif
-
 unsigned int hists__sort_list_width(struct hists *self);
 #endif	/* __PERF_HIST_H */
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so
  2013-08-08  6:34 ` [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so Namhyung Kim
@ 2013-08-08 15:21   ` Arnaldo Carvalho de Melo
  2013-08-09  6:17     ` Namhyung Kim
  0 siblings, 1 reply; 7+ messages in thread
From: Arnaldo Carvalho de Melo @ 2013-08-08 15:21 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML,
	Pekka Enberg, Andi Kleen, Jiri Olsa, Andi Kleen

Em Thu, Aug 08, 2013 at 03:34:08PM +0900, Namhyung Kim escreveu:
> Separate out GTK codes to a shared object called libperf-gtk.so.  This
> time only GTK codes are built with -fPIC and libperf remains as is.

[acme@sandy linux]$ cat /etc/fedora-release 
Fedora release 18 (Spherical Cow)
[acme@sandy linux]$ 

Applying: perf tools: Separate out GTK codes to libperf-gtk.so
[perf/core c1ca5ea] perf tools: Separate out GTK codes to libperf-gtk.so
 Author: Namhyung Kim <namhyung@kernel.org>
 2 files changed, 38 insertions(+), 15 deletions(-)
[acme@sandy linux]$ make -j8 O=/tmp/build/perf -C tools/perf/ install-bin
    CHK -fstack-protector-all
<SNIP>
    CC /tmp/build/perf/scripts/perl/Perf-Trace-Util/Context.o
    CC /tmp/build/perf/util/scripting-engines/trace-event-python.o
    CC /tmp/build/perf/scripts/python/Perf-Trace-Util/Context.o
    GEN perf-archive
    GEN /tmp/build/perf/python/perf.so
    CC /tmp/build/perf/perf.o
    AR /tmp/build/perf/libperf.a
    LINK /tmp/build/perf/perf
    LINK /tmp/build/perf/libperf-gtk.so
/usr/bin/ld: /tmp/build/perf/ui/gtk/browser.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/tmp/build/perf/ui/gtk/browser.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [/tmp/build/perf/libperf-gtk.so] Error 1
make: *** Waiting for unfinished jobs....
make: Leaving directory `/home/acme/git/linux/tools/perf'
[acme@sandy linux]$

And if I just do:

[acme@sandy linux]$ rm -rf /tmp/build/perf
[acme@sandy linux]$ mkdir /tmp/build/perf
[acme@sandy linux]$ make -j8 O=/tmp/build/perf -C tools/perf/ install-bin
    CHK -fstack-protector-all
    CHK -Wstack-protector
    CHK -Wvolatile-register-var
    CHK -D_FORTIFY_SOURCE=2
    CHK bionic
    CHK libelf
    CHK libdw
    CHK -DLIBELF_MMAP
    CHK -DLIBELF_MMAP
    CHK libunwind
    CHK libaudit
    CHK libslang
    CHK gtk2
    CHK -DHAVE_GTK_INFO_BAR
    CHK perl
    CHK python
    CHK python version
    CHK libbfd
    CHK -DHAVE_STRLCPY
    CHK -DHAVE_ON_EXIT
    CHK -DBACKTRACE_SUPPORT
    CHK libnuma
make: Entering directory `/home/acme/git/linux/tools/perf'
    MKDIR /tmp/build/perf/arch/
    MKDIR /tmp/build/perf/arch/x86/util/
    MKDIR /tmp/build/perf/bench/
    MKDIR /tmp/build/perf/scripts/perl/Perf-Trace-Util/
    MKDIR /tmp/build/perf/scripts/python/Perf-Trace-Util/
    MKDIR /tmp/build/perf/ui/
    MKDIR /tmp/build/perf/ui/browsers/
    MKDIR /tmp/build/perf/tests/
    MKDIR /tmp/build/perf/ui/stdio/
    MKDIR /tmp/build/perf/ui/tui/
    MKDIR /tmp/build/perf/util/
    MKDIR /tmp/build/perf/util/scripting-engines/
    * new build flags or prefix
    BISON /tmp/build/perf/util/pmu-bison.c
    CC /tmp/build/perf/util/environment.o
<SNIP>
    CC /tmp/build/perf/builtin-buildid-cache.o
Assembler messages:
Fatal error: can't create /tmp/build/perf/ui/gtk/setup.o: No such file or directory
make: *** [/tmp/build/perf/ui/gtk/setup.o] Error 1
make: *** Waiting for unfinished jobs....
Assembler messages:
Fatal error: can't create /tmp/build/perf/ui/gtk/util.o: No such file or directory
make: *** [/tmp/build/perf/ui/gtk/util.o] Error 1
Assembler messages:
Fatal error: can't create /tmp/build/perf/ui/gtk/progress.o: No such file or directory
make: *** [/tmp/build/perf/ui/gtk/progress.o] Error 1
Assembler messages:
Fatal error: can't create /tmp/build/perf/ui/gtk/browser.o: No such file or directory
make: *** [/tmp/build/perf/ui/gtk/browser.o] Error 1
Assembler messages:
Fatal error: can't create /tmp/build/perf/ui/gtk/helpline.o: No such file or directory
make: *** [/tmp/build/perf/ui/gtk/helpline.o] Error 1
Assembler messages:
Fatal error: can't create /tmp/build/perf/ui/gtk/annotate.o: No such file or directory
make: *** [/tmp/build/perf/ui/gtk/annotate.o] Error 1
Assembler messages:
Fatal error: can't create /tmp/build/perf/ui/gtk/hists.o: No such file or directory
make: *** [/tmp/build/perf/ui/gtk/hists.o] Error 1
make: Leaving directory `/home/acme/git/linux/tools/perf'
[acme@sandy linux]$ 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so
  2013-08-08 15:21   ` Arnaldo Carvalho de Melo
@ 2013-08-09  6:17     ` Namhyung Kim
  0 siblings, 0 replies; 7+ messages in thread
From: Namhyung Kim @ 2013-08-09  6:17 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML,
	Pekka Enberg, Andi Kleen, Jiri Olsa, Andi Kleen

Hi Arnaldo,

On Thu, 8 Aug 2013 12:21:16 -0300, Arnaldo Carvalho de Melo wrote:
> Em Thu, Aug 08, 2013 at 03:34:08PM +0900, Namhyung Kim escreveu:
>> Separate out GTK codes to a shared object called libperf-gtk.so.  This
>> time only GTK codes are built with -fPIC and libperf remains as is.
>
> [acme@sandy linux]$ cat /etc/fedora-release 
> Fedora release 18 (Spherical Cow)
> [acme@sandy linux]$ 
>
> Applying: perf tools: Separate out GTK codes to libperf-gtk.so
> [perf/core c1ca5ea] perf tools: Separate out GTK codes to libperf-gtk.so
>  Author: Namhyung Kim <namhyung@kernel.org>
>  2 files changed, 38 insertions(+), 15 deletions(-)
> [acme@sandy linux]$ make -j8 O=/tmp/build/perf -C tools/perf/ install-bin
>     CHK -fstack-protector-all
> <SNIP>
>     CC /tmp/build/perf/scripts/perl/Perf-Trace-Util/Context.o
>     CC /tmp/build/perf/util/scripting-engines/trace-event-python.o
>     CC /tmp/build/perf/scripts/python/Perf-Trace-Util/Context.o
>     GEN perf-archive
>     GEN /tmp/build/perf/python/perf.so
>     CC /tmp/build/perf/perf.o
>     AR /tmp/build/perf/libperf.a
>     LINK /tmp/build/perf/perf
>     LINK /tmp/build/perf/libperf-gtk.so
> /usr/bin/ld: /tmp/build/perf/ui/gtk/browser.o: relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
> /tmp/build/perf/ui/gtk/browser.o: could not read symbols: Bad value

Hmm.. this looks like the browser.o previously built without -fPIC.


> collect2: error: ld returned 1 exit status
> make: *** [/tmp/build/perf/libperf-gtk.so] Error 1
> make: *** Waiting for unfinished jobs....
> make: Leaving directory `/home/acme/git/linux/tools/perf'
> [acme@sandy linux]$
>
> And if I just do:
>
> [acme@sandy linux]$ rm -rf /tmp/build/perf
> [acme@sandy linux]$ mkdir /tmp/build/perf
> [acme@sandy linux]$ make -j8 O=/tmp/build/perf -C tools/perf/ install-bin
>     CHK -fstack-protector-all
>     CHK -Wstack-protector
>     CHK -Wvolatile-register-var
>     CHK -D_FORTIFY_SOURCE=2
>     CHK bionic
>     CHK libelf
>     CHK libdw
>     CHK -DLIBELF_MMAP
>     CHK -DLIBELF_MMAP
>     CHK libunwind
>     CHK libaudit
>     CHK libslang
>     CHK gtk2
>     CHK -DHAVE_GTK_INFO_BAR
>     CHK perl
>     CHK python
>     CHK python version
>     CHK libbfd
>     CHK -DHAVE_STRLCPY
>     CHK -DHAVE_ON_EXIT
>     CHK -DBACKTRACE_SUPPORT
>     CHK libnuma
> make: Entering directory `/home/acme/git/linux/tools/perf'
>     MKDIR /tmp/build/perf/arch/
>     MKDIR /tmp/build/perf/arch/x86/util/
>     MKDIR /tmp/build/perf/bench/
>     MKDIR /tmp/build/perf/scripts/perl/Perf-Trace-Util/
>     MKDIR /tmp/build/perf/scripts/python/Perf-Trace-Util/
>     MKDIR /tmp/build/perf/ui/
>     MKDIR /tmp/build/perf/ui/browsers/
>     MKDIR /tmp/build/perf/tests/
>     MKDIR /tmp/build/perf/ui/stdio/
>     MKDIR /tmp/build/perf/ui/tui/
>     MKDIR /tmp/build/perf/util/
>     MKDIR /tmp/build/perf/util/scripting-engines/
>     * new build flags or prefix
>     BISON /tmp/build/perf/util/pmu-bison.c
>     CC /tmp/build/perf/util/environment.o
> <SNIP>
>     CC /tmp/build/perf/builtin-buildid-cache.o
> Assembler messages:
> Fatal error: can't create /tmp/build/perf/ui/gtk/setup.o: No such file or directory
> make: *** [/tmp/build/perf/ui/gtk/setup.o] Error 1
> make: *** Waiting for unfinished jobs....
> Assembler messages:
> Fatal error: can't create /tmp/build/perf/ui/gtk/util.o: No such file or directory
> make: *** [/tmp/build/perf/ui/gtk/util.o] Error 1
> Assembler messages:
> Fatal error: can't create /tmp/build/perf/ui/gtk/progress.o: No such file or directory
> make: *** [/tmp/build/perf/ui/gtk/progress.o] Error 1
> Assembler messages:
> Fatal error: can't create /tmp/build/perf/ui/gtk/browser.o: No such file or directory
> make: *** [/tmp/build/perf/ui/gtk/browser.o] Error 1
> Assembler messages:
> Fatal error: can't create /tmp/build/perf/ui/gtk/helpline.o: No such file or directory
> make: *** [/tmp/build/perf/ui/gtk/helpline.o] Error 1
> Assembler messages:
> Fatal error: can't create /tmp/build/perf/ui/gtk/annotate.o: No such file or directory
> make: *** [/tmp/build/perf/ui/gtk/annotate.o] Error 1
> Assembler messages:
> Fatal error: can't create /tmp/build/perf/ui/gtk/hists.o: No such file or directory
> make: *** [/tmp/build/perf/ui/gtk/hists.o] Error 1
> make: Leaving directory `/home/acme/git/linux/tools/perf'
> [acme@sandy linux]$ 

Argh... sorry about that.  I forgot to add GTK_OBJS to DIRECTORY_DEPS.
Will send v4 soon.

Thanks,
Namhyung

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so
  2013-08-09  6:28 [PATCH 0/3] perf ui/gtk: Separate out GTK code to a shared object (v4) Namhyung Kim
@ 2013-08-09  6:28 ` Namhyung Kim
  0 siblings, 0 replies; 7+ messages in thread
From: Namhyung Kim @ 2013-08-09  6:28 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, Paul Mackerras, Ingo Molnar, Namhyung Kim, LKML,
	Pekka Enberg, Jiri Olsa, Andi Kleen

Separate out GTK codes to a shared object called libperf-gtk.so.  This
time only GTK codes are built with -fPIC and libperf remains as is.

Cc: Andi Kleen <ak@linux.intel.com>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/Makefile        | 42 ++++++++++++++++++++++++++++++------------
 tools/perf/config/Makefile | 14 ++++++++++----
 2 files changed, 40 insertions(+), 16 deletions(-)

diff --git a/tools/perf/Makefile b/tools/perf/Makefile
index e0d3d9f96771..5f96eedf9767 100644
--- a/tools/perf/Makefile
+++ b/tools/perf/Makefile
@@ -113,6 +113,7 @@ SPARSE_FLAGS = -D__BIG_ENDIAN__ -D__powerpc__
 BUILTIN_OBJS =
 LIB_H =
 LIB_OBJS =
+GTK_OBJS =
 PYRF_OBJS =
 SCRIPT_SH =
 
@@ -485,13 +486,19 @@ ifndef NO_SLANG
 endif
 
 ifndef NO_GTK2
-  LIB_OBJS += $(OUTPUT)ui/gtk/browser.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/hists.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/setup.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/util.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/helpline.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/progress.o
-  LIB_OBJS += $(OUTPUT)ui/gtk/annotate.o
+  ALL_PROGRAMS += $(OUTPUT)libperf-gtk.so
+
+  GTK_OBJS += $(OUTPUT)ui/gtk/browser.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/hists.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/setup.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/util.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/helpline.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/progress.o
+  GTK_OBJS += $(OUTPUT)ui/gtk/annotate.o
+
+install-gtk: $(OUTPUT)libperf-gtk.so
+	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(libdir_SQ)'
+	$(INSTALL) $(OUTPUT)libperf-gtk.so '$(DESTDIR_SQ)$(libdir_SQ)'
 endif
 
 ifndef NO_LIBPERL
@@ -545,6 +552,12 @@ $(OUTPUT)perf: $(OUTPUT)perf.o $(BUILTIN_OBJS) $(PERFLIBS)
 	$(QUIET_LINK)$(CC) $(CFLAGS) $(LDFLAGS) $(OUTPUT)perf.o \
                $(BUILTIN_OBJS) $(LIBS) -o $@
 
+$(GTK_OBJS): $(OUTPUT)%.o: %.c $(LIB_H)
+	$(QUIET_CC)$(CC) -o $@ -c -fPIC $(CFLAGS) $(GTK_CFLAGS) $<
+
+$(OUTPUT)libperf-gtk.so: $(GTK_OBJS) $(PERFLIBS)
+	$(QUIET_LINK)$(CC) -o $@ -shared $(ALL_LDFLAGS) $(filter %.o,$^) $(GTK_LIBS)
+
 $(OUTPUT)builtin-help.o: builtin-help.c $(OUTPUT)common-cmds.h $(OUTPUT)PERF-CFLAGS
 	$(QUIET_CC)$(CC) -o $@ -c $(CFLAGS) \
 		'-DPERF_HTML_PATH="$(htmldir_SQ)"' \
@@ -654,7 +667,8 @@ $(patsubst perf-%,%.o,$(PROGRAMS)): $(LIB_H) $(wildcard */*.h)
 
 # we compile into subdirectories. if the target directory is not the source directory, they might not exists. So
 # we depend the various files onto their directories.
-DIRECTORY_DEPS = $(LIB_OBJS) $(BUILTIN_OBJS) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h
+DIRECTORY_DEPS = $(LIB_OBJS) $(BUILTIN_OBJS) $(GTK_OBJS)
+DIRECTORY_DEPS += $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)common-cmds.h
 $(DIRECTORY_DEPS): | $(sort $(dir $(DIRECTORY_DEPS)))
 # In the second step, we make a rule to actually create these directories
 $(sort $(dir $(DIRECTORY_DEPS))):
@@ -763,7 +777,9 @@ check: $(OUTPUT)common-cmds.h
 
 ### Installation rules
 
-install-bin: all
+install-gtk:
+
+install-bin: all install-gtk
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(INSTALL) $(OUTPUT)perf '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/scripts/perl/Perf-Trace-Util/lib/Perf/Trace'
@@ -796,15 +812,17 @@ $(INSTALL_DOC_TARGETS):
 ### Cleaning rules
 
 clean: $(LIBTRACEEVENT)-clean $(LIBLK)-clean
-	$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
+	$(RM) $(LIB_OBJS) $(BUILTIN_OBJS) $(LIB_FILE) $(GTK_OBJS)
+	$(RM) $(OUTPUT)perf-archive $(OUTPUT)perf.o $(LANG_BINDINGS)
 	$(RM) $(ALL_PROGRAMS) perf
-	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo $(OUTPUT)common-cmds.h TAGS tags cscope*
+	$(RM) *.spec *.pyc *.pyo */*.pyc */*.pyo
+	$(RM) $(OUTPUT)common-cmds.h TAGS tags cscope*
 	$(QUIET_SUBDIR0)Documentation $(QUIET_SUBDIR1) clean
 	$(RM) $(OUTPUT)PERF-VERSION-FILE $(OUTPUT)PERF-CFLAGS
 	$(RM) $(OUTPUT)util/*-bison*
 	$(RM) $(OUTPUT)util/*-flex*
 	$(python-clean)
 
-.PHONY: all install clean strip $(LIBTRACEEVENT) $(LIBLK)
+.PHONY: all install clean strip $(LIBTRACEEVENT) $(LIBLK) install-gtk
 .PHONY: shell_compatibility_test please_set_SHELL_PATH_to_a_more_modern_shell
 .PHONY: .FORCE-PERF-VERSION-FILE TAGS tags cscope .FORCE-PERF-CFLAGS
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 214e17e97e5c..6bdfd0302c4e 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -267,11 +267,11 @@ ifndef NO_GTK2
     NO_GTK2 := 1
   else
     ifeq ($(call try-cc,$(SOURCE_GTK2_INFOBAR),$(FLAGS_GTK2),-DHAVE_GTK_INFO_BAR),y)
-      CFLAGS += -DHAVE_GTK_INFO_BAR
+      GTK_CFLAGS := -DHAVE_GTK_INFO_BAR
     endif
-    CFLAGS += -DGTK2_SUPPORT
-    CFLAGS += $(shell pkg-config --cflags gtk+-2.0 2>/dev/null)
-    EXTLIBS += $(shell pkg-config --libs gtk+-2.0 2>/dev/null)
+    GTK_CFLAGS += -DGTK2_SUPPORT
+    GTK_CFLAGS += $(shell pkg-config --cflags gtk+-2.0 2>/dev/null)
+    GTK_LIBS := $(shell pkg-config --libs gtk+-2.0 2>/dev/null)
   endif
 endif
 
@@ -456,7 +456,12 @@ else
 sysconfdir = $(prefix)/etc
 ETC_PERFCONFIG = etc/perfconfig
 endif
+ifeq ($(IS_X86_64),1)
+lib = lib64
+else
 lib = lib
+endif
+libdir = $(prefix)/$(lib)
 
 # Shell quote (do not use $(call) to accommodate ancient setups);
 ETC_PERFCONFIG_SQ = $(subst ','\'',$(ETC_PERFCONFIG))
@@ -469,6 +474,7 @@ template_dir_SQ = $(subst ','\'',$(template_dir))
 htmldir_SQ = $(subst ','\'',$(htmldir))
 prefix_SQ = $(subst ','\'',$(prefix))
 sysconfdir_SQ = $(subst ','\'',$(sysconfdir))
+libdir_SQ = $(subst ','\'',$(libdir))
 
 ifneq ($(filter /%,$(firstword $(perfexecdir))),)
 perfexec_instdir = $(perfexecdir)
-- 
1.7.11.7


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-08-09  6:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-08  6:34 [PATCH/RFC 0/3] perf ui/gtk: Separate out GTK code to a shared object (v3) Namhyung Kim
2013-08-08  6:34 ` [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so Namhyung Kim
2013-08-08 15:21   ` Arnaldo Carvalho de Melo
2013-08-09  6:17     ` Namhyung Kim
2013-08-08  6:34 ` [PATCH 2/3] perf tools: Setup GTK browser dynamically Namhyung Kim
2013-08-08  6:34 ` [PATCH 3/3] perf tools: Run dynamic loaded GTK browser Namhyung Kim
  -- strict thread matches above, loose matches on Subject: below --
2013-08-09  6:28 [PATCH 0/3] perf ui/gtk: Separate out GTK code to a shared object (v4) Namhyung Kim
2013-08-09  6:28 ` [PATCH 1/3] perf tools: Separate out GTK codes to libperf-gtk.so Namhyung Kim

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox