Author: nbd
Date: 2016-01-02 15:47:57 +0100 (Sat, 02 Jan 2016)
New Revision: 48067

Added:
   trunk/package/devel/perf/musl-compat.h
Modified:
   trunk/package/devel/perf/Makefile
Log:
perf: fix musl compatibility

Signed-off-by: Felix Fietkau <[email protected]>

Modified: trunk/package/devel/perf/Makefile
===================================================================
--- trunk/package/devel/perf/Makefile   2016-01-02 14:47:48 UTC (rev 48066)
+++ trunk/package/devel/perf/Makefile   2016-01-02 14:47:57 UTC (rev 48067)
@@ -24,7 +24,7 @@
 define Package/perf
   SECTION:=devel
   CATEGORY:=Development
-  DEPENDS:= @USE_GLIBC +libelf1 +libdw +libpthread +librt +binutils
+  DEPENDS:= @!USE_UCLIBC +libelf1 +libdw +libpthread +librt +binutils
   TITLE:=Linux performance monitoring tool
   VERSION:=$(LINUX_VERSION)-$(PKG_RELEASE)
   URL:=http://www.kernel.org
@@ -57,6 +57,10 @@
        WERROR=0 \
        prefix=/usr
 
+ifdef CONFIG_USE_MUSL
+ MAKE_FLAGS += EXTRA_CFLAGS="-include $(CURDIR)/musl-compat.h -D__UCLIBC__"
+endif
+
 define Build/Compile
        +$(MAKE_FLAGS) $(MAKE) $(PKG_JOBS) \
                -C $(PKG_BUILD_DIR) \

Added: trunk/package/devel/perf/musl-compat.h
===================================================================
--- trunk/package/devel/perf/musl-compat.h                              (rev 0)
+++ trunk/package/devel/perf/musl-compat.h      2016-01-02 14:47:57 UTC (rev 
48067)
@@ -0,0 +1,62 @@
+#ifndef __PERF_MUSL_COMPAT_H
+#define __PERF_MUSL_COMPAT_H
+
+#include <sys/ioctl.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <syscall.h>
+#include <sched.h>
+
+#undef _IOWR
+#undef _IOR
+#undef _IOW
+#undef _IOC
+#undef _IO
+
+/* Change XSI compliant version into GNU extension hackery */
+#define strerror_r(err, buf, buflen) \
+       (strerror_r(err, buf, buflen) ? NULL : buf)
+
+#define _SC_LEVEL1_DCACHE_LINESIZE -1
+
+static inline long sysconf_wrap(int name)
+{
+       FILE *f;
+       int val;
+
+       switch (name) {
+       case _SC_LEVEL1_DCACHE_LINESIZE:
+               f = 
fopen("/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size", "r");
+               if (!f)
+                       return 0;
+
+               if (fscanf(f, "%d", &val) != 1)
+                       return 0;
+
+               fclose(f);
+               return val;
+       default:
+               return sysconf(name);
+       }
+}
+
+#define sysconf(_n) sysconf_wrap(_n)
+
+static inline int compat_sched_getcpu(void)
+{
+#ifdef __NR_getcpu
+       unsigned int val;
+
+       if (syscall(__NR_getcpu, &val))
+               return -1;
+
+       return val;
+#else
+       return -1;
+#endif
+}
+
+#define sched_getcpu compat_sched_getcpu
+
+#endif
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to