Brent Dax:
# Mattia Barbon:
# # > ## +#if defined(WIN32)
# # > ## + program_code = malloc( file_stat.st_size );
# # > ## +#else
# # >
# # > #Should we be using malloc, or are we supposed to use our
# # own allocator?
# # > #(I haven't been munging in the C, so I don't really
# # know--it just looks
# # > #a little suspicious.)
# # >
# # > In memory.{h,c} there is a mem_sys_allocate(IV) that I
# # would suggest.
# # Of course you're right.
# # New patch Attached
# #
# # The attached patch replaces things.diff ( testsuite.diff should be
# # OK )
#
# I've made some small changes, including some comments so people don't
# keep putting new C compiler flags in the wrong place. Most
# of the other
# changes were things like formatting. Patch attached. I'll
# commit this
# myself if nobody has any objections. (Once this is
# committed, I'll work
# on the parrot/config.h stuff, and merge that in to this patch.)
Ack, forgot to actually *attach* the file...
--Brent Dax
[EMAIL PROTECTED]
They *will* pay for what they've done.
--- parrot-cvs\parrot\Configure.pl Fri Sep 14 17:57:42 2001
+++ parrot\parrot\Configure.pl Sat Sep 15 16:01:18 2001
@@ -5,7 +5,36 @@
use strict;
use Config;
+use Getopt::Long;
+my( $opt_debugging, $opt_defaults, $opt_version, $opt_help ) =
+ ( 0, 0, 0, 0 );
+my( %opt_defines );
+my $result = GetOptions( 'debugging!' => \$opt_debugging,
+ 'defaults!' => \$opt_defaults,
+ 'version' => \$opt_version,
+ 'help' => \$opt_help,
+ 'define=s' => \%opt_defines,
+ );
+
+if( $opt_version ) {
+ print '$Id:$' . "\n";
+ exit;
+}
+
+if( $opt_help ) {
+ print <<"EOT";
+$0 - Parrot Configure
+Options:
+ --debugging Enable debugging
+ --defaults Accept all default values
+ --define name=value Defines value name as value
+ --help This text
+ --version Show assembler version
+EOT
+ exit;
+}
+
my($DDOK)=undef;
eval {
require Data::Dumper;
@@ -29,21 +58,48 @@
#defaults for them.
#XXX Figure out better defaults
my(%c)=(
- iv => ($Config{ivtype}||'long'),
- nv => ($Config{nvtype}||'long double'),
- cc => $Config{cc},
- ccflags => $Config{ccflags},
- libs => $Config{libs},
- perl => $^X,
+ iv => ($Config{ivtype}||'long'),
+ nv => ($Config{nvtype}||'double'),
+ cc => $Config{cc},
+ #ADD C COMPILER FLAGS HERE
+ ccflags => $Config{ccflags}." -I./include",
+ libs => $Config{libs},
+ perl => $^X,
+ cc_debug => '-g',
+ o => '.o', # object files extension
+ exe => $Config{_exe},
+ ld => $Config{ld},
+ ld_out => '-o ', # ld output file
+ ld_debug => '', # include debug info in executable
+ debugging => $opt_debugging,
);
+foreach my $i ( keys %opt_defines ) {
+ $c{$i} = $opt_defines{$i};
+}
+
+# set up default values
+my $hints = "hints/" . lc( $^O ) . ".pl";
+if( -f $hints ) {
+ local($/);
+ open HINT, "< $hints" or die "Unable to open hints file '$hints'";
+ my $hint = <HINT>;
+ close HINT;
+ eval $hint or die "Error in hints file $hints: '$@/$!'";
+}
+
#ask questions
prompt("What C compiler do you want to use?", 'cc');
+prompt("How about your linker?", 'ld');
prompt("What flags would you like passed to your C compiler?", 'ccflags');
prompt("Which libraries would you like your C compiler to include?", 'libs');
prompt("How big would you like integers to be?", 'iv');
-prompt("How about your floats?", 'nv');
+prompt("And your floats?", 'nv');
+unless( $c{debugging} ) {
+ $c{ld_debug} = ' ';
+ $c{cc_denug} = ' ';
+}
print <<"END";
@@ -95,6 +151,8 @@
#prompt for something from the user
sub prompt {
+ return if $opt_defaults;
+
my($message, $field)=(@_);
my($input);
print "$message [$c{$field}] ";
--- parrot-cvs\parrot\Makefile.in Fri Sep 14 17:57:42 2001
+++ parrot\parrot\Makefile.in Sat Sep 15 16:01:24 2001
@@ -1,21 +1,27 @@
-O = .o
+O = ${o}
H_FILES = config.h exceptions.h io.h op.h register.h string.h events.h interpreter.h
memory.h parrot.h stacks.h bytecode.h global_setup.h
O_FILES = global_setup$(O) interpreter$(O) parrot$(O) register$(O) basic_opcodes$(O)
memory$(O) bytecode$(O) string$(O) strnative$(O)
-C_FLAGS = ${ccflags} -I..
+#DO NOT ADD C COMPILER FLAGS HERE
+#Add them in Configure.pl--look for the
+#comment 'ADD C COMPILER FLAGS HERE'
+C_FLAGS = ${ccflags} ${cc_debug}
C_LIBS = ${libs}
CC = ${cc} $(C_FLAGS)
+LD = ${ld}
-all : $(O_FILES)
+TEST_PROG=test_prog${exe}
-test_prog: test_main$(O) $(O_FILES)
- $(CC) $(C_LIBS) -o test_prog $(O_FILES) test_main$(O)
+all : $(TEST_PROG)
+$(TEST_PROG): test_main$(O) $(O_FILES)
+ $(LD) $(C_LIBS) ${ld_debug} ${ld_out}$(TEST_PROG) $(O_FILES) test_main$(O)
+
test_main$(O): $(H_FILES)
global_setup$(O): $(H_FILES)
@@ -49,4 +55,5 @@
${perl} Configure.pl
clean:
- rm -f *$(O) *.s basic_opcodes.c interp_guts.h op.h test_prog
+ -rm -f *$(O) *.s basic_opcodes.c interp_guts.h op.h $(TEST_PROG)
+ -rm -f *.opt *.ilk *.pdb
--- parrot-cvs\parrot\parrot.h Fri Sep 14 07:08:00 2001
+++ parrot\parrot\parrot.h Sat Sep 15 15:49:56 2001
@@ -19,8 +19,12 @@
#include <stdio.h>
/*#include <types.h> */
#include <time.h>
-#include <unistd.h>
-#include <sys/mman.h>
+#if defined(WIN32)
+# include <io.h>
+#else
+# include <unistd.h>
+# include <sys/mman.h>
+#endif
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
--- parrot-cvs\parrot\test_main.c Fri Sep 14 07:08:00 2001
+++ parrot\parrot\test_main.c Sat Sep 15 15:49:56 2001
@@ -66,12 +66,19 @@
return 1;
}
+#if defined(WIN32)
+ program_code = malloc( file_stat.st_size );
+#else
program_code = mmap(0, file_stat.st_size, PROT_READ, MAP_SHARED, fd, 0);
+#endif
if (!program_code) {
printf("Can't mmap, code %i\n", errno);
return 1;
}
+#if defined(WIN32)
+ _read( fd, program_code, file_stat.st_size );
+#endif
program_code = init_bytecode(program_code);
runops(interpreter, program_code);
--- parrot.cvs/hints/mswin32.pl Thu Jan 1 01:00:00 1970
+++ parrot/hints/mswin32.pl Fri Sep 14 17:33:48 2001
@@ -0,0 +1,18 @@
+{
+ my $is_msvc = grep { $c{cc} eq $_ } ( qw(cl cl.exe) );
+ my $is_mingw = grep { $c{cc} eq $_ } ( qw(gcc gcc.exe) );
+
+ if( $is_msvc ) {
+ $c{o} = '.obj';
+ $c{ld_out} = '-out:';
+ $c{cc_debug} = '-Zi';
+ $c{ld_debug} = '-debug';
+ }
+ elsif( $is_mingw ) {
+ $c{ld} = 'gcc';
+ # if your perl is ActivePerl, then libs are .lib files,
+ # not necessary, and gcc does not like them
+ $c{libs} = ' ' if $c{libs} =~ m/\.lib\s/i;
+ }
+}
+
--- parrot.cvs/test_main.c Fri Sep 14 18:00:36 2001
+++ parrot/test_main.c Fri Sep 14 17:49:42 2001
@@ -67,5 +67,9 @@
}
+#if defined(WIN32)
+ program_code = mem_sys_allocate( file_stat.st_size );
+#else
program_code = mmap(0, file_stat.st_size, PROT_READ, MAP_SHARED, fd, 0);
+#endif
if (!program_code) {
printf("Can't mmap, code %i\n", errno);
@@ -73,4 +77,7 @@
}
+#if defined(WIN32)
+ _read( fd, program_code, file_stat.st_size );
+#endif
program_code = init_bytecode(program_code);