[Tinyos-2-commits] CVS: tinyos-2.x/tools/tinyos/ncc ncc.in,1.4,1.5

John Regehr regehr at users.sourceforge.net
Fri Feb 15 21:23:49 PST 2008


Update of /cvsroot/tinyos/tinyos-2.x/tools/tinyos/ncc
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv18101

Modified Files:
	ncc.in 
Log Message:
Support for Safe TinyOS.


Index: ncc.in
===================================================================
RCS file: /cvsroot/tinyos/tinyos-2.x/tools/tinyos/ncc/ncc.in,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** ncc.in	17 Jan 2008 23:18:59 -0000	1.4
--- ncc.in	16 Feb 2008 05:23:47 -0000	1.5
***************
*** 27,30 ****
--- 27,33 ----
  }
  
+ my $exeflag=0;
+ my $libs = "";
+ 
  # Have fun with the arguments
  
***************
*** 80,87 ****
  	    push @includes, $file;
  	}
  	elsif (/^--version$/) {
  	    $print_version = 1;
  	}
!     } 
  
      push @new_args, $_ if !$strip;
--- 83,106 ----
  	    push @includes, $file;
  	}
+         elsif (/^-safe$/) {
+             $safe = 1;
+             $strip = 1;
+         }
+ 	elsif (/^-fnesc-cfile=(.*)/){
+ 	    $appfilename=$1;
+ 	}
+ 	elsif (/^-o$/){
+ 	    $exeflag=1;
+ 	}
+         elsif (/^-l/) {
+             $libs = $libs . " " . $_;
+         } 
  	elsif (/^--version$/) {
  	    $print_version = 1;
  	}
!     } elsif ($exeflag) {
! 	$exefilename =$_;
! 	$exeflag=0;
!     }
  
      push @new_args, $_ if !$strip;
***************
*** 121,124 ****
--- 140,207 ----
  }
  
+ my $cpp;
+ my $deputyasmexe;
+ my $gcc;
+ 
+ my $safe_home = $ENV{'TOSDIR'}."/lib/safe";
+ push @new_args, "-fnesc-include=${safe_home}/include/annots_stage1";
+ push @new_args, "-fnesc-genprefix=#include \"${safe_home}/include/annots_stage2.h\"";
+ 
+ if ($safe) {
+ 
+     if (($target eq "mica2") or ($target eq "micaz")) {
+ 	$mcu = "avr";
+     } elsif ($target eq "telosb") {
+ 	$mcu = "msp430";
+     } else {
+ 	print STDERR "Safe TinyOS does not (yet) support the ${target} target.\n";
+ 	print STDERR "Supported targets: ";
+ 	print STDERR "mica2, micaz, telosb\n";
+ 	exit 2;
+     }
+ 
+     my $deputy_include = $ENV{'DEPUTY_HOME'}."/include";
+ 
+     push @new_args, "-DSAFE_TINYOS";
+     push @new_args, "-conly";
+     push @new_args, "-fnesc-deputy";
+ 
+     if (!defined $appfilename) {
+ 	$appfilename="build/${target}/app.c";
+     }
+     if (!defined $exefilename) {
+ 	$exefilename="build/${target}/main.exe";
+     }
+ 
+     $appfilename =~ m/^((.*\/)?)[^\/]+$/;
+     my $directory = $1;
+ 
+     # Might be useful to keep this app.c somewhere...
+     # This could probably be avoided by using the deputy script 
+     # instead of the executable directly...
+     $cpp = "${mcu}-gcc -E -DSAFE_TINYOS $appfilename -o ${directory}deputy-in.c -I${safe_home}/include"; 
+     
+     # Not worrying about racing protection, for now...
+     # --checksnescatomic racing.txt 
+     $deputyasmexe = "deputy-${mcu} --FLIDs --out ${directory}deputy-out.c ${directory}deputy-in.c";
+     
+     $failfile = "${TOSDIR}/lib/safe/${mcu}/fail.c";
+ 
+     my $gccflags;
+     if (($target eq "mica2") or ($target eq "micaz")) {
+ 	$gccflags = ("-mmcu=atmega128 -Os -fdollars-in-identifiers " .
+ 		    "-finline-limit=1000000 -Winline " .
+ 		    "--param inline-unit-growth=1000000 " .
+ 		    "--param large-function-growth=1000000");
+     }
+     elsif($target eq "telosb"){
+ 	$gccflags = "-Os -mdisable-hwmul -mmcu=msp430x1611";
+     }
+     
+     $gcc = ("${mcu}-gcc $gccflags -I${deputy_include} ${directory}deputy-out.c " .
+ 	    "$failfile -o $exefilename $libs");
+ 
+ }
+ 
  if (!defined $scheduler && !$is_tos_1) {
  	$scheduler = "TinySchedulerC,TinySchedulerC.TaskBasic,TaskBasic,TaskBasic,runTask,postTask";
***************
*** 251,257 ****
  print STDERR join(' ', @new_args), "\n" if $verbose;
  
! exec @new_args;
! print STDERR "Couldn't execute nescc\n";
! exit 2;
  
  sub extractarg {
--- 334,357 ----
  print STDERR join(' ', @new_args), "\n" if $verbose;
  
! if ($safe) {
!     # nescc runs and puts in annotations like COUNT etc... 
!     system(@new_args)==0 or die "Couldn't execute nescc\n";
! 
!     # cpp changes annotations into attributes for deputy
!     print STDERR "${cpp}\n" if $verbose;
!     system($cpp)==0 or die "gcc preprocess error!\n";
! 
!     # deputy inserts the checks
!     print STDERR "${deputyasmexe}\n" if $verbose;
!     system($deputyasmexe)==0 or die "deputy error!\n";
! 
!     print STDERR "${gcc}\n" if $verbose;
!     system($gcc)==0 or die "cil error!\n";
! 
! } else {
!     exec @new_args;
!     print STDERR "Couldn't execute nescc\n";
!     exit 2;
! }
  
  sub extractarg {



More information about the Tinyos-2-commits mailing list