diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/power/cpupower/.gitignore | 6 | ||||
-rw-r--r-- | tools/power/cpupower/Makefile | 31 | ||||
-rw-r--r-- | tools/power/cpupower/bench/Makefile | 11 | ||||
-rw-r--r-- | tools/power/cpupower/build/ccdv.c | 387 |
4 files changed, 24 insertions, 411 deletions
diff --git a/tools/power/cpupower/.gitignore b/tools/power/cpupower/.gitignore index f8d7b5ac2719..4f0eb1d798df 100644 --- a/tools/power/cpupower/.gitignore +++ b/tools/power/cpupower/.gitignore @@ -14,8 +14,10 @@ lib/proc.o lib/sysfs.lo lib/sysfs.o libcpufreq.la -po/cpufrequtils.pot +po/cpupowerutils.pot po/*.gmo utils/cpufreq-info.o utils/cpufreq-set.o -utils/cpufreq-aperf.o
\ No newline at end of file +utils/cpufreq-aperf.o +cpupower +bench/cpufreq-bench diff --git a/tools/power/cpupower/Makefile b/tools/power/cpupower/Makefile index aef1e3b41792..5d30dadbc4e7 100644 --- a/tools/power/cpupower/Makefile +++ b/tools/power/cpupower/Makefile @@ -24,7 +24,7 @@ # Set the following to `true' to make a unstripped, unoptimized # binary. Leave this set to `false' for production use. -DEBUG ?= true +DEBUG ?= false # make the build silent. Set this to something else to make it noisy again. V ?= false @@ -145,12 +145,13 @@ endif CFLAGS += $(WARNINGS) ifeq ($(strip $(V)),false) - QUIET=@$(PWD)/build/ccdv - HOST_PROGS=build/ccdv + QUIET=@ + ECHO=@echo else QUIET= - HOST_PROGS= + ECHO=@\# endif +export QUIET ECHO # if DEBUG is enabled, then we do not strip or optimize ifeq ($(strip $(DEBUG)),true) @@ -165,17 +166,14 @@ endif # the actual make rules -all: ccdv libcpufreq cpupower $(COMPILE_NLS) $(COMPILE_BENCH) +all: libcpufreq cpupower $(COMPILE_NLS) $(COMPILE_BENCH) -ccdv: build/ccdv -build/ccdv: build/ccdv.c - @echo "Building ccdv" - @$(HOSTCC) -O1 $< -o $@ - -lib/%.o: $(LIB_SRC) $(LIB_HEADERS) build/ccdv +lib/%.o: $(LIB_SRC) $(LIB_HEADERS) + $(ECHO) " CC " $@ $(QUIET) $(CC) $(CPPFLAGS) $(CFLAGS) -fPIC -o $@ -c lib/$*.c libcpufreq.so.$(LIB_MAJ): $(LIB_OBJS) + $(ECHO) " LD " $@ $(QUIET) $(CC) -shared $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ \ -Wl,-soname,libcpufreq.so.$(LIB_MIN) $(LIB_OBJS) @ln -sf $@ libcpufreq.so @@ -188,11 +186,13 @@ libcpufreq: libcpufreq.so.$(LIB_MAJ) $(UTIL_OBJS): $(UTIL_HEADERS) .c.o: + $(ECHO) " CC " $@ $(QUIET) $(CC) $(CFLAGS) $(CPPFLAGS) -I./lib -I ./utils -o $@ -c $*.c -cpupower: $(UTIL_OBJS) libcpufreq +cpupower: $(UTIL_OBJS) libcpufreq.so.$(LIB_MAJ) + $(ECHO) " CC " $@ $(QUIET) $(CC) $(CFLAGS) $(LDFLAGS) -lcpufreq -lrt -lpci -L. -o $@ $(UTIL_OBJS) - $(STRIPCMD) $@ + $(QUIET) $(STRIPCMD) $@ po/$(PACKAGE).pot: $(UTIL_SRC) @xgettext --default-domain=$(PACKAGE) --add-comments \ @@ -223,7 +223,6 @@ clean: -rm -f $(IDLE_OBJS) -rm -f cpupower -rm -f libcpufreq.so* - -rm -f build/ccdv -rm -rf po/*.gmo po/*.pot $(MAKE) -C bench clean @@ -256,7 +255,7 @@ install-gmo: install-bench: @#DESTDIR must be set from outside to survive @sbindir=$(sbindir) bindir=$(bindir) docdir=$(docdir) confdir=$(confdir) $(MAKE) -C bench install - + install: all install-lib install-tools install-man $(INSTALL_NLS) $(INSTALL_BENCH) uninstall: @@ -269,5 +268,5 @@ uninstall: rm -f $(DESTDIR)${localedir}/$$HLANG/LC_MESSAGES/cpupowerutils.mo; \ done; -.PHONY: all utils libcpufreq ccdv update-po update-gmo install-lib install-tools install-man install-gmo install uninstall \ +.PHONY: all utils libcpufreq update-po update-gmo install-lib install-tools install-man install-gmo install uninstall \ clean diff --git a/tools/power/cpupower/bench/Makefile b/tools/power/cpupower/bench/Makefile index 3d8fa21855f6..d779aac58ede 100644 --- a/tools/power/cpupower/bench/Makefile +++ b/tools/power/cpupower/bench/Makefile @@ -3,14 +3,13 @@ LIBS = -L../ -lm -lcpufreq OBJS = main.o parse.o system.o benchmark.o CFLAGS += -D_GNU_SOURCE -I../lib -DDEFAULT_CONFIG_FILE=\"$(confdir)/cpufreq-bench.conf\" -ifeq ($(strip $(V)),false) - CC=@../build/ccdv gcc -else - CC=gcc -endif +%.o : %.c + $(ECHO) " CC " $@ + $(QUIET) $(CC) -c $(CFLAGS) $< -o $@ cpufreq-bench: $(OBJS) - $(CC) -o $@ $(CFLAGS) $(OBJS) $(LIBS) + $(ECHO) " CC " $@ + $(QUIET) $(CC) -o $@ $(CFLAGS) $(OBJS) $(LIBS) all: cpufreq-bench diff --git a/tools/power/cpupower/build/ccdv.c b/tools/power/cpupower/build/ccdv.c deleted file mode 100644 index e3ae9da91a53..000000000000 --- a/tools/power/cpupower/build/ccdv.c +++ /dev/null @@ -1,387 +0,0 @@ -/* ccdv.c - * - * Copyright (C) 2002-2003, by Mike Gleason, NcFTP Software. - * All Rights Reserved. - * - * Licensed under the GNU Public License. - */ -#include <unistd.h> -#include <sys/types.h> -#include <sys/time.h> -#include <sys/wait.h> -#include <fcntl.h> -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <errno.h> - -#define SETCOLOR_SUCCESS (gANSIEscapes ? "\033\1331;32m" : "") -#define SETCOLOR_FAILURE (gANSIEscapes ? "\033\1331;31m" : "") -#define SETCOLOR_WARNING (gANSIEscapes ? "\033\1331;33m" : "") -#define SETCOLOR_NORMAL (gANSIEscapes ? "\033\1330;39m" : "") - -#define TEXT_BLOCK_SIZE 8192 -#define INDENT 2 - -#define TERMS "vt100:vt102:vt220:vt320:xterm:xterm-color:ansi:linux:scoterm:scoansi:dtterm:cons25:cygwin" - -size_t gNBufUsed = 0, gNBufAllocated = 0; -char *gBuf = NULL; -int gCCPID; -char gAction[200] = ""; -char gTarget[200] = ""; -char gAr[32] = ""; -char gArLibraryTarget[64] = ""; -int gDumpCmdArgs = 0; -char gArgsStr[1000]; -int gColumns = 80; -int gANSIEscapes = 0; -int gExitStatus = 95; - -static void DumpFormattedOutput(void) -{ - char *cp; - char spaces[8 + 1] = " "; - char *saved; - int curcol; - int i; - - curcol = 0; - saved = NULL; - for (cp = gBuf + ((gDumpCmdArgs == 0) ? strlen(gArgsStr) : 0); ; cp++) { - if (*cp == '\0') { - if (saved != NULL) { - cp = saved; - saved = NULL; - } else break; - } - if (*cp == '\r') - continue; - if (*cp == '\t') { - saved = cp + 1; - cp = spaces + 8 - (8 - ((curcol - INDENT - 1) % 8)); - } - if (curcol == 0) { - for (i = INDENT; --i >= 0; ) - putchar(' '); - curcol = INDENT; - } - putchar(*cp); - if (++curcol == (gColumns - 1)) { - putchar('\n'); - curcol = 0; - } else if (*cp == '\n') - curcol = 0; - } - free(gBuf); -} /* DumpFormattedOutput */ - - - -/* Difftime(), only for timeval structures. */ -static void TimeValSubtract(struct timeval *tdiff, struct timeval *t1, struct timeval *t0) -{ - tdiff->tv_sec = t1->tv_sec - t0->tv_sec; - tdiff->tv_usec = t1->tv_usec - t0->tv_usec; - if (tdiff->tv_usec < 0) { - tdiff->tv_sec--; - tdiff->tv_usec += 1000000; - } -} /* TimeValSubtract */ - - - -static void Wait(void) -{ - int pid2, status; - - do { - status = 0; - pid2 = (int) waitpid(gCCPID, &status, 0); - } while (((pid2 >= 0) && (! WIFEXITED(status))) || ((pid2 < 0) && (errno == EINTR))); - if (WIFEXITED(status)) - gExitStatus = WEXITSTATUS(status); -} /* Wait */ - - - -static int SlurpProgress(int fd) -{ - char s1[71]; - char *newbuf; - int nready; - size_t ntoread; - ssize_t nread; - struct timeval now, tnext, tleft; - fd_set ss; - fd_set ss2; - const char *trail = "/-\\|", *trailcp; - - trailcp = trail; - snprintf(s1, sizeof(s1), "%s%s%s... ", gAction, gTarget[0] ? " " : "", gTarget); - printf("\r%-70s%-9s", s1, ""); - fflush(stdout); - - gettimeofday(&now, NULL); - tnext = now; - tnext.tv_sec++; - tleft.tv_sec = 1; - tleft.tv_usec = 0; - FD_ZERO(&ss2); - FD_SET(fd, &ss2); - for(;;) { - if (gNBufUsed == (gNBufAllocated - 1)) { - if ((newbuf = (char *) realloc(gBuf, gNBufAllocated + TEXT_BLOCK_SIZE)) == NULL) { - perror("ccdv: realloc"); - return (-1); - } - gNBufAllocated += TEXT_BLOCK_SIZE; - gBuf = newbuf; - } - for (;;) { - ss = ss2; - nready = select(fd + 1, &ss, NULL, NULL, &tleft); - if (nready == 1) - break; - if (nready < 0) { - if (errno != EINTR) { - perror("ccdv: select"); - return (-1); - } - continue; - } - gettimeofday(&now, NULL); - if ((now.tv_sec > tnext.tv_sec) || ((now.tv_sec == tnext.tv_sec) && (now.tv_usec >= tnext.tv_usec))) { - tnext = now; - tnext.tv_sec++; - tleft.tv_sec = 1; - tleft.tv_usec = 0; - printf("\r%-71s%c%-7s", s1, *trailcp, ""); - fflush(stdout); - if (*++trailcp == '\0') - trailcp = trail; - } else { - TimeValSubtract(&tleft, &tnext, &now); - } - } - ntoread = (gNBufAllocated - gNBufUsed - 1); - nread = read(fd, gBuf + gNBufUsed, ntoread); - if (nread < 0) { - if (errno == EINTR) - continue; - perror("ccdv: read"); - return (-1); - } else if (nread == 0) { - break; - } - gNBufUsed += nread; - gBuf[gNBufUsed] = '\0'; - } - snprintf(s1, sizeof(s1), "%s%s%s: ", gAction, gTarget[0] ? " " : "", gTarget); - Wait(); - if (gExitStatus == 0) { - printf("\r%-70s", s1); - printf("[%s%s%s]", ((gNBufUsed - strlen(gArgsStr)) < 4) ? SETCOLOR_SUCCESS : SETCOLOR_WARNING, "OK", SETCOLOR_NORMAL); - printf("%-5s\n", " "); - } else { - printf("\r%-70s", s1); - printf("[%s%s%s]", SETCOLOR_FAILURE, "ERROR", SETCOLOR_NORMAL); - printf("%-2s\n", " "); - gDumpCmdArgs = 1; /* print cmd when there are errors */ - } - fflush(stdout); - return (0); -} /* SlurpProgress */ - - - -static int SlurpAll(int fd) -{ - char *newbuf; - size_t ntoread; - ssize_t nread; - - printf("%s%s%s.\n", gAction, gTarget[0] ? " " : "", gTarget); - fflush(stdout); - - for(;;) { - if (gNBufUsed == (gNBufAllocated - 1)) { - if ((newbuf = (char *) realloc(gBuf, gNBufAllocated + TEXT_BLOCK_SIZE)) == NULL) { - perror("ccdv: realloc"); - return (-1); - } - gNBufAllocated += TEXT_BLOCK_SIZE; - gBuf = newbuf; - } - ntoread = (gNBufAllocated - gNBufUsed - 1); - nread = read(fd, gBuf + gNBufUsed, ntoread); - if (nread < 0) { - if (errno == EINTR) - continue; - perror("ccdv: read"); - return (-1); - } else if (nread == 0) { - break; - } - gNBufUsed += nread; - gBuf[gNBufUsed] = '\0'; - } - Wait(); - gDumpCmdArgs = (gExitStatus != 0); /* print cmd when there are errors */ - return (0); -} /* SlurpAll */ - - - -static const char *Basename(const char *path) -{ - const char *cp; - cp = strrchr(path, '/'); - if (cp == NULL) - return (path); - return (cp + 1); -} /* Basename */ - - - -static const char * Extension(const char *path) -{ - const char *cp = path; - cp = strrchr(path, '.'); - if (cp == NULL) - return (""); - // printf("Extension='%s'\n", cp); - return (cp); -} /* Extension */ - - - -static void Usage(void) -{ - fprintf(stderr, "Usage: ccdv /path/to/cc CFLAGS...\n\n"); - fprintf(stderr, "I wrote this to reduce the deluge Make output to make finding actual problems\n"); - fprintf(stderr, "easier. It is intended to be invoked from Makefiles, like this. Instead of:\n\n"); - fprintf(stderr, "\t.c.o:\n"); - fprintf(stderr, "\t\t$(CC) $(CFLAGS) $(DEFS) $(CPPFLAGS) $< -c\n"); - fprintf(stderr, "\nRewrite your rule so it looks like:\n\n"); - fprintf(stderr, "\t.c.o:\n"); - fprintf(stderr, "\t\t@ccdv $(CC) $(CFLAGS) $(DEFS) $(CPPFLAGS) $< -c\n\n"); - fprintf(stderr, "ccdv 1.1.0 is Free under the GNU Public License. Enjoy!\n"); - fprintf(stderr, " -- Mike Gleason, NcFTP Software <http://www.ncftp.com>\n"); - exit(96); -} /* Usage */ - - - -int main(int argc, char **argv) -{ - int pipe1[2]; - int devnull; - char emerg[256]; - int fd; - int nread; - int i; - int cc = 0, pch = 0; - const char *quote; - - if (argc < 2) - Usage(); - - snprintf(gAction, sizeof(gAction), "Running %s", Basename(argv[1])); - memset(gArgsStr, 0, sizeof(gArgsStr)); - for (i = 1; i < argc; i++) { - // printf("argv[%d]='%s'\n", i, argv[i]); - quote = (strchr(argv[i], ' ') != NULL) ? "\"" : ""; - snprintf(gArgsStr + strlen(gArgsStr), sizeof(gArgsStr) - strlen(gArgsStr), "%s%s%s%s%s", (i == 1) ? "" : " ", quote, argv[i], quote, (i == (argc - 1)) ? "\n" : ""); - if ((strcmp(argv[i], "-o") == 0) && ((i + 1) < argc)) { - if (strcasecmp(Extension(argv[i + 1]), ".o") != 0) { - strcpy(gAction, "Linking"); - snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i + 1])); - } - } else if (strchr("-+", (int) argv[i][0]) != NULL) { - continue; - } else if (strncasecmp(Extension(argv[i]), ".c", 2) == 0) { - cc++; - snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i])); - // printf("gTarget='%s'\n", gTarget); - } else if ((strncasecmp(Extension(argv[i]), ".h", 2) == 0) && (cc == 0)) { - pch++; - snprintf(gTarget, sizeof(gTarget), "%s", Basename(argv[i])); - } else if ((i == 1) && (strcmp(Basename(argv[i]), "ar") == 0)) { - snprintf(gAr, sizeof(gAr), "%s", Basename(argv[i])); - } else if ((gArLibraryTarget[0] == '\0') && (strcasecmp(Extension(argv[i]), ".a") == 0)) { - snprintf(gArLibraryTarget, sizeof(gArLibraryTarget), "%s", Basename(argv[i])); - } - } - if ((gAr[0] != '\0') && (gArLibraryTarget[0] != '\0')) { - strcpy(gAction, "Creating library"); - snprintf(gTarget, sizeof(gTarget), "%s", gArLibraryTarget); - } else if (pch > 0) { - strcpy(gAction, "Precompiling"); - } else if (cc > 0) { - strcpy(gAction, "Compiling"); - } - - if (pipe(pipe1) < 0) { - perror("ccdv: pipe"); - exit(97); - } - - (void) close(0); - devnull = open("/dev/null", O_RDWR, 00666); - if ((devnull != 0) && (dup2(devnull, 0) == 0)) - close(devnull); - - gCCPID = (int) fork(); - if (gCCPID < 0) { - (void) close(pipe1[0]); - (void) close(pipe1[1]); - perror("ccdv: fork"); - exit(98); - } else if (gCCPID == 0) { - /* Child */ - (void) close(pipe1[0]); /* close read end */ - if (pipe1[1] != 1) { /* use write end on stdout */ - (void) dup2(pipe1[1], 1); - (void) close(pipe1[1]); - } - (void) dup2(1, 2); /* use write end on stderr */ - execvp(argv[1], argv + 1); - perror(argv[1]); - exit(99); - } - - /* parent */ - (void) close(pipe1[1]); /* close write end */ - fd = pipe1[0]; /* use read end */ - - gColumns = (getenv("COLUMNS") != NULL) ? atoi(getenv("COLUMNS")) : 80; - gANSIEscapes = (getenv("TERM") != NULL) && (strstr(TERMS, getenv("TERM")) != NULL); - gBuf = (char *) malloc(TEXT_BLOCK_SIZE); - if (gBuf == NULL) - goto panic; - gNBufUsed = 0; - gNBufAllocated = TEXT_BLOCK_SIZE; - if (strlen(gArgsStr) < (gNBufAllocated - 1)) { - strcpy(gBuf, gArgsStr); - gNBufUsed = strlen(gArgsStr); - } - - if (isatty(1)) { - if (SlurpProgress(fd) < 0) - goto panic; - } else { - if (SlurpAll(fd) < 0) - goto panic; - } - DumpFormattedOutput(); - exit(gExitStatus); - -panic: - gDumpCmdArgs = 1; /* print cmd when there are errors */ - DumpFormattedOutput(); - while ((nread = read(fd, emerg, (size_t) sizeof(emerg))) > 0) - (void) write(2, emerg, (size_t) nread); - Wait(); - exit(gExitStatus); -} /* main */ |