Improve shared and static library support
hipcc accepts new parameter -use-staticlib and -use-sharedlib to control linking behavior. Default is still static library. Change-Id: I28fb9a939f8177c75abefd8b77d8118a6666d1f4
This commit is contained in:
+10
-30
@@ -115,16 +115,6 @@ else()
|
||||
message(FATAL_ERROR "Don't know where to install HIP. Please specify absolute path using -DCMAKE_INSTALL_PREFIX")
|
||||
endif()
|
||||
|
||||
# Set if we need to build shared or static library
|
||||
if(NOT DEFINED HIP_LIB_TYPE)
|
||||
if(NOT DEFINED ENV{HIP_LIB_TYPE})
|
||||
set(HIP_LIB_TYPE 1)
|
||||
else()
|
||||
set(HIP_LIB_TYPE $ENV{HIP_LIB_TYPE})
|
||||
endif()
|
||||
endif()
|
||||
add_to_config(_buildInfo HIP_LIB_TYPE)
|
||||
|
||||
# Check if we need to build hipify-clang
|
||||
if(NOT DEFINED HIPIFY_CLANG_LLVM_DIR)
|
||||
if(DEFINED ENV{HIPIFY_CLANG_LLVM_DIR})
|
||||
@@ -173,7 +163,7 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${HIP_HCC_BUILD_FLAGS}")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${HIP_HCC_BUILD_FLAGS}")
|
||||
|
||||
set(SOURCE_FILES_SHARED
|
||||
set(SOURCE_FILES_RUNTIME
|
||||
src/hip_hcc.cpp
|
||||
src/hip_context.cpp
|
||||
src/hip_device.cpp
|
||||
@@ -184,27 +174,23 @@ if(HIP_PLATFORM STREQUAL "hcc")
|
||||
src/hip_stream.cpp
|
||||
src/hip_module.cpp)
|
||||
|
||||
set(SOURCE_FILES_STATIC
|
||||
set(SOURCE_FILES_DEVICE
|
||||
src/device_util.cpp
|
||||
src/hip_ldg.cpp
|
||||
src/hip_fp16.cpp)
|
||||
|
||||
if(${HIP_LIB_TYPE} EQUAL 0)
|
||||
add_library(hip_hcc OBJECT ${SOURCE_FILES_SHARED} ${SOURCE_FILES_STATIC})
|
||||
elseif(${HIP_LIB_TYPE} EQUAL 1)
|
||||
add_library(hip_hcc STATIC ${SOURCE_FILES_SHARED} ${SOURCE_FILES_STATIC})
|
||||
else()
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L${HCC_HOME}/lib -lmcwamp -Wl,-Bsymbolic")
|
||||
add_library(hip_hcc SHARED ${SOURCE_FILES_SHARED})
|
||||
add_library(hip_device STATIC ${SOURCE_FILES_STATIC})
|
||||
add_dependencies(hip_device hip_hcc)
|
||||
endif()
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -L${HCC_HOME}/lib -lmcwamp -Wl,-Bsymbolic")
|
||||
add_library(hip_hcc SHARED ${SOURCE_FILES_RUNTIME})
|
||||
add_library(hip_hcc_static STATIC ${SOURCE_FILES_RUNTIME})
|
||||
add_dependencies(hip_hcc_static hip_hcc)
|
||||
add_library(hip_device STATIC ${SOURCE_FILES_DEVICE})
|
||||
add_dependencies(hip_device hip_hcc)
|
||||
|
||||
# Generate hcc_version.txt
|
||||
add_custom_target(query_hcc_version COMMAND ${HCC_HOME}/bin/hcc --version > ${PROJECT_BINARY_DIR}/hcc_version.tmp)
|
||||
add_custom_target(check_hcc_version COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_BINARY_DIR}/hcc_version.tmp ${PROJECT_BINARY_DIR}/hcc_version.txt DEPENDS query_hcc_version)
|
||||
set_source_files_properties(${PROJECT_BINARY_DIR}/hcc_version.txt PROPERTIES GENERATED TRUE)
|
||||
set_source_files_properties(${SOURCE_FILES_SHARED} ${SOURCE_FILES_STATIC} PROPERTIES OBJECT_DEPENDS ${PROJECT_BINARY_DIR}/hcc_version.txt)
|
||||
set_source_files_properties(${SOURCE_FILES_RUNTIME} ${SOURCE_FILES_DEVICE} PROPERTIES OBJECT_DEPENDS ${PROJECT_BINARY_DIR}/hcc_version.txt)
|
||||
add_dependencies(hip_hcc check_hcc_version update_build_and_version_info)
|
||||
|
||||
# Generate .hipInfo
|
||||
@@ -223,13 +209,7 @@ add_custom_target(doc COMMAND HIP_PATH=${CMAKE_CURRENT_SOURCE_DIR} doxygen ${CMA
|
||||
#############################
|
||||
# Install hip_hcc if platform is hcc
|
||||
if(HIP_PLATFORM STREQUAL "hcc")
|
||||
if(${HIP_LIB_TYPE} EQUAL 0)
|
||||
install(DIRECTORY ${PROJECT_BINARY_DIR}/CMakeFiles/hip_hcc.dir/src/ DESTINATION lib)
|
||||
elseif(${HIP_LIB_TYPE} EQUAL 1)
|
||||
install(TARGETS hip_hcc DESTINATION lib)
|
||||
else()
|
||||
install(TARGETS hip_hcc hip_device DESTINATION lib)
|
||||
endif()
|
||||
install(TARGETS hip_hcc_static hip_hcc hip_device DESTINATION lib)
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/hip_ir.ll DESTINATION lib)
|
||||
|
||||
# Install .hipInfo
|
||||
|
||||
@@ -193,7 +193,8 @@ my $needHipHcc = ($HIP_PLATFORM eq 'hcc'); # set if we need to link hip_hcc
|
||||
my $printHipVersion = 0; # print HIP version
|
||||
my $runCmd = 1;
|
||||
my $buildDeps = 0;
|
||||
|
||||
my $linkType = 0;
|
||||
my $setLinkType = 0;
|
||||
|
||||
my @options = ();
|
||||
my @inputs = ();
|
||||
@@ -275,11 +276,20 @@ foreach $arg (@ARGV)
|
||||
$compileOnly = 1;
|
||||
$buildDeps = 1;
|
||||
}
|
||||
|
||||
if($arg eq '-use_fast_math') {
|
||||
print "In fast Math";
|
||||
$HIPCXXFLAGS .= " -DHIP_FAST_MATH ";
|
||||
}
|
||||
if(($arg eq '-use-staticlib') and ($setLinkType eq 0))
|
||||
{
|
||||
$linkType = 0;
|
||||
$setLinkType = 1;
|
||||
}
|
||||
if(($arg eq '-use-sharedlib') and ($setLinkType eq 0))
|
||||
{
|
||||
$linkType = 1;
|
||||
$setLinkType = 1;
|
||||
}
|
||||
|
||||
if ($arg =~ m/^-/) {
|
||||
# options start with -
|
||||
@@ -328,13 +338,8 @@ if ($setStdLib eq 0 and $HIP_PLATFORM eq 'hcc')
|
||||
}
|
||||
|
||||
if ($needHipHcc) {
|
||||
$HIP_LIB_TYPE = $hipConfig{'HIP_LIB_TYPE'} // 1;
|
||||
|
||||
# TODO - remove the old sea-of-objects solution:
|
||||
if ($HIP_LIB_TYPE eq 0) {
|
||||
substr($HIPLDFLAGS,0,0) = " $HIP_PATH/lib/device_util.cpp.o $HIP_PATH/lib/hip_device.cpp.o $HIP_PATH/lib/hip_error.cpp.o $HIP_PATH/lib/hip_event.cpp.o $HIP_PATH/lib/hip_hcc.cpp.o $HIP_PATH/lib/hip_memory.cpp.o $HIP_PATH/lib/hip_peer.cpp.o $HIP_PATH/lib/hip_stream.cpp.o $HIP_PATH/lib/hip_ldg.cpp.o $HIP_PATH/lib/hip_fp16.cpp.o $HIP_PATH/lib/hip_context.cpp.o $HIP_PATH/lib/hip_module.cpp.o ";
|
||||
} elsif ($HIP_LIB_TYPE eq 1) {
|
||||
substr($HIPLDFLAGS,0,0) = " -L$HIP_PATH/lib -lhip_hcc " ;
|
||||
if ($linkType eq 0) {
|
||||
substr($HIPLDFLAGS,0,0) = " -L$HIP_PATH/lib -lhip_hcc_static -lhip_device " ;
|
||||
} else {
|
||||
substr($HIPLDFLAGS,0,0) = " -L$HIP_PATH/lib -Wl,--rpath=$HIP_PATH/lib -lhip_hcc -lhip_device ";
|
||||
}
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
cmake_minimum_required(VERSION 2.8.3)
|
||||
project(hip_hcc)
|
||||
|
||||
if(@HIP_LIB_TYPE@ EQUAL 0)
|
||||
install(DIRECTORY @PROJECT_BINARY_DIR@/CMakeFiles/hip_hcc.dir/src/ DESTINATION lib)
|
||||
elseif(@HIP_LIB_TYPE@ EQUAL 1)
|
||||
install(FILES @PROJECT_BINARY_DIR@/libhip_hcc.a DESTINATION lib)
|
||||
else()
|
||||
install(FILES @PROJECT_BINARY_DIR@/libhip_hcc.so DESTINATION lib)
|
||||
install(FILES @PROJECT_BINARY_DIR@/libhip_device.a DESTINATION lib)
|
||||
endif()
|
||||
install(FILES @PROJECT_BINARY_DIR@/libhip_hcc.so DESTINATION lib)
|
||||
install(FILES @PROJECT_BINARY_DIR@/libhip_hcc_static.a DESTINATION lib)
|
||||
install(FILES @PROJECT_BINARY_DIR@/libhip_device.a DESTINATION lib)
|
||||
install(FILES @PROJECT_BINARY_DIR@/.hipInfo DESTINATION lib)
|
||||
install(FILES @hip_SOURCE_DIR@/src/hip_ir.ll DESTINATION lib)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user