Several improvements to hipcc, hipconfig and CMakeLists.txt

- moved hip base version information back to hipconfig
 - fixed bug in hip patch version generation
 - renamed .hipconfig to .buildInfo
 - HCC_HOME is logged to .buildInfo only when HIP_DEVELOPER environment
 - variable is defined
 - hipcc and hipconfig require perl 5.10.1 or above
 - replaced unless defined with logic-defined or
 - added ROCM_TARGET for carrizo
 - moved config parsing to a subroutine
 - config parsing does not set VALID key anymore
 - hipcc honors HCC_HOME environment variable above buildInfo
 - hip_base package now bundles .version in bin directory

Change-Id: Iaeea6d7529671220b02e07337946aaee0af90310


[ROCm/hip commit: cd8c8171b7]
이 커밋은 다음에 포함됨:
Maneesh Gupta
2016-08-14 16:22:25 +05:30
부모 e33c5c07e3
커밋 12dab9cdc0
4개의 변경된 파일과 95개의 추가작업 그리고 82개의 파일을 삭제
+37 -40
파일 보기
@@ -1,5 +1,8 @@
#!/usr/bin/perl -w
# Need perl > 5.10 to use logic-defined or
use 5.006; use v5.10.1;
use File::Basename;
# HIP compiler driver
@@ -24,39 +27,40 @@ print "No Arguments passed, exiting ...\n";
exit(-1);
}
$verbose = $ENV{'HIPCC_VERBOSE'};
$verbose = 0 unless defined $verbose;
#---
# Function to parse config file
sub parse_config_file {
my ($file, $config) = @_;
if (open (CONFIG, "$file")) {
while (<CONFIG>) {
my $config_line=$_;
chop ($config_line);
$config_line =~ s/^\s*//;
$config_line =~ s/\s*$//;
if (($config_line !~ /^#/) && ($config_line ne "")) {
my ($name, $value) = split (/=/, $config_line);
$$config{$name} = $value;
}
}
close(CONFIG);
}
}
$verbose = $ENV{'HIPCC_VERBOSE'} // 0;
# Verbose: 0x1=commands, 0x2=paths, 0x4=hippc args
$HIP_PATH=$ENV{'HIP_PATH'};
$HIP_PATH=dirname (dirname $0) unless defined $HIP_PATH; # use parent directory of hipcc
$HIP_PATH=$ENV{'HIP_PATH'} // dirname (dirname $0); # use parent directory of hipcc
#---
# Read .hipconfig
# Read .buildInfo
my %hipConfig = ();
$hipConfig{'VALID'}=0;
if (open (CONFIG, "$HIP_PATH/lib/.hipconfig")) {
while (<CONFIG>) {
my $config_line=$_;
chop ($config_line);
$config_line =~ s/^\s*//;
$config_line =~ s/\s*$//;
if (($config_line !~ /^#/) && ($config_line ne "")) {
my ($name, $value) = split (/=/, $config_line);
$hipConfig{$name} = $value;
$hipConfig{'VALID'}=1;
}
}
close(CONFIG);
}
parse_config_file("$HIP_PATH/lib/.buildInfo", \%hipConfig);
#---
#HIP_PLATFORM controls whether to use NVCC or HCC for compilation:
$HIP_PLATFORM= `$HIP_PATH/bin/hipconfig --platform`;
$HIP_PLATFORM= `$HIP_PATH/bin/hipconfig --platform` // "hcc";
$HIP_VERSION= `$HIP_PATH/bin/hipconfig --version`;
$HIP_PLATFORM="hcc" unless defined $HIP_PLATFORM;
if ($verbose & 0x2) {
print ("HIP_PATH=$HIP_PATH\n");
print ("HIP_PLATFORM=$HIP_PLATFORM\n");
@@ -66,26 +70,18 @@ if ($verbose & 0x2) {
$setStdLib = 0; # TODO - set to 0
if ($HIP_PLATFORM eq "hcc") {
$HSA_PATH=$ENV{'HSA_PATH'};
$HSA_PATH="/opt/rocm/hsa" unless defined $HSA_PATH;
$HSA_PATH=$ENV{'HSA_PATH'} // "/opt/rocm/hsa";
if($hipConfig{'VALID'} == 0){
$HCC_HOME=$ENV{'HCC_HOME'};
$HCC_HOME="/opt/rocm/hcc" unless defined $HCC_HOME;
}else{
$HCC_HOME=$hipConfig{'HCC_HOME'};
}
$HCC_HOME=$ENV{'HCC_HOME'} // $hipConfig{'HCC_HOME'} // "/opt/rocm/hcc";
$HCC_VERSION=`${HCC_HOME}/bin/hcc --version | cut -d" " -f9 | tr -d "\n"`;
$ROCM_PATH=$ENV{'ROCM_PATH'};
$ROCM_PATH="/opt/rocm" unless defined $ROCM_PATH;
$ROCM_PATH=$ENV{'ROCM_PATH'} // "/opt/rocm";
$HIP_ATP_MARKER=$ENV{'HIP_ATP_MARKER'};
$marker_path = "$ROCM_PATH/profiler/CXLActivityLogger";
$ROCM_TARGET=$ENV{'ROCM_TARGET'};
$ROCM_TARGET="fiji" unless defined $ROCM_TARGET;
$ROCM_TARGET=$ENV{'ROCM_TARGET'} // "fiji";
# HCC* may be used to compile src/hip_hcc.o (and also feed the HIPCXXFLAGS below)
$HCC = "$HCC_HOME/bin/hcc";
@@ -116,6 +112,9 @@ if ($HIP_PLATFORM eq "hcc") {
if ($ROCM_TARGET eq "fiji") {
$HIPLDFLAGS .= " -amdgpu-target=AMD:AMDGPU:8:0:3";
}
if ($ROCM_TARGET eq "carrizo") {
$HIPLDFLAGS .= " -amdgpu-target=AMD:AMDGPU:8:0:1";
}
if ($ROCM_TARGET eq "hawaii") {
$HIPLDFLAGS .= " -amdgpu-target=AMD:AMDGPU:7:0:1";
}
@@ -147,8 +146,7 @@ if ($HIP_PLATFORM eq "hcc") {
if ($verbose & 0x2) {
print ("CUDA_PATH=$CUDA_PATH\n");
}
$CUDA_PATH=$ENV{'CUDA_PATH'};
$CUDA_PATH='/usr/local/cuda' unless defined $CUDA_PATH;
$CUDA_PATH=$ENV{'CUDA_PATH'} // '/usr/local/cuda';
$HIPCC="$CUDA_PATH/bin/nvcc";
$HIPCXXFLAGS .= " -I$CUDA_PATH/include";
@@ -254,8 +252,7 @@ if ($setStdLib eq 0 and $HIP_PLATFORM eq 'hcc')
}
if ($needHipHcc) {
$HIP_USE_SHARED_LIBRARY = $ENV{'HIP_USE_SHARED_LIBRARY'};
$HIP_USE_SHARED_LIBRARY = 0 unless defined $HIP_USE_SHARED_LIBRARY;
$HIP_USE_SHARED_LIBRARY = $ENV{'HIP_USE_SHARED_LIBRARY'} // 0;
#$HIPLDFLAGS .= " -L/opt/rocm/hip/lib -lhip_hcc" ;
if ($HIP_USE_SHARED_LIBRARY) {
@@ -292,7 +289,7 @@ if ($printHipVersion) {
print $HIP_VERSION, "\n";
}
if ($runCmd) {
if ($hipConfig{'VALID'} and $HIP_PLATFORM eq "hcc" and $HCC_VERSION ne $hipConfig{'HCC_VERSION'}) {
if ($HIP_PLATFORM eq "hcc" and exists($hipConfig{'HCC_VERSION'}) and $HCC_VERSION ne $hipConfig{'HCC_VERSION'}) {
print ("HIP was built using $hipConfig{'HCC_VERSION'}, but you are using $HCC_VERSION. Please rebuild HIP.\n") && die ();
}
system ("$CMD") and die ();
+31 -29
파일 보기
@@ -1,5 +1,10 @@
#!/usr/bin/perl -w
$HIP_BASE_VERSION_MAJOR = "0";
$HIP_BASE_VERSION_MINOR = "92";
# Need perl > 5.10 to use logic-defined or
use 5.006; use v5.10.1;
use Getopt::Long;
use Cwd;
@@ -35,14 +40,28 @@ if ($p_help) {
exit();
}
$CUDA_PATH=$ENV{'CUDA_PATH'};
$CUDA_PATH='/usr/local/cuda' unless defined $CUDA_PATH;
#---
# Function to parse config file
sub parse_config_file {
my ($file, $config) = @_;
if (open (CONFIG, "$file")) {
while (<CONFIG>) {
my $config_line=$_;
chop ($config_line);
$config_line =~ s/^\s*//;
$config_line =~ s/\s*$//;
if (($config_line !~ /^#/) && ($config_line ne "")) {
my ($name, $value) = split (/=/, $config_line);
$$config{$name} = $value;
}
}
close(CONFIG);
}
}
$HCC_HOME=$ENV{'HCC_HOME'};
$HCC_HOME='/opt/rocm/hcc' unless defined $HCC_HOME;
$HSA_PATH=$ENV{'HSA_PATH'};
$HSA_PATH='/opt/rocm/hsa' unless defined $HSA_PATH;
$CUDA_PATH=$ENV{'CUDA_PATH'} // '/usr/local/cuda';
$HCC_HOME=$ENV{'HCC_HOME'} // '/opt/rocm/hcc';
$HSA_PATH=$ENV{'HSA_PATH'} // '/opt/rocm/hsa';
#---
#HIP_PLATFORM controls whether to use NVCC or HCC for compilation:
@@ -57,9 +76,7 @@ if (not defined $HIP_PLATFORM) {
}
}
$HIP_PATH=$ENV{'HIP_PATH'};
$HIP_PATH=Cwd::realpath (dirname (dirname $0)) unless defined $HIP_PATH; # use parent directory of this tool
$HIP_PATH=$ENV{'HIP_PATH'} // Cwd::realpath (dirname (dirname $0)); # use parent directory of this tool
if ($HIP_PLATFORM eq "hcc") {
$CPP_CONFIG= " -D__HIP_PLATFORM_HCC__= -I$HIP_PATH/include -I$HCC_HOME/include";
@@ -71,25 +88,10 @@ if ($HIP_PLATFORM eq "nvcc") {
#---
# Read .version
my %hipVersion = ();
$hipVersion{'VALID'}=0;
if (open (CONFIG, "$HIP_PATH/bin/.version")) {
while (<CONFIG>) {
my $config_line=$_;
chop ($config_line);
$config_line =~ s/^\s*//;
$config_line =~ s/\s*$//;
if (($config_line !~ /^#/) && ($config_line ne "")) {
my ($name, $value) = split (/=/, $config_line);
$hipVersion{$name} = $value;
$hipVersion{'VALID'}=1;
}
}
close(CONFIG);
}
$HIP_VERSION_MAJOR = $hipVersion{'HIP_VERSION_MAJOR'};
$HIP_VERSION_MINOR = $hipVersion{'HIP_VERSION_MINOR'};
$HIP_VERSION_PATCH = $hipVersion{'HIP_VERSION_PATCH'};
parse_config_file("$HIP_PATH/bin/.version", \%hipVersion);
$HIP_VERSION_MAJOR = $hipVersion{'HIP_VERSION_MAJOR'} // $HIP_BASE_VERSION_MAJOR;
$HIP_VERSION_MINOR = $hipVersion{'HIP_VERSION_MINOR'} // $HIP_BASE_VERSION_MINOR;
$HIP_VERSION_PATCH = $hipVersion{'HIP_VERSION_PATCH'} // "0";
$HIP_VERSION="$HIP_VERSION_MAJOR.$HIP_VERSION_MINOR.$HIP_VERSION_PATCH";
if ($p_path) {