diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b95145b96..6f9a819c4d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/bin/hipcc b/bin/hipcc index a384a86fbf..7d2675d0ba 100755 --- a/bin/hipcc +++ b/bin/hipcc @@ -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 "; } diff --git a/packaging/hip_hcc.txt b/packaging/hip_hcc.txt index 78717247f0..00a62ab14c 100644 --- a/packaging/hip_hcc.txt +++ b/packaging/hip_hcc.txt @@ -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)