Adding mpicxx as compiler option.
[charm.git] / smart-build.pl
index 86786b16cf89192482be5a649f19bc002811ce96..b3067abc656ec6c01cc93ee41fd017ebf8bebf15 100755 (executable)
@@ -1,69 +1,77 @@
 #!/usr/bin/perl
 
+
+# This is an interactive script that knows
+# common ways to build Charm++ and AMPI.
+#
+# Authors: dooley, becker
+
+
+
+# Turn off I/O buffering
 $| = 1;
 
 print "Begin interactive charm configuration\n\n";
 
-
+# Use uname to get the cpu type and OS information
 $os = `uname -s`;
 $cpu = `uname -m`;
 
+#Variables to hold the portions of the configuration:
 $nobs = "";
+$arch = "";
+$network_option_string = "";
+$compiler = "";
 
-#$cpu = "x86_64\n";
-
+#remove newlines from these strings:
 chomp($os);
 chomp ($cpu);
 
-$network_option_string = "";
-$compiler = "";
 
-# Determine kernel
-# linux, darwin, ...
-if($os eq "Linux"){
-       print "Detected a linux kernel\n";
-       $arch_os = "linux";
-} elsif($os eq "Darwin"){
-       print "Detected a darwin kernel\n";
-       $arch_os = "darwin";
-} elsif($os =~ m/BSD/ ){
-       print "Detected a BSD kernel\n";
-       $arch_os = "linux";
-      } elsif($os =~ m/OSF1/ ){
-       print "Detected an OSF1 kernel\n";
-       $arch_os = "linux";
-      }
-
-
-# Determine architecture
-# x86, ppc, ia64, amd64
+# Determine OS kernel
+if ($os eq "Linux") {
+  print "Detected a linux kernel\n";
+  $arch_os = "linux";
+} elsif ($os eq "Darwin") {
+  print "Detected a darwin kernel\n";
+  $arch_os = "darwin";
+} elsif ($os =~ m/BSD/ ) {
+  print "Detected a BSD kernel\n";
+  $arch_os = "linux";
+} elsif ($os =~ m/OSF1/ ) {
+  print "Detected an OSF1 kernel\n";
+  $arch_os = "linux";
+} elsif ($os =~ m/AIX/ ) {
+  print "Detected an AIX kernel\n";
+  $arch = "mpi-sp";
+}
+
+
+
+# Determine architecture (x86, ppc, ...)
 if($cpu =~ m/i[0-9]86/){
-       print "Detected architecture x86\n";
-       $x86 = 1;
+  print "Detected architecture x86\n";
+  $x86 = 1;
 } elsif($cpu =~ m/x86\_64/){
-       print "Detected architecture x86_64\n";
-       $amd64 = 1;
+  print "Detected architecture x86_64\n";
+  $amd64 = 1;
 } elsif($cpu =~ m/ia64/){
-       print "Detected architecture ia64\n";
-       $ia64 = 1;
-       $nobs = "--no-build-shared";
+  print "Detected architecture ia64\n";
+  $ia64 = 1;
+  $nobs = "--no-build-shared";
 } elsif($cpu =~ m/powerpc/){
-       print "Detected architecture ppc\n";
-       $ppc = 1;
+  print "Detected architecture ppc\n";
+  $ppc = 1;
 } elsif($cpu =~ m/Power Mac/){
   print "Detected architecture ppc\n";
   $ppc = 1;
-}elsif($cpu =~ m/alpha/){
-    print "Detected architecture alpha\n";
-      $alpha = 1;
-  }
-
-
-
+} elsif($cpu =~ m/alpha/){
+  print "Detected architecture alpha\n";
+  $alpha = 1;
+}
 
-# Determine converse architecture
-# net, mpi, ...
 
+# Determine converse architecture (net, mpi, ...)
 print "Do you have a special network interconnect? [y/N]";
 $special_network = "false";
 while($line = <>){
@@ -76,26 +84,24 @@ while($line = <>){
        }
 }
 
-       
+# default to net
 $converse_network_type = "net";
        
 if($special_network eq "true"){
-       #select type of interconnect here
        print << "EOF";
        
-Choose an interconnect from below: [1-10]
-       1) Infiniband (using OSU MPI)
-       2) Infiniband (native layer alpha version)
-       3) Myrinet GM
-       4) Myrinet MX
-       5) Amasso
-       6) Cray XT3, XT4 (not yet tested on CNL)
-       7) Bluegene/L Native
-       8) Bluegene/L MPI
-       9) Other Vendor MPI
-       10) VMI
-
-Note: Some other less common options can be found by calling "./build --help"
+Choose an interconnect from below: [1-11]
+        1) MPI
+        2) Infiniband (native ibverbs alpha version)
+        3) Myrinet GM
+        4) Myrinet MX
+        5) Amasso
+        6) Cray XT3, XT4 (not yet tested on CNL)
+        7) Bluegene/L Native (only at T. J. Watson)
+        8) Bluegene/L MPI
+        9) Bluegene/P Native (only at T. J. Watson)
+       10) Bluegene/P MPI
+       11) VMI
 
 EOF
        
@@ -117,10 +123,10 @@ EOF
                        $network_option_string = $network_option_string . "mx ";
                        last;
                } elsif($line eq "5"){
-                       $converse_network_type = "ammasso";
+                       $arch = "ammasso";
                        last;
                } elsif($line eq "6"){
-                       $converse_network_type = "mpi-crayxt3";
+                       $arch = "mpi-crayxt3";
                        last;
                } elsif($line eq "7"){
                        $arch = "bluegenel";
@@ -128,57 +134,41 @@ EOF
                        $nobs = "--no-build-shared";
                        last;
                } elsif($line eq "8"){
-                       $converse_network_type = "mpi-bluegenel";
+                   $arch = "mpi-bluegenel";
                        $compiler = "xlc";
                        $nobs = "--no-build-shared";
                        last;
                } elsif($line eq "9"){
-                       $converse_network_type = "mpi";
+                   $arch = "bluegenep";
+                       $compiler = "xlc";
                        last;
                } elsif($line eq "10"){
+                   $arch = "mpi-bluegenep";
+                       $compiler = "xlc";
+                       last;
+               } elsif($line eq "11"){
                        $converse_network_type = "vmi";
                        last;
                } else {
                        print "Invalid option, DOES NOT COMPUTE, please try again :P\n"
                }
-               
        }       
-       
 }
 
 
-$target = "LIBS";
-$arch = "";
-
-print "arch_os: $arch_os\n";
-print "converse_network_type: $converse_network_type\n";
-
-if($converse_network_type eq "ammasso" || 
-   $converse_network_type eq "bluegenel" ||
-   $converse_network_type eq "mpi-bluegenel"||
-   $converse_network_type eq "mpi-crayxt3" ) 
-   {    
-      $arch = $converse_network_type;
-   }
-else 
-   {
+if($arch eq ""){
          $arch = "${converse_network_type}-${arch_os}";
-          print "arch: $arch\n";
          if($amd64) {
-                $arch = $arch . "-amd64";
+               $arch = $arch . "-amd64";
          } elsif($ia64){
                $arch = $arch . "-ia64";
          } elsif($ppc){
                $arch = $arch . "-ppc";
-             } elsif($alpha){
+         } elsif($alpha){
                $arch = $arch . "-axp";
-             }
-         
-   }
-print "arch: $arch\n";
-
-
-
+         }
+}
+  
 #Cleanup the architectures to match the horrible real world inconsistent src/archs
 
 if($arch eq "net-darwin"){
@@ -191,7 +181,7 @@ if($arch eq "net-darwin"){
 
 
 if($compiler ne ""){
-       print "We determined that you should use the compiler $compiler\n Do you want to use a different compiler?[Y/N]";
+       print "We determined that you should use the compiler $compiler\n Do you want to use a different compiler?[y/N]";
 } else {
        print "Do you want to specify a compiler? [y/N]";
 }
@@ -216,7 +206,8 @@ if($special_compiler eq "true"){
        #select type of interconnect here
        print << "EOF";
        
-Choose a compiler from below: [1-14]
+Choose a compiler from below: [1-15]
+
        1) cc
        2) cc64
        3) cxx
@@ -231,6 +222,7 @@ Choose a compiler from below: [1-14]
        12) pathscale
        13) xlc
        14) xlc64
+    15) mpicxx
 
 EOF
 
@@ -278,14 +270,17 @@ EOF
                } elsif($line eq "14"){
                        $compiler = "xlc64";
                        last;
+               } elsif($line eq "15"){
+                       $compiler = "mpicxx";
+                       last;
                } else {
                        print "Invalid option, DOES NOT COMPUTE, please try again :P\n"
                }
        }
 }
 
-# SMP / Multicore
 
+# Determine whether to support SMP / Multicore
 print "Do you want SMP or multicore support? [y/N]";
 $smp = "";
 while($line = <>){
@@ -301,11 +296,6 @@ while($line = <>){
 }
 
 
-
-
-
-
-
 # Choose compiler flags
 print << "EOF";
        
@@ -345,6 +335,10 @@ while($line = <>){
 
 
 
+# Determine the target to build.
+# We want this simple so we just give 2 options
+$target = "";
+
 print << "EOF";
 
 What do you want to build?
@@ -357,7 +351,6 @@ while($line = <>){
        chomp $line;
        if($line eq "1" || $line eq ""){
                $target = "charm++";
-               $j = "-j4";
                last;
        } elsif($line eq "2"){
                $target = "LIBS";
@@ -368,14 +361,15 @@ while($line = <>){
        
 }
 
-
-
-if($j ne ""){
+# Determine whether to use a -j4 flag for faster building
+# Currently LIBS cannot be safely built with -j4
+if($target eq "charm++"){
        print "Do you want to do a parallel build (-j4)?[Y/n]";
        while($line = <>){
                chomp $line;
                if(lc($line) eq "y" || lc($line) eq "yes" || $line eq ""){
-                       last;
+                       $j = "-j4";
+                 last;
                } elsif(lc($line) eq "n" || lc($line) eq "no" ){
                        $j = "";
                        last;
@@ -386,15 +380,22 @@ if($j ne ""){
 }
 
 
-
+# Compose the build line
 $build_line = "./build $target $arch ${network_option_string} $compiler $smp $j ${compiler_flags}\n";
 
-open(BUILDLINE, ">smart-build.log");
-print BUILDLINE "Using the following build command:\n$build_line\n";
+
+# Save the build line in the log
+open(BUILDLINE, ">>smart-build.log");
+print BUILDLINE `date`;
+print BUILDLINE "Using the following build command:\n";
+print BUILDLINE "$build_line\n";
 close(BUILDLINE);
 
+
+# Execute the build line if the appriate architecture directory exists
 if(-e "src/arch/$arch"){
        print "Building with: ${build_line}\n"; 
+       # Execute the build line
        system($build_line);
 } else {
        print "We could not figure out how to build charm with those options on this platform, please manually build\n";