blob: d0d71ba333e10abe7839497282327aba650a0c93 [file] [log] [blame]
use strict;
use warnings;
my $debug = 0;
my $chk_flag = $ARGV[0];
my $compiler = $ARGV[1];
my $compiler_arch = $ARGV[2];
my $compiler_isa = $ARGV[3];
my $wrong_ver_flag = 0;
my $wrong_gcc_toolchain_ver = 0;
my $host_gcc_wrong_ver_flag = 0;
my $compiler_ver_setting = "v4.9.2(2016.05-08)";
my $grep_string = "mips-mti-elf-gcc";
if ($compiler_arch eq "MIPS_GCCV4") {
$compiler_ver_setting = "MIPS v4.9.2(2016.05-08)";
} elsif ($compiler_arch eq "MIPS_GCCV6") {
if ($compiler_isa ne "NANOMIPS"){
$compiler_ver_setting = "MIPS v6.3.0";
} else {
$compiler_ver_setting = "NANOMIPS v6.3.0";
$grep_string = "nanomips-elf-gcc";
}
}
if ($debug eq 1) {
print "chk_flag = $chk_flag\n";
print "compiler = $compiler\n";
print "comiler_arch = $compiler_arch\n";
print "comiler_isa = $compiler_isa\n";
}
print <<"__EOFUSAGE";
*******************************************************************
Recommended Build Environment
*******************************************************************
* [OS] : Ubuntu 18.04 | Ubuntu 14.04 *
* [PERL] : v5.26.1 | v5.18.4 *
* [PYTHON] : 2.7.17 | 2.7.6 *
* [MAKE] : GNU Make v4.1 | GNU Make v3.81 *
* [SHELL] : GNU v4.4.19 | GNU v4.3.11 *
* [HOST GCC] : gcc version 7.5.0 | gcc version 4.8.4 *
* [COMPILER] : $compiler_ver_setting *
* [PERL MODULE]: Switch.pm, File/Copy/Recursive.pm, XML/Simple.pm *
__EOFUSAGE
print "*******************************************************************\n";
print " Start checking current Build Environment \n";
print "*******************************************************************\n";
#********************************************************************
# checking perl version
#********************************************************************
my $perl_version = `perl --version | grep "This is perl" 2>&1`;
if($perl_version =~ /\bv5.18.4/i)
{
print "* [PERL] : v5.18.4 [OK] !!!\n";
}
elsif($perl_version =~ /\bv5.26.1/i)
{
print "* [PERL] : v5.26.1 [OK] !!!\n";
}
else
{
if($perl_version =~ /.*?(v[\d\.]+)\s*/i)
{
print "* [PERL] : $1 [NOT RECOMMENDED] !!!\n";
}
else
{
print "* [PERL] : [UNKNOWN VERSION] !!!\n";
$wrong_ver_flag = 1;
}
}
#********************************************************************
# checking perl module
#********************************************************************
my $perl_module = 0;
my $perl_switch = `perl -e "use Switch" 2>&1`;
my $perl_recursive = `perl -e "use File::Copy::Recursive" 2>&1`;
my $perl_simple = `perl -e "use XML::Simple" 2>&1`;
if (($perl_switch ne "") || ($perl_recursive ne "") || ($perl_simple ne "")) {
$perl_module = 1;
if ($perl_switch ne "") {
print "* [Perl Module]: Switch.pm [NOT DETECTED] !!!\n";
}
if ($perl_recursive ne "") {
print "* [Perl Module]: File/Copy/Recursive.pm [NOT DETECTED] !!!\n";
}
if ($perl_simple ne "") {
print "* [Perl Module]: XML/Simple.pm [NOT DETECTED] !!!\n";
}
} else {
print "* [Perl Module]: All Perl Module [OK] !!!\n";
}
#********************************************************************
# checking python version
#********************************************************************
my $python_version = `python --version 2>&1`;
if($python_version =~ /2.7.6/i)
{
print "* [PYTHON] : v2.7.6 [OK] !!!\n";
}
elsif($python_version =~ /\b2.7.17/i)
{
print "* [PYTHON] : v2.7.17 [OK] !!!\n";
}
else
{
if($python_version =~ /Python\s*([\d\.]+)\s*/i)
{
print "* [PYTHON] : v$1 [NOT RECOMMENDED] !!!\n";
$wrong_ver_flag = 1;
}
else
{
print "* [PYTHON] : [UNKNOWN VERSION] !!!\n";
$wrong_ver_flag = 1;
}
}
#********************************************************************
# checking GNU make version
#********************************************************************
my $make_version = `make --version | grep "GNU Make" 2>&1`;
if($make_version =~ /\b3.81/i)
{
print "* [MAKE] : GNU Make v3.81 [OK] !!!\n";
}
elsif($make_version =~ /\b4.1/i)
{
print "* [MAKE] : GNU Make v4.1 [OK] !!!\n";
}
else
{
if($make_version =~ /GNU\s*Make\s*([\d\.]+)\s*/i)
{
print "* [MAKE] : GUN Make v$1 [NOT RECOMMENDED] !!!\n";
$wrong_ver_flag = 1;
}
else
{
print "* [MAKE] : [UNKNOWN VERSION] !!!\n";
$wrong_ver_flag = 1;
}
}
#********************************************************************
# checking shell version
#********************************************************************
my $shell_version = `bash --version | grep "GNU bash" 2>&1`;
my $shell_is_gnu = "false";
my $shell_is_recommend = "false";
my $shell_number = "UNKNOWN";
my @recommend_number = ('4.3.11', '4.4.19');
if ($shell_version =~ /\bGNU bash/i) {
$shell_is_gnu = "true";
}
foreach my $num (@recommend_number)
{
if ($shell_version =~ /\b$num/i) {
$shell_number = $num;
$shell_is_recommend = "true";
}
}
if ($shell_is_recommend eq "false" and $shell_version =~ /.*?([\d\.]+)\s*/i) {
$shell_number = $1;
}
if ($shell_is_gnu eq "true" and $shell_is_recommend eq "true"){
print "* [SHELL] : GNU bash v$shell_number [OK] !!!\n";
}
else
{
if ($shell_is_gnu eq "true") {
if ($shell_number eq "UNKNOWN") {
print "* [SHELL] : GNU bash [UNKNOWN VERSION NUMBER] !!!\n";
}
else
{
print "* [SHELL] : GNU bash v$shell_number [NOT RECOMMENDED]\n";
}
}
else
{
print "* [SHELL] : [UNKNOWN VERSION] !!!\n";
$wrong_ver_flag = 1;
}
}
#********************************************************************
# checking Host GCC version
#********************************************************************
my $host_gcc_ver = `gcc --version | grep "gcc" 2>&1`;
my @host_gcc_rec_num = ('4.8.4', '7.5.0');
my $host_gcc_num;
my $host_gcc_is_rec = "false";
foreach my $num (@host_gcc_rec_num) {
if ($host_gcc_ver =~ /\b$num/i) {
$host_gcc_num = $num;
$host_gcc_is_rec = "true";
}
}
if ($host_gcc_is_rec eq "false" and $host_gcc_ver =~ /.*?([\d\.]+)\s*/i) {
$host_gcc_num = $1;
}
if($host_gcc_is_rec eq "true") {
print "* [Host GCC] : gcc version $host_gcc_num [OK] !!!\n";
} else {
my @tmp_host_gcc_ver = split /\./,$host_gcc_num;
if (($tmp_host_gcc_ver[0]<4) || ($tmp_host_gcc_ver[0] == 4 && $tmp_host_gcc_ver[1] <= 6) || ($tmp_host_gcc_ver[0] == 4 && $tmp_host_gcc_ver[1] == 6 && $tmp_host_gcc_ver[2] <= 3)) #can not support 4.6.3
{
print "* [Host GCC] : gcc version $host_gcc_num [NOT RECOMMENDED] !!!\n";
$host_gcc_wrong_ver_flag = 1;
}
}
#********************************************************************
# checking compiler version
#********************************************************************
# common/tools/GCC/MIPS/4.9.2/linux/bin/mips-mti-elf-gcc -mthumb --version
# common/tools/GCC/MIPS/6.3.0/linux/bin/mips-mti-elf-gcc -mthumb --version
# common/tools/GCC/NANOMIPS/6.3.0/linux/bin/mips-mti-elf-gcc -mthumb --version
my @tmp = split (' ',$compiler);
my $compiler_location = $tmp[0];
my $compiler_is_existing = "true";
print "$compiler_location\n" if($debug eq 1);
print "$grep_string\n" if($debug eq 1);
if (!-e $compiler_location) {
print "* [COMPILER] : $compiler_location [CANNOT FOUND] !!!\n";
$wrong_ver_flag = 1;
$compiler_is_existing = "false";
} else {
my $compiler_version = `$compiler --version | grep "$grep_string" 2>&1`;
print "$compiler_version\n" if ($debug eq 1);
if ($compiler_arch eq "MIPS_GCCV4") {
if ($compiler_version =~ /\b4.9.2/i) {
if ($compiler_version =~ /\b2016.05-08/i){
print "* [COMPILER] : v4.9.2(2016.05-08) [OK] !!!\n";
} elsif ($compiler_version =~ /\b2016.05-06/i) {
print "* [COMPILER] : v4.9.2(2016.05-06) [LOWER THAN RECOMMENDED] !!!\n";
$wrong_gcc_toolchain_ver = 1;
} elsif ($compiler_version =~ /\b2016.05-03/i) {
print "* [COMPILER] : v4.9.2(2016.05-03) [LOWER THAN RECOMMENDED] !!!\n";
$wrong_gcc_toolchain_ver = 2;
}
else {
print "* [COMPILER] : [UNKNOWN VERSION] !!!\n";
$wrong_gcc_toolchain_ver = 3;
}
} else {
if($compiler_version =~ /.*?\(.*\)\s*([\d\.]+)/i) {
my @tmp_ver = split /\./,$1;
if (($tmp_ver[0] < 4 ) || ($tmp_ver[0] == 4 && $tmp_ver[1] < 9) || ($tmp_ver[0] == 4 && $tmp_ver[1] == 9 && $tmp_ver[2] < 2)) {
print "* [COMPILER] : v$1 [LOWER THAN RECOMMENDED] !!!\n";
$wrong_gcc_toolchain_ver = 3;
}else {
print "* [COMPILER] : v$1 [HIGHER THAN RECOMMENDED] !!!\n";
$wrong_gcc_toolchain_ver = 3;
}
}
}
} elsif ($compiler_arch eq "MIPS_GCCV6") {
if ($compiler_version =~ /\b6.3.0/i) {
my $version_str = "MIPS v6.3.0 [OK] !!!";
if ($compiler_isa eq "NANOMIPS") {
$version_str = "NANOMIPS v6.3.0 [OK] !!!";
}
print "* [COMPILER] : $version_str\n";
} elsif ($compiler_version =~ /.*?\(.*\)\s*([\d\.]+)/i){
my @tmp_ver = split /\./,$1;
if (($tmp_ver[0] < 6 ) || ($tmp_ver[0] == 6 && $tmp_ver[1] < 3)) {
print "* [COMPILER] : v$1 [LOWER THAN RECOMMENDED] !!!\n";
$wrong_gcc_toolchain_ver = 3;
} else {
print "* [COMPILER] : v$1 [HIGHER THAN RECOMMENDED] !!!\n";
$wrong_gcc_toolchain_ver = 3;
}
} else {
print "* [COMPILER] : [UNKNOWN VERSION] !!!\n";
$wrong_gcc_toolchain_ver = 3;
}
} else {
print "* [COMPILER] : [UNKNOWN VERSION] !!!\n";
$wrong_gcc_toolchain_ver = 3;
}
}
#********************************************************************
# un-expected version handle
#********************************************************************
if ($chk_flag eq "-chkenv" and $compiler_is_existing eq "false") {
print "\nPlease install the GCC Cross-Compiler on correct path:\n";
print "$compiler_location\n\n";
exit(1);
}
if ($wrong_ver_flag == 1){
print "\ncurrent Build Env. is not recommendation \nTo avoid unexpected errors , please install the recommended Tool Chain.\n";
print "*******************************************************************\n";
print " Build Environment is NOT RECOMMENDED!\n";
print "*******************************************************************\n\n";
} elsif ($wrong_gcc_toolchain_ver == 1)
{
print "\nCurrent Build Env. of GCC MIPS Tool Chain v4.9.2(2016.05-06) is not recommendation.\n";
print "To avoid unexpected errors , please install the recommended GCC MIPS Tool Chain $compiler_ver_setting.\n";
print "*******************************************************************\n";
print " Build Environment is NOT RECOMMENDED!\n";
print "*******************************************************************\n\n";
exit(1);
}
elsif ($wrong_gcc_toolchain_ver == 2)
{
print "\nCurrent Build Env. of GCC MIPS Tool Chain v4.9.2(2016.05-03) is not recommendation.\n";
print "To avoid unexpected errors , please install the recommended GCC MIPS Tool Chain $compiler_ver_setting.\n";
print "*******************************************************************\n";
print " Build Environment is NOT RECOMMENDED!\n";
print "*******************************************************************\n\n";
exit(1);
}
elsif ($wrong_gcc_toolchain_ver == 3)
{
print "\nCurrent Build Env. of GCC MIPS Tool Chain is not recommendation.\n";
print "To avoid unexpected errors , please install the recommended GCC MIPS Tool Chain $compiler_ver_setting.\n";
print "*******************************************************************\n";
print " Build Environment is NOT RECOMMENDED!\n";
print "*******************************************************************\n\n";
exit(1);
}
elsif ($host_gcc_wrong_ver_flag == 1)
{
print "\nCurrent Build Env. of Host GCC is not recommendation.\n";
print "To avoid unexpected errors , please install the recommended(or higher) version of Host GCC @host_gcc_rec_num.\n";
print "*******************************************************************\n";
print " Build Environment is NOT RECOMMENDED!\n";
print "*******************************************************************\n\n";
exit(1);
}
elsif ($perl_module == 1) {
print "\nCurrent Build Env. of Perl Module is not recommendation.\n";
print "To avoid unexpected errors, please install the recommended Perl Module: Switch.pm, File/Copy/Recursive.pm, XML/Simple.pm.\n";
print "*******************************************************************\n";
print " Build Environment is NOT RECOMMENDED!\n";
print "*******************************************************************\n\n";
exit(1);
}
else
{
print "*******************************************************************\n";
print " Build Environment is ready!\n";
print "*******************************************************************\n\n";
}