diff options
| author | hathach <[email protected]> | 2018-03-06 19:14:01 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-03-06 19:14:01 +0700 |
| commit | 4dc917c9ba8b746a4e5ce1934af019840bd20355 (patch) | |
| tree | 5c8d270f36a6c38e98a64a991de54270e5a2d3f0 /examples/build_all.pl | |
| parent | fce85875c49a7d18115c4f0c2cf91d7f8e5df9d9 (diff) | |
rename demo to examples
Diffstat (limited to 'examples/build_all.pl')
| -rw-r--r-- | examples/build_all.pl | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/examples/build_all.pl b/examples/build_all.pl new file mode 100644 index 000000000..d3f6a22d3 --- /dev/null +++ b/examples/build_all.pl @@ -0,0 +1,154 @@ +#!/usr/bin/perl + +################## HOW TO USE THIS FILE ##################### +# iar keil xpresso to build with those toolchain +# clean or build for action +############################################################# +use List::MoreUtils 'any'; +use File::Spec; +use File::Find; +use File::Path; +use File::Glob; +use File::stat; +use File::Basename; +use Cwd; +use Cwd 'abs_path'; + +#use Time::Piece; +#use Time::Seconds; + +$" = "\n"; # change list separator + +$KEIL_PATH = 'C:/Keil/UV4'; #'/C/Keil/UV4'; +$IAR_PATH = glob ('C:/Program*/IAR*/Embedded*/common/bin'); +$XPRESSO_PATH = glob ('C:/nxp/LPCXpresso_7*/lpcxpresso'); +$XPRESSO_PATH = "$XPRESSO_PATH;$XPRESSO_PATH/bin;$XPRESSO_PATH/tools/bin;$XPRESSO_PATH/msys/bin"; + +$ENV{'PATH'} = $KEIL_PATH . ';' . $IAR_PATH . ';' . $XPRESSO_PATH . ';' . $ENV{'PATH'}; +#print $ENV{'PATH'}; die; + +$repo_path = abs_path(cwd . "/.."); +#print $repo_path; die; + +$device_dir = "device/device"; +$host_dir = "host/host"; + +$is_build = any { /build/ } @ARGV; +$is_clean = any { /clean/ } @ARGV; +$is_build = 1 if !$is_clean; # default is build + +$is_keil = (any { /keil/ } @ARGV) || (any { /all/ } @ARGV); +$is_iar = (any { /iar/ } @ARGV) || (any { /all/ } @ARGV); +$is_xpresso = (any { /xpresso/ } @ARGV) || (any { /all/ } @ARGV); + +################## KEIL ##################### +if ($is_keil) +{ + @KEIL_PROJECT_LIST = (<$device_dir*/*.uvproj>, <$host_dir*/*.uvproj>); + + foreach (@KEIL_PROJECT_LIST) + { + /([^\/]+).uvproj/; + my $log_file = "build_all_keil_" . $1 . ".txt"; + my $build_cmd = "Uv4 -b $_ -z -j0 -o ../../$log_file"; + + cmd_execute($build_cmd); + } +} + +################## IAR ##################### +if ($is_iar) +{ + @IAR_PROJECT_LIST = (<$device_dir*/*.ewp>, <$host_dir*/*.ewp>); + + foreach (@IAR_PROJECT_LIST) + { + my $proj_dir = dirname $_; + + /([^\/]+).ewp/; + my $proj_name = $1; + my $log_file = "build_all_iar_" . $proj_name . ".txt"; + unlink $log_file; #delete log_file if existed + + #open project file to get configure name + my $file_content = file_to_var($_); + + #get configure by pattern and build + while ($file_content =~ /^\s*<configuration>\s*$^\s*<name>(.+)<\/name>\s*$/gm) + { + my $build_cmd = "IarBuild $_ -build $1 -log warnings >> $log_file"; + cmd_execute($build_cmd); + + my $out_file = "$proj_dir/$1/Exe/$proj_name.out"; + system("size $out_file >> $log_file"); + } + } +} + +################## LPCXPRESSO ##################### +($repo_path_other_dash = $repo_path) =~ s/\//\\/g; +if ($is_xpresso) +{ + $workspace_dir = "C:/Users/hathach/Dropbox/tinyusb/workspace7"; #projects must be opened in the workspace to be built + @XPRESSO_PROJECT_LIST = (<$device_dir*/.cproject>, <$host_dir*/.cproject>); + + foreach (@XPRESSO_PROJECT_LIST) + { + /([^\/]+)\/.cproject/; + my $log_file = "build_all_xpresso_" . $1 . ".txt"; + my $build_cmd = "lpcxpressoc -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -cleanBuild $1 -data $workspace_dir > $log_file"; + + cmd_execute($build_cmd); + + #open log file to clean up output + open (my $fin, $log_file) or die; + my @log_content = <$fin>; + close($fin); + + open (my $fout, ">$log_file") or die; + + foreach (@log_content) + { + unless (/Invoking: MCU C Compiler/ or /arm-none-eabi-gcc -D/ or /Finished building:/ or /^ $/) + { + s/Building file:.+?([^\/]+\.[ch])/\1/; + s/$repo_path//; + s/$repo_path_other_dash//; + print $fout $_; + } + } + } +} + +### call report builder ### +system("perl build_report.pl"); + +################## HELPER ##################### +sub cmd_execute +{ + print "executing: $_[0]\n..."; + system($_[0]); + print "done\n"; +} + +sub file_to_var +{ #open project file to get configure name + my $file_content; + open(my $fin, $_[0]) or die "Can't open $_[0] to read\n"; + { + local $/; + $file_content = <$fin>; + close($fin); + } + + return $file_content; +} + +sub var_to_file +{ # file name, content + open(my $fout, ">$_[0]") or die "Can't open $_[0] to write\n"; + { + print $fout $_[1]; + close($fout); + } +} |
