SWDEV-263964 - Fix hipconfig to work on Windows

Modify hipconfig and hipcc to properly run Windows compiler
executables. Support Windows Environmental Variables and
AMD Display Adapter info. Update flags to include quotes for
paths that have spaces, such as Program Files.

Change-Id: Ib721b318bd88be7dfa1247a30ce78c7ed6a334e8


[ROCm/hip commit: 9e47efe0e6]
Этот коммит содержится в:
Aaron En Ye Shi
2021-01-18 20:06:54 +00:00
коммит произвёл Aaron En Ye Shi
родитель fea0eaa9f0
Коммит 7dd6fcd1ae
3 изменённых файлов: 69 добавлений и 33 удалений
+14 -13
Просмотреть файл
@@ -54,8 +54,6 @@ if(scalar @ARGV == 0){
$verbose = $ENV{'HIPCC_VERBOSE'} // 0;
# Verbose: 0x1=commands, 0x2=paths, 0x4=hipcc args
$isWindows = $^O eq 'MSWin32';
$HIPCC_COMPILE_FLAGS_APPEND=$ENV{'HIPCC_COMPILE_FLAGS_APPEND'};
$HIPCC_LINK_FLAGS_APPEND=$ENV{'HIPCC_LINK_FLAGS_APPEND'};
@@ -100,6 +98,7 @@ BEGIN {
use lib "$base_dir/";
use hipvars;
$isWindows = $hipvars::isWindows;
$HIP_RUNTIME = $hipvars::HIP_RUNTIME;
$HIP_PLATFORM = $hipvars::HIP_PLATFORM;
$HIP_COMPILER = $hipvars::HIP_COMPILER;
@@ -147,11 +146,11 @@ $setStdLib = 0; # TODO - set to 0
$default_amdgpu_target = 1;
if ($HIP_PLATFORM eq "amd") {
$HIPCC="$HIP_CLANG_PATH/clang++";
$HIPCC="\"$HIP_CLANG_PATH/clang++\"";
# If $HIPCC clang++ is not compiled, use clang instead
if ( ! -e $HIPCC ) {
$HIPCC="$HIP_CLANG_PATH/clang";
$HIPCC="\"$HIP_CLANG_PATH/clang\"";
$HIPLDFLAGS = "--driver-mode=g++";
}
@@ -185,9 +184,9 @@ if ($HIP_PLATFORM eq "amd") {
} else {
$HIPCXXFLAGS .= " -std=c++11";
}
$HIPCXXFLAGS .= " -isystem $HIP_CLANG_INCLUDE_PATH/..";
$HIPCFLAGS .= " -isystem $HIP_CLANG_INCLUDE_PATH/..";
$HIPLDFLAGS .= " -L$HIP_LIB_PATH";
$HIPCXXFLAGS .= " -isystem \"$HIP_CLANG_INCLUDE_PATH/..\"";
$HIPCFLAGS .= " -isystem \"$HIP_CLANG_INCLUDE_PATH/..\"";
$HIPLDFLAGS .= " -L\"$HIP_LIB_PATH\"";
if ($isWindows) {
$HIPLDFLAGS .= " -lamdhip64";
}
@@ -196,9 +195,11 @@ if ($HIP_PLATFORM eq "amd") {
$HIPCXXFLAGS .= " -Xclang -fallow-half-arguments-and-returns -D__HIP_HCC_COMPAT_MODE__=1";
}
$HSA_PATH=$ENV{'HSA_PATH'} // "$ROCM_PATH/hsa";
$HIPCXXFLAGS .= " -isystem $HSA_PATH/include";
$HIPCFLAGS .= " -isystem $HSA_PATH/include";
if (not $isWindows) {
$HSA_PATH=$ENV{'HSA_PATH'} // "$ROCM_PATH/hsa";
$HIPCXXFLAGS .= " -isystem $HSA_PATH/include";
$HIPCFLAGS .= " -isystem $HSA_PATH/include";
}
} elsif ($HIP_PLATFORM eq "nvidia") {
$CUDA_PATH=$ENV{'CUDA_PATH'} // '/usr/local/cuda';
@@ -220,8 +221,8 @@ if ($HIP_PLATFORM eq "amd") {
}
# Add paths to common HIP includes:
$HIPCXXFLAGS .= " -isystem $HIP_INCLUDE_PATH" ;
$HIPCFLAGS .= " -isystem $HIP_INCLUDE_PATH" ;
$HIPCXXFLAGS .= " -isystem \"$HIP_INCLUDE_PATH\"" ;
$HIPCFLAGS .= " -isystem \"$HIP_INCLUDE_PATH\"" ;
my $compileOnly = 0;
my $needCXXFLAGS = 0; # need to add CXX flags to compile step
@@ -585,7 +586,7 @@ if($HIP_PLATFORM eq "amd"){
if($default_amdgpu_target eq 1) {
if (defined $ENV{HCC_AMDGPU_TARGET}) {
$targetsStr = $ENV{HCC_AMDGPU_TARGET};
} else {
} elsif (not $isWindows) {
# Else try using rocm_agent_enumerator
$ROCM_AGENT_ENUM = "${ROCM_PATH}/bin/rocm_agent_enumerator";
$targetsStr = `${ROCM_AGENT_ENUM} -t GPU`;
+44 -17
Просмотреть файл
@@ -17,6 +17,7 @@ BEGIN {
use lib "$base_dir/";
use hipvars;
$isWindows = $hipvars::isWindows;
$HIP_RUNTIME = $hipvars::HIP_RUNTIME;
$HIP_PLATFORM = $hipvars::HIP_PLATFORM;
$HIP_COMPILER = $hipvars::HIP_COMPILER;
@@ -44,13 +45,17 @@ GetOptions(
);
if ($HIP_COMPILER eq "clang") {
$HIP_CLANG_VERSION = `$HIP_CLANG_PATH/clang++ --version`;
$HIP_CLANG_VERSION = `\"$HIP_CLANG_PATH/clang++\" --version`;
$HIP_CLANG_VERSION=~/.*clang version (\S+).*/;
$HIP_CLANG_VERSION=$1;
$CPP_CONFIG = " -D__HIP_PLATFORM_HCC__= -D__HIP_PLATFORM_AMD__= -I$HIP_PATH/include -I$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION -I$HSA_PATH/include";
}
$CPP_CONFIG = " -D__HIP_PLATFORM_HCC__= -D__HIP_PLATFORM_AMD__= -I\"$HIP_PATH/include\" -I\"$HIP_CLANG_PATH/../lib/clang/$HIP_CLANG_VERSION\"";
# HIP on Windows does not need HSA_PATH
if (not $isWindows) {
$CPP_CONFIG .= " -I$HSA_PATH/include";
}
}
if ($HIP_PLATFORM eq "nvidia") {
$CPP_CONFIG = " -D__HIP_PLATFORM_NVCC__= -D__HIP_PLATFORM_NVIDIA__= -I$HIP_PATH/include -I$CUDA_PATH/include";
};
@@ -129,16 +134,27 @@ if (!$printed or $p_full) {
if ($HIP_COMPILER eq "clang")
{
print "== hip-clang\n";
print ("HSA_PATH : $HSA_PATH\n");
if (not $isWindows) {
print ("HSA_PATH : $HSA_PATH\n");
}
print ("HIP_CLANG_PATH : $HIP_CLANG_PATH\n");
system("$HIP_CLANG_PATH/clang++ --version");
system("$HIP_CLANG_PATH/llc --version");
print ("hip-clang-cxxflags : ");
system("$HIP_PATH/bin/hipcc --cxxflags");
printf("\n");
print ("hip-clang-ldflags : ");
system("$HIP_PATH/bin/hipcc --ldflags");
printf("\n");
system("\"$HIP_CLANG_PATH/clang++\" --version");
system("\"$HIP_CLANG_PATH/llc\" --version");
if ($isWindows) {
printf("hip-clang-cxxflags : ");
$win_output = `perl \"$HIP_PATH/bin/hipcc\" --cxxflags`;
printf("$win_output \n");
printf("hip-clang-ldflags : ");
$win_output = `perl \"$HIP_PATH/bin/hipcc\" --ldflags`;
printf("$win_output \n");
} else {
print ("hip-clang-cxxflags : ");
system("$HIP_PATH/bin/hipcc --cxxflags");
printf("\n");
print ("hip-clang-ldflags : ");
system("$HIP_PATH/bin/hipcc --ldflags");
printf("\n");
}
} else {
print ("Unexpected HIP_COMPILER: $HIP_COMPILER\n");
}
@@ -153,14 +169,25 @@ if (!$printed or $p_full) {
print "\n" ;
print "=== Environment Variables\n";
system("echo PATH=\$PATH");
system("env | egrep '^HIP|^HSA|^CUDA|^LD_LIBRARY_PATH'");
if ($isWindows) {
print ("PATH=$ENV{PATH}\n");
system("set | findstr /B /C:\"HIP\" /C:\"HSA\" /C:\"CUDA\" /C:\"LD_LIBRARY_PATH\"");
} else {
system("echo PATH=\$PATH");
system("env | egrep '^HIP|^HSA|^CUDA|^LD_LIBRARY_PATH'");
}
print "\n" ;
print "== Linux Kernel\n";
print "Hostname : "; system ("hostname");
system ("uname -a");
if ($isWindows) {
print "== Windows Display Drivers\n";
print "Hostname : "; system ("hostname");
system ("wmic path win32_VideoController get AdapterCompatibility,InstalledDisplayDrivers,Name | findstr /B /C:\"Advanced Micro Devices\"");
} else {
print "== Linux Kernel\n";
print "Hostname : "; system ("hostname");
system ("uname -a");
}
if (-e "/usr/bin/lsb_release") {
system ("/usr/bin/lsb_release -a");
+11 -3
Просмотреть файл
@@ -38,6 +38,8 @@ sub can_run {
}
}
$isWindows = $^O eq 'MSWin32';
#
# TODO: Fix rpath LDFLAGS settings
#
@@ -57,7 +59,13 @@ if (-e "$HIP_PATH/../bin/rocm_agent_enumerator") {
}
$CUDA_PATH=$ENV{'CUDA_PATH'} // '/usr/local/cuda';
$HSA_PATH=$ENV{'HSA_PATH'} // "$ROCM_PATH/hsa";
$HIP_CLANG_PATH=$ENV{'HIP_CLANG_PATH'} // "$ROCM_PATH/llvm/bin";
# Windows has a different structure, all binaries are inside hip/bin
if ($isWindows) {
$HIP_CLANG_PATH=$ENV{'HIP_CLANG_PATH'} // "$HIP_PATH/bin";
} else {
$HIP_CLANG_PATH=$ENV{'HIP_CLANG_PATH'} // "$ROCM_PATH/llvm/bin";
}
# HIP_ROCCLR_HOME is used by Windows builds
$HIP_ROCCLR_HOME=$ENV{'HIP_ROCCLR_HOME'};
@@ -80,7 +88,7 @@ $HIP_RUNTIME = $ENV{'HIP_RUNTIME'} // $hipInfo{'HIP_RUNTIME'} // "rocclr";
if (defined $HIP_RUNTIME and $HIP_RUNTIME eq "rocclr" and !defined $HIP_ROCCLR_HOME) {
my $hipvars_dir = dirname($0);
if (-e "$hipvars_dir/../lib/bitcode") {
$HIP_ROCCLR_HOME = abs_path($hipvars_dir . "/..");
$HIP_ROCCLR_HOME = Cwd::abs_path($hipvars_dir . "/..");
} else {
$HIP_ROCCLR_HOME = $HIP_PATH; # use HIP_PATH
}
@@ -113,4 +121,4 @@ parse_config_file("$hipvars::HIP_PATH/bin/.hipVersion", \%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";
$HIP_VERSION="$HIP_VERSION_MAJOR.$HIP_VERSION_MINOR.$HIP_VERSION_PATCH";