summaryrefslogtreecommitdiffstats
path: root/rbutil/mktccboot
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2009-11-04 21:56:40 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2009-11-04 21:56:40 +0000
commit20f3e646d8d5f41f009493ee8b193dd75436afbc (patch)
tree147c0fb8a7f957b49bcc3e79f640776686617a06 /rbutil/mktccboot
parente9c900d09de17eb4367a607b723b77e7228d3cee (diff)
downloadrockbox-20f3e646d8d5f41f009493ee8b193dd75436afbc.tar.gz
rockbox-20f3e646d8d5f41f009493ee8b193dd75436afbc.tar.bz2
rockbox-20f3e646d8d5f41f009493ee8b193dd75436afbc.zip
Clean up mktccboot building. No functional changes.
- Adjust the Makefile similar to the changes done in r23520. - Split out the standalone part into a separate source file. - Put telechips.o inside the archive instead of building it separately for rbutil. It is part of mktccboot. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23522 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/mktccboot')
-rw-r--r--rbutil/mktccboot/Makefile35
-rw-r--r--rbutil/mktccboot/main.c133
-rw-r--r--rbutil/mktccboot/mktccboot.c101
-rw-r--r--rbutil/mktccboot/mktccboot.h5
4 files changed, 160 insertions, 114 deletions
diff --git a/rbutil/mktccboot/Makefile b/rbutil/mktccboot/Makefile
index cd8a539648..f51c462766 100644
--- a/rbutil/mktccboot/Makefile
+++ b/rbutil/mktccboot/Makefile
@@ -45,25 +45,35 @@ OUT = $(TARGET_DIR)build$(RBARCH)
all: $(OUTPUT)
-$(OUT)/telechips.o: $(TOOLSDIR)/telechips.[ch]
+# inputs
+LIBSOURCES := mktccboot.c $(TOOLSDIR)/telechips.o
+SOURCES := $(LIBSOURCES) main.c
+OBJS := $(patsubst %.c,%.o,$(addprefix $(OUT)/,$(notdir $(SOURCES))))
+LIBOBJS := $(patsubst %.c,%.o,$(addprefix $(OUT)/,$(notdir $(LIBSOURCES))))
+EXTRADEPS :=
+
+# rule for sources from tools dir
+$(OUT)/%.o: $(TOOLSDIR)/%.c $(OUT)
@echo CC $<
- $(SILENT)$(CC) $(CFLAGS) -c -o $(OUT)/telechips.o $(TOOLSDIR)/telechips.c
+ $(SILENT)$(CC) $(CFLAGS) -c -o $@ $<
-$(OUT)/mktccboot.o: mktccboot.[ch] $(OUT)/telechips.o
+$(OUT)/%.o: %.c $(OUT)
@echo CC $<
- $(SILENT)$(CC) $(CFLAGS) -c -o $(OUT)/mktccboot.o -W -Wall mktccboot.c -DVERSION=\"$(APPVERSION)\"
-
-$(OUTPUT): $(OUT) $(OUT)/mktccboot.o
- @echo LD $@
- $(SILENT)$(CC) $(CFLAGS) -o $(OUTPUT) $(OUT)/mktccboot.o $(OUT)/telechips.o
+ $(SILENT)$(CC) $(CFLAGS) -c -o $@ $<
+# building the library archive
$(OUT)/libmktccboot.o: $(OUT)/mktccboot.o
@echo CC $<
$(SILENT)$(CC) $(CFLAGS) -DLIB -c -o $(OUT)/libmktccboot.o -W -Wall mktccboot.c
-libmktccboot$(RBARCH).a: $(OUT) $(OUT)/libmktccboot.o
+libmktccboot$(RBARCH).a: $(LIBOBJS)
@echo AR $@
- $(SILENT)$(AR) ruc $(TARGET_DIR)libmktccboot$(RBARCH).a $(OUT)/libmktccboot.o
+ $(SILENT)$(AR) ruc $(TARGET_DIR)$@ $^
+
+# building the standalone executable
+$(OUTPUT): $(OBJS) $(EXTRADEPS)
+ @echo LD $@
+ $(SILENT)$(CC) $(CFLAGS) -o$(OUTPUT) $(OBJS) $(EXTRADEPS)
# some trickery to build ppc and i386 from a single call
ifeq ($(RBARCH),)
@@ -80,9 +90,8 @@ libmktccboot-universal: libmktccbooti386.a libmktccbootppc.a
lipo -create $(TARGET_DIR)libmktccbootppc.a $(TARGET_DIR)libmktccbooti386.a -output $(TARGET_DIR)libmktccboot.a
clean:
- rm -f $(OUTPUT) libmktccboot.o $(TARGET_DIR)libmktccboot*.a mktccboot.dmg
- rm -f $(TOOLSDIR)/telechips.o
- rm -rf build* mktccboot-*
+ rm -f $(OUTPUT) $(TARGET_DIR)libmktccboot*.a mktccboot.dmg
+ rm -rf $(OUT)
mktccboot-i386:
$(MAKE) RBARCH=i386
diff --git a/rbutil/mktccboot/main.c b/rbutil/mktccboot/main.c
new file mode 100644
index 0000000000..4dd5d0c6c4
--- /dev/null
+++ b/rbutil/mktccboot/main.c
@@ -0,0 +1,133 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2007 by Dave Chapman
+ *
+ * Based on mkboot, Copyright (C) 2005 by Linus Nielsen Feltzing
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <inttypes.h>
+#include "mktccboot.h"
+#include "telechips.h"
+
+static void usage(void)
+{
+ printf("Usage: mktccboot <firmware file> <boot file> <output file>\n");
+
+ exit(1);
+}
+
+int main(int argc, char *argv[])
+{
+ char *infile, *bootfile, *outfile;
+ int fdout = -1;
+ int n, of_size, boot_size, patched_size;
+ unsigned char *of_buf;
+ unsigned char *boot_buf = NULL;
+ unsigned char* image = NULL;
+ int ret = 0;
+
+ if(argc < 3) {
+ usage();
+ }
+
+ infile = argv[1];
+ bootfile = argv[2];
+ outfile = argv[3];
+
+ /* Read OF and boot files */
+ of_buf = file_read(infile, &of_size);
+ if (!of_buf)
+ {
+ ret = 1;
+ goto error_exit;
+ }
+
+ /* Validate input file */
+ if (test_firmware_tcc(of_buf, of_size))
+ {
+ printf("[ERR] Unknown OF file used, aborting\n");
+ ret = 2;
+ goto error_exit;
+ }
+
+ boot_buf = file_read(bootfile, &boot_size);
+ if (!boot_buf)
+ {
+ ret = 3;
+ goto error_exit;
+ }
+
+ /* Allocate buffer for patched firmware */
+ image = malloc(of_size + boot_size);
+ if (image == NULL)
+ {
+ printf("[ERR] Could not allocate memory, aborting\n");
+ ret = 4;
+ goto error_exit;
+ }
+
+ /* Create the patched firmware */
+ image = patch_firmware_tcc(of_buf, of_size, boot_buf, boot_size,
+ &patched_size);
+ if (!image)
+ {
+ printf("[ERR] Error creating patched firmware, aborting\n");
+ ret = 5;
+ goto error_exit;
+ }
+
+ fdout = open(outfile, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644);
+ if (fdout < 0)
+ {
+ perror(outfile);
+ ret = 6;
+ goto error_exit;
+ }
+
+ n = write(fdout, image, patched_size);
+ if (n != patched_size)
+ {
+ printf("[ERR] Could not write output file %s\n",outfile);
+ ret = 7;
+ goto error_exit;
+ }
+
+error_exit:
+
+ if (fdout >= 0)
+ close(fdout);
+
+ if (of_buf)
+ free(of_buf);
+
+ if (boot_buf)
+ free(boot_buf);
+
+ if (image)
+ free(image);
+
+ return ret;
+}
+
diff --git a/rbutil/mktccboot/mktccboot.c b/rbutil/mktccboot/mktccboot.c
index 7103f23895..4f2c3258db 100644
--- a/rbutil/mktccboot/mktccboot.c
+++ b/rbutil/mktccboot/mktccboot.c
@@ -75,13 +75,6 @@ static uint32_t get_uint32le(unsigned char* p)
return (p[3] << 24) | (p[2] << 16) | (p[1]<<8) | p[0];
}
-void usage(void)
-{
- printf("Usage: mktccboot <firmware file> <boot file> <output file>\n");
-
- exit(1);
-}
-
static off_t filesize(int fd) {
struct stat buf;
@@ -181,97 +174,3 @@ int test_firmware_tcc(unsigned char* buf, int length)
return telechips_test_crc(buf, length);
}
-#ifndef LIB
-int main(int argc, char *argv[])
-{
- char *infile, *bootfile, *outfile;
- int fdout = -1;
- int n, of_size, boot_size, patched_size;
- unsigned char *of_buf;
- unsigned char *boot_buf = NULL;
- unsigned char* image = NULL;
- int ret = 0;
-
- if(argc < 3) {
- usage();
- }
-
- infile = argv[1];
- bootfile = argv[2];
- outfile = argv[3];
-
- /* Read OF and boot files */
- of_buf = file_read(infile, &of_size);
- if (!of_buf)
- {
- ret = 1;
- goto error_exit;
- }
-
- /* Validate input file */
- if (test_firmware_tcc(of_buf, of_size))
- {
- printf("[ERR] Unknown OF file used, aborting\n");
- ret = 2;
- goto error_exit;
- }
-
- boot_buf = file_read(bootfile, &boot_size);
- if (!boot_buf)
- {
- ret = 3;
- goto error_exit;
- }
-
- /* Allocate buffer for patched firmware */
- image = malloc(of_size + boot_size);
- if (image == NULL)
- {
- printf("[ERR] Could not allocate memory, aborting\n");
- ret = 4;
- goto error_exit;
- }
-
- /* Create the patched firmware */
- image = patch_firmware_tcc(of_buf, of_size, boot_buf, boot_size,
- &patched_size);
- if (!image)
- {
- printf("[ERR] Error creating patched firmware, aborting\n");
- ret = 5;
- goto error_exit;
- }
-
- fdout = open(outfile, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0644);
- if (fdout < 0)
- {
- perror(outfile);
- ret = 6;
- goto error_exit;
- }
-
- n = write(fdout, image, patched_size);
- if (n != patched_size)
- {
- printf("[ERR] Could not write output file %s\n",outfile);
- ret = 7;
- goto error_exit;
- }
-
-error_exit:
-
- if (fdout >= 0)
- close(fdout);
-
- if (of_buf)
- free(of_buf);
-
- if (boot_buf)
- free(boot_buf);
-
- if (image)
- free(image);
-
- return ret;
-}
-#endif
diff --git a/rbutil/mktccboot/mktccboot.h b/rbutil/mktccboot/mktccboot.h
index 2df2c54506..17179c11e7 100644
--- a/rbutil/mktccboot/mktccboot.h
+++ b/rbutil/mktccboot/mktccboot.h
@@ -25,6 +25,11 @@
#ifndef _MKTCCBOOT_H_
#define _MKTCCBOOT_H_
+/* win32 compatibility */
+#ifndef O_BINARY
+#define O_BINARY 0
+
+#endif
#ifdef __cplusplus
extern "C" {
#endif