Cross-platform tools added to Makefiles.

svn path=/trunk/; revision=3061
This commit is contained in:
Brian Palmer 2002-06-13 00:39:49 +00:00
parent 6ab0a870c1
commit 63ea3fb94c
7 changed files with 429 additions and 22 deletions

View file

@ -33,18 +33,23 @@ OUTPUT_DIR = $(OBJDIR)/$(TARGET)
#############################################
# COMPILER AND LINKER PROGRAMS
#
TOOLSDIR = $(SRCDIR)/../tools
CC = gcc
LD = ld
AR = ar
NM = nm
RM = cmd /C del
CP = cmd /C copy
MKDIR = cmd /C md
RMDIR = cmd /C rd
RM = $(TOOLSDIR)/rdel
CP = $(TOOLSDIR)/rcopy
MKDIR = $(TOOLSDIR)/rmkdir
RMDIR = $(TOOLSDIR)/rrmdir
NASM_CMD = nasm
OBJCOPY = objcopy
DEPTOOL = $(SRCDIR)/../tools/deptool
TOOLSDIR = $(SRCDIR)/../tools
DEPTOOL = $(TOOLSDIR)/deptool
HOSTTOOL = $(TOOLSDIR)/hosttype
TOOLS = $(DEPTOOL) $(HOSTTOOL)
HOST = $(shell $(HOSTTOOL))
#-----------------------------------------------------------------------------------------------------
# TEST IF WE ARE IN THE TARGET DIRECTORY
@ -53,6 +58,8 @@ TOOLSDIR = $(SRCDIR)/../tools
#ifeq (,$(filter $(CURDIR)/$(OUTPUT_DIR),$(notdir $(CURDIR))))
ifneq ($(CURDIR), $(SRCDIR)/$(OUTPUT_DIR))
SRCDIR = $(CURDIR)
.SUFFIXES:
#############################################
@ -63,6 +70,7 @@ MAKETARGET = $(MAKE) --no-print-directory -C $(OUTPUT_DIR) \
.PHONY: CHANGE_TO_TARGET
CHANGE_TO_TARGET: $(OBJDIR) $(OBJDIR)/$(TARGET)
@$(MAKE) --no-print-directory -C $(TOOLSDIR)
@echo Calculating source file dependencies...
+@$(MAKETARGET)
@ -71,8 +79,9 @@ $(OBJDIR):
@$(MKDIR) $(OBJDIR)
$(OBJDIR)/$(TARGET): $(OBJDIR)
@echo Creating directory: $(OBJDIR)\$(TARGET)
@$(MKDIR) $(OBJDIR)\$(TARGET)
@echo Creating directory: $(OBJDIR)/$(TARGET)
@$(MKDIR) $(OBJDIR)/$(TARGET)
Makefile : ;
@ -82,10 +91,11 @@ Makefile : ;
.PHONY : clean
clean:
@echo Cleaning directory $(OBJDIR)\$(TARGET)
@-$(RM) /Q $(OBJDIR)\$(TARGET)\*.*
@echo Removing directory $(OBJDIR)\$(TARGET)
@-$(RMDIR) $(OBJDIR)\$(TARGET)
@$(MAKE) --no-print-directory -C $(TOOLSDIR)
@echo Cleaning directory $(OBJDIR)/$(TARGET)
@-$(RM) $(OBJDIR)/$(TARGET)/*
@echo Removing directory $(OBJDIR)/$(TARGET)
@-$(RMDIR) $(OBJDIR)/$(TARGET)
@-$(RMDIR) $(OBJDIR)
@echo Clean ALL done.
@ -129,10 +139,23 @@ CFLAGS = $(COMPILER_OPTIONS) \
LINKER_OPTIONS = -N -Ttext=0x8000 -s
#############################################
# LINKERS FLAGS
# LINKER FLAGS
#
LFLAGS = $(LINKER_OPTIONS)
#############################################
# NASM FLAGS
#
ifeq ($(HOST), dos)
NASMFLAGS = -f coff
else
ifeq ($(HOST), win32)
NASMFLAGS = -f win32
else
NASMFLAGS = -f elf
endif
endif
#############################################
# LIST ALL THE OBJECT FILE GROUPS
#
@ -235,16 +258,11 @@ VPATH = $(SRCDIR)/ \
#############################################
all : $(DEPTOOL) freeldr.sys
all : freeldr.sys
@echo Make ALL done.
#############################################
$(DEPTOOL) :
@$(MAKE) --no-print-directory -C $(TOOLSDIR)
#############################################
freeldr.sys : $(OBJS)
@echo ===================================================== LINKING $@
# @$(LD) -N -Ttext=0x8000 --oformat=binary -s -o freeldr.sys $(OBJS)
@ -265,7 +283,7 @@ freeldr.sys : $(OBJS)
%.o :: %.asm
@echo ===================================================== Assembling $*
@$(NASM_CMD) -o $@ -f coff $<
@$(NASM_CMD) $(NASMFLAGS) -o $@ $<
#############################################

View file

@ -22,16 +22,24 @@
# PROGRAMS
#
CC = gcc
RM = cmd /C del
RM = rdel
#############################################
TOOLS = deptool \
bin2c
bin2c \
hosttype \
rdel \
rcopy \
rmkdir \
rrmdir
#############################################
all : $(TOOLS)
@echo Tools are up to date.
% :: all
#############################################

19
freeldr/tools/hosttype.c Normal file
View file

@ -0,0 +1,19 @@
//
// hosttype.c
// Copyright (C) 2002 by Brian Palmer <brianp@sginet.com>
//
#include <stdio.h>
int main(int argc, char *argv[])
{
#if defined (__DJGPP__)
printf("dos\n");
#elif defined (__WIN32__)
printf("win32\n");
#else
printf("linux\n");
#endif // defined __DJGPP__
return 0;
}

93
freeldr/tools/rcopy.c Normal file
View file

@ -0,0 +1,93 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#if defined (__DJGPP__) || defined (__WIN32__)
#define DOS_PATHS
#else
#define UNIX_PATHS
#endif
char* convert_path(char* origpath)
{
char* newpath;
int i;
newpath = strdup(origpath);
i = 0;
while (newpath[i] != 0)
{
#ifdef UNIX_PATHS
if (newpath[i] == '\\')
{
newpath[i] = '/';
}
#else
#ifdef DOS_PATHS
if (newpath[i] == '/')
{
newpath[i] = '\\';
}
#endif
#endif
i++;
}
return(newpath);
}
#define TRANSFER_SIZE (65536)
int main(int argc, char* argv[])
{
char* path1;
char* path2;
FILE* in;
FILE* out;
char* buf;
int n_in;
int n_out;
if (argc != 3)
{
fprintf(stderr, "Too many arguments\n");
exit(1);
}
path1 = convert_path(argv[1]);
path2 = convert_path(argv[2]);
in = fopen(path1, "rb");
if (in == NULL)
{
perror("Cannot open input file");
exit(1);
}
out = fopen(path2, "wb");
if (out == NULL)
{
perror("Cannot open output file");
fclose(in);
exit(1);
}
buf = malloc(TRANSFER_SIZE);
while (!feof(in))
{
n_in = fread(buf, 1, TRANSFER_SIZE, in);
n_out = fwrite(buf, 1, n_in, out);
if (n_in != n_out)
{
perror("Failed to write to output file\n");
free(buf);
fclose(in);
fclose(out);
exit(1);
}
}
exit(0);
}

91
freeldr/tools/rdel.c Normal file
View file

@ -0,0 +1,91 @@
/* $Id: rdel.c,v 1.1 2002/06/13 00:39:49 bpalmer Exp $
* COPYRIGHT: See COPYING in the top level directory
* PROGRAMMER: Rex Jolliff (rex@lvcablemodem.com)
* PURPOSE: Platform independant delete command
*/
#include <dirent.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void
convertPath (char * pathToConvert)
{
while (*pathToConvert != 0)
{
if (*pathToConvert == '\\')
{
*pathToConvert = '/';
}
pathToConvert++;
}
}
void
getDirectory (const char *filename, char * directorySpec)
{
int lengthOfDirectory;
if (strrchr (filename, '/') != 0)
{
lengthOfDirectory = strrchr (filename, '/') - filename;
strncpy (directorySpec, filename, lengthOfDirectory);
directorySpec [lengthOfDirectory] = '\0';
}
else
{
strcpy (directorySpec, ".");
}
}
void
getFilename (const char *filename, char * fileSpec)
{
if (strrchr (filename, '/') != 0)
{
strcpy (fileSpec, strrchr (filename, '/') + 1);
}
else
{
strcpy (fileSpec, filename);
}
}
int
main (int argc, char* argv[])
{
int justPrint = 0;
int idx;
int returnCode;
for (idx = 1; idx < argc; idx++)
{
convertPath (argv [idx]);
if (justPrint)
{
printf ("delete %s\n", argv [idx]);
}
else
{
returnCode = remove (argv [idx]);
if (returnCode != 0 && errno != ENOENT)
{
/* Continue even if there is errors */
#if 0
printf ("Unlink of %s failed. Unlink returned %d.\n",
argv [idx],
returnCode);
return returnCode;
#endif
}
}
}
return 0;
}

85
freeldr/tools/rmkdir.c Normal file
View file

@ -0,0 +1,85 @@
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <ctype.h>
#define DOS_PATH_CHAR '\\'
#define UNIX_PATH_CHAR '/'
#if defined (__DJGPP__) || defined (__WIN32__)
#define DOS_PATHS
#define PATH_CHAR '\\'
#define PATH_CHAR_STR "\\"
#else
#define UNIX_PATHS
#define PATH_CHAR '/'
#define PATH_CHAR_STR "/"
#endif
void ConvertPathCharacters(char *Path)
{
int i;
i = 0;
while (Path[i] != 0)
{
if (Path[i] == DOS_PATH_CHAR || Path[i] == UNIX_PATH_CHAR)
{
Path[i] = PATH_CHAR;
}
i++;
}
}
int MakeDirectory(char *Directory)
{
char CurrentDirectory[1024];
getcwd(CurrentDirectory, 1024);
if (chdir(Directory) == 0)
{
chdir(CurrentDirectory);
return 0;
}
#if defined (UNIX_PATHS) || defined (__DJGPP__)
if (mkdir(Directory, 0755) != 0)
{
perror("Failed to create directory");
return 1;
}
#else
if (mkdir(Directory) != 0)
{
perror("Failed to create directory");
return 1;
}
#endif
if (chdir(Directory) != 0)
{
perror("Failed to change directory");
return 1;
}
chdir(CurrentDirectory);
return 0;
}
int main(int argc, char* argv[])
{
if (argc != 2)
{
fprintf(stderr, "Wrong number of arguments\n");
exit(1);
}
ConvertPathCharacters(argv[1]);
return MakeDirectory(argv[1]);
}

93
freeldr/tools/rrmdir.c Normal file
View file

@ -0,0 +1,93 @@
/* $Id: rrmdir.c,v 1.1 2002/06/13 00:39:49 bpalmer Exp $
* COPYRIGHT: See COPYING in the top level directory
* PROGRAMMER: Rex Jolliff (rex@lvcablemodem.com)
* Casper S. Hornstrup (chorns@users.sourceforge.net)
* PURPOSE: Platform independant remove directory command
*/
#include <dirent.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
void
convertPath (char * pathToConvert)
{
while (*pathToConvert != 0)
{
if (*pathToConvert == '\\')
{
*pathToConvert = '/';
}
pathToConvert++;
}
}
void
getDirectory (const char *filename, char * directorySpec)
{
int lengthOfDirectory;
if (strrchr (filename, '/') != 0)
{
lengthOfDirectory = strrchr (filename, '/') - filename;
strncpy (directorySpec, filename, lengthOfDirectory);
directorySpec [lengthOfDirectory] = '\0';
}
else
{
strcpy (directorySpec, ".");
}
}
void
getFilename (const char *filename, char * fileSpec)
{
if (strrchr (filename, '/') != 0)
{
strcpy (fileSpec, strrchr (filename, '/') + 1);
}
else
{
strcpy (fileSpec, filename);
}
}
int
main (int argc, char* argv[])
{
int justPrint = 0;
int idx;
int returnCode;
for (idx = 1; idx < argc; idx++)
{
convertPath (argv [idx]);
if (justPrint)
{
printf ("remove %s\n", argv [idx]);
}
else
{
returnCode = rmdir (argv [idx]);
if (returnCode != 0 && errno != ENOENT)
{
/* Continue even if there is errors */
#if 0
printf ("Rmdir of %s failed. Rmdir returned %d.\n",
argv [idx],
returnCode);
return returnCode;
#endif
}
}
}
return 0;
}