Skip to content

Commit

Permalink
store output libraries in a single path
Browse files Browse the repository at this point in the history
  • Loading branch information
upsj committed Mar 10, 2021
1 parent 8b17e0a commit 4a1039e
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 79 deletions.
6 changes: 2 additions & 4 deletions .github/workflows/windows-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ jobs:
$env:ChocolateyInstall = Convert-Path "$((Get-Command choco).Path)\..\.."
Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
refreshenv
$env:PATH="$env:PATH;$pwd\build\windows_shared_library"
mkdir build
cd build
cmake -DGINKGO_BUILD_CUDA=ON -DGINKGO_BUILD_OMP=OFF -DGINKGO_CUDA_ARCHITECTURES=60 ..
Expand All @@ -48,7 +47,6 @@ jobs:
- uses: actions/checkout@v2
- name: configure
run: |
$env:PATH="$env:PATH;$pwd\build\windows_shared_library"
mkdir build
cd build
cmake -DCMAKE_CXX_FLAGS_DEBUG="/MDd /Zi /Ob1 /Od /RTC1" -DGINKGO_BUILD_CUDA=OFF -DGINKGO_BUILD_OMP=OFF ..
Expand Down Expand Up @@ -76,7 +74,7 @@ jobs:
bcdedit /set IncreaseUserVa 3072
editbin /LARGEADDRESSAWARE "C:\Program Files\Git\mingw64\bin\cc1plus.exe"
path %PATH:C:\Program Files\Git\bin;=%
path %PATH:C:\Program Files\Git\usr\bin;=%;%GITHUB_WORKSPACE%\build\windows_shared_library
path %PATH:C:\Program Files\Git\usr\bin;=%
mkdir build
cd build
cmake -G "MinGW Makefiles" -DBUILD_SHARED_LIBS=${{ matrix.config.shared }} -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} -DGINKGO_COMPILER_FLAGS=${{ matrix.config.cflags }} ..
Expand Down Expand Up @@ -110,7 +108,7 @@ jobs:
cyg-get cmake make gcc-g++ git
- name: configure
run: |
path C:\tools\cygwin\bin;%GITHUB_WORKSPACE%\build\windows_shared_library
path C:\tools\cygwin\bin
mkdir build
cd build
bash -c "cmake -DBUILD_SHARED_LIBS=${{ matrix.config.shared }} -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} -DGINKGO_COMPILER_FLAGS=${{ matrix.config.cflags }} .."
Expand Down
15 changes: 2 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ if (MINGW OR CYGWIN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj")
endif()

set(GINKGO_LIBRARY_PATH "${PROJECT_BINARY_DIR}/lib")

# Ginkgo configuration options
option(GINKGO_DEVEL_TOOLS "Add development tools to the build system" OFF)
option(GINKGO_BUILD_TESTS "Generate build files for unit tests" ON)
Expand Down Expand Up @@ -91,19 +93,6 @@ if(GINKGO_BENCHMARK_ENABLE_TUNING)
set(GINKGO_BUILD_EXAMPLES OFF)
endif()

if(BUILD_SHARED_LIBS AND (WIN32 OR CYGWIN) AND (GINKGO_BUILD_TESTS OR GINKGO_BUILD_EXAMPLES OR GINKGO_BUILD_BENCHMARKS))
# Change shared libraries output only if this build has executable program
# with shared libraries.
set(GINKGO_CHANGED_SHARED_LIBRARY TRUE)
option(GINKGO_CHECK_PATH "Tell Ginkgo to check if the environment variable PATH is available for this build." ON)
set(GINKGO_WINDOWS_SHARED_LIBRARY_RELPATH "windows_shared_library" CACHE STRING
"Set Ginkgo's shared library relative path in windows. Current default is `windows_shared_library`. \
This absolute path ${PROJECT_BINARY_DIR}/GINKGO_WINDOWS_SHARED_LIBRARY_RELPATH must be in the environment variable PATH.")
set(GINKGO_WINDOWS_SHARED_LIBRARY_PATH ${PROJECT_BINARY_DIR}/${GINKGO_WINDOWS_SHARED_LIBRARY_RELPATH})
else()
set(GINKGO_CHANGED_SHARED_LIBRARY FALSE)
endif()

if(GINKGO_BUILD_TESTS AND (GINKGO_BUILD_CUDA OR GINKGO_BUILD_OMP OR GINKGO_BUILD_HIP OR GINKGO_BUILD_DPCPP))
message(STATUS "GINKGO_BUILD_TESTS is ON, enabling GINKGO_BUILD_REFERENCE")
set(GINKGO_BUILD_REFERENCE ON CACHE BOOL "Compile reference CPU kernels" FORCE)
Expand Down
59 changes: 5 additions & 54 deletions cmake/build_helpers.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -26,26 +26,11 @@ function(ginkgo_compile_features name)
# Set an appropriate SONAME
set_property(TARGET "${name}" PROPERTY
SOVERSION "${Ginkgo_VERSION}")
if(GINKGO_CHANGED_SHARED_LIBRARY)
# Put all shared libraries and corresponding imported libraries into the specified path
set_property(TARGET "${name}" PROPERTY
RUNTIME_OUTPUT_DIRECTORY "${GINKGO_WINDOWS_SHARED_LIBRARY_PATH}")
set_property(TARGET "${name}" PROPERTY
ARCHIVE_OUTPUT_DIRECTORY "${GINKGO_WINDOWS_SHARED_LIBRARY_PATH}")
if(MSVC)
# MSVC would create subfolder according to build_type. Ginkgo forces the output be the same whatever build_type is.
foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES})
string(TOUPPER ${CONFIG} CONFIG )
set_property(TARGET "${name}" PROPERTY
RUNTIME_OUTPUT_DIRECTORY_${CONFIG} "${GINKGO_WINDOWS_SHARED_LIBRARY_PATH}")
set_property(TARGET "${name}" PROPERTY
ARCHIVE_OUTPUT_DIRECTORY_${CONFIG} "${GINKGO_WINDOWS_SHARED_LIBRARY_PATH}")
endforeach()
endif()
if(GINKGO_CHECK_PATH)
ginkgo_check_shared_library("${CMAKE_SHARED_LIBRARY_PREFIX}${name}${CMAKE_SHARED_LIBRARY_SUFFIX}")
endif()
endif()
# Put all shared libraries and corresponding imported libraries into the specified path
set_property(TARGET "${name}" PROPERTY
RUNTIME_OUTPUT_DIRECTORY "${GINKGO_LIBRARY_PATH}")
set_property(TARGET "${name}" PROPERTY
ARCHIVE_OUTPUT_DIRECTORY "${GINKGO_LIBRARY_PATH}")

if (GINKGO_CHECK_CIRCULAR_DEPS)
target_link_libraries("${name}" PRIVATE "${GINKGO_CIRCULAR_DEPS_FLAGS}")
Expand Down Expand Up @@ -104,40 +89,6 @@ function(ginkgo_check_headers target)
endif()
endfunction()

function(ginkgo_check_shared_library name)
# Cygwin uses : not ; to split path
if(CYGWIN)
string(REPLACE ":" ";" ENV_PATH "$ENV{PATH}")
else()
set(ENV_PATH "$ENV{PATH}")
endif()
set(PATH_LIST ${ENV_PATH})
set(PASSED_TEST FALSE)
foreach(ITEM IN LISTS PATH_LIST)
string(REPLACE "\\" "/" ITEM "${ITEM}")
if("${ITEM}" STREQUAL "${GINKGO_WINDOWS_SHARED_LIBRARY_PATH}")
set(PASSED_TEST TRUE)
break()
else()
# If any path before this build, the path must not contain the ginkgo shared library
find_file(EXISTING_DLL "${name}" PATHS "${ITEM}" NO_DEFAULT_PATH)
if(NOT "${EXISTING_DLL}" STREQUAL "EXISTING_DLL-NOTFOUND")
# clean the EXISTING_DLL before termination
unset(EXISTING_DLL CACHE)
message(FATAL_ERROR "Detect ${name} in ${ITEM} eariler than this build. "
"Please add ${GINKGO_WINDOWS_SHARED_LIBRARY_PATH} before other ginkgo path.")
endif()
# do not keep this variable in cache
unset(EXISTING_DLL CACHE)
endif()
endforeach()
if(NOT PASSED_TEST)
# Did not find this build in the environment variable PATH
message(FATAL_ERROR "Did not find this build in the environment variable PATH. "
"Please add ${GINKGO_WINDOWS_SHARED_LIBRARY_PATH} into the environment variable PATH.")
endif()
endfunction()

macro(ginkgo_modify_flags name)
# add escape before "
# the result var is ${name}_MODIFY
Expand Down
28 changes: 21 additions & 7 deletions cmake/create_test.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ function(ginkgo_create_test test_name)
target_link_libraries(${TEST_TARGET_NAME} PRIVATE "${GINKGO_CIRCULAR_DEPS_FLAGS}")
endif()
target_link_libraries(${TEST_TARGET_NAME} PRIVATE ginkgo GTest::Main GTest::GTest ${ARGN})
add_test(NAME ${REL_BINARY_DIR}/${test_name} COMMAND ${TEST_TARGET_NAME})
add_test(NAME ${REL_BINARY_DIR}/${test_name}
COMMAND ${TEST_TARGET_NAME}
WORKING_DIRECTORY "$<TARGET_FILE_DIR:ginkgo>")
endfunction(ginkgo_create_test)

function(ginkgo_create_dpcpp_test test_name)
Expand All @@ -34,7 +36,9 @@ function(ginkgo_create_dpcpp_test test_name)
target_link_libraries(${TEST_TARGET_NAME} PRIVATE "${GINKGO_CIRCULAR_DEPS_FLAGS}")
endif()
target_link_libraries(${TEST_TARGET_NAME} PRIVATE ginkgo GTest::Main GTest::GTest ${ARGN})
add_test(NAME ${REL_BINARY_DIR}/${test_name} COMMAND ${TEST_TARGET_NAME})
add_test(NAME ${REL_BINARY_DIR}/${test_name}
COMMAND ${TEST_TARGET_NAME}
WORKING_DIRECTORY "$<TARGET_FILE_DIR:ginkgo>")
endfunction(ginkgo_create_dpcpp_test)

function(ginkgo_create_thread_test test_name)
Expand All @@ -56,7 +60,9 @@ function(ginkgo_create_thread_test test_name)
endif()
target_link_libraries(${TEST_TARGET_NAME} PRIVATE ginkgo GTest::Main GTest::GTest
Threads::Threads ${ARGN})
add_test(NAME ${REL_BINARY_DIR}/${test_name} COMMAND ${TEST_TARGET_NAME})
add_test(NAME ${REL_BINARY_DIR}/${test_name}
COMMAND ${TEST_TARGET_NAME}
WORKING_DIRECTORY "$<TARGET_FILE_DIR:ginkgo>")
endfunction(ginkgo_create_thread_test)

function(ginkgo_create_test_cpp_cuda_header test_name)
Expand All @@ -76,7 +82,9 @@ function(ginkgo_create_test_cpp_cuda_header test_name)
target_link_libraries(${TEST_TARGET_NAME} PRIVATE "${GINKGO_CIRCULAR_DEPS_FLAGS}")
endif()
target_link_libraries(${TEST_TARGET_NAME} PRIVATE ginkgo GTest::Main GTest::GTest ${ARGN})
add_test(NAME ${REL_BINARY_DIR}/${test_name} COMMAND ${TEST_TARGET_NAME})
add_test(NAME ${REL_BINARY_DIR}/${test_name}
COMMAND ${TEST_TARGET_NAME}
WORKING_DIRECTORY "$<TARGET_FILE_DIR:ginkgo>")
endfunction(ginkgo_create_test_cpp_cuda_header)

function(ginkgo_create_cuda_test test_name)
Expand All @@ -98,7 +106,9 @@ function(ginkgo_create_cuda_test test_name)
target_link_libraries(${TEST_TARGET_NAME} PRIVATE "${GINKGO_CIRCULAR_DEPS_FLAGS}")
endif()
target_link_libraries(${TEST_TARGET_NAME} PRIVATE ginkgo GTest::Main GTest::GTest ${ARGN})
add_test(NAME ${REL_BINARY_DIR}/${test_name} COMMAND ${TEST_TARGET_NAME})
add_test(NAME ${REL_BINARY_DIR}/${test_name}
COMMAND ${TEST_TARGET_NAME}
WORKING_DIRECTORY "$<TARGET_FILE_DIR:ginkgo>")
endfunction(ginkgo_create_cuda_test)

function(ginkgo_create_hip_test_special_linkage test_name)
Expand All @@ -122,7 +132,9 @@ function(ginkgo_create_hip_test_special_linkage test_name)
target_link_libraries(${TEST_TARGET_NAME} PRIVATE "${GINKGO_CIRCULAR_DEPS_FLAGS}")
endif()
target_link_libraries(${TEST_TARGET_NAME} PRIVATE ginkgo GTest::Main GTest::GTest ${ARGN})
add_test(NAME ${REL_BINARY_DIR}/${test_name} COMMAND ${TEST_TARGET_NAME})
add_test(NAME ${REL_BINARY_DIR}/${test_name}
COMMAND ${TEST_TARGET_NAME}
WORKING_DIRECTORY "$<TARGET_FILE_DIR:ginkgo>")
endfunction(ginkgo_create_hip_test_special_linkage)

function(ginkgo_create_hip_test test_name)
Expand Down Expand Up @@ -184,5 +196,7 @@ function(ginkgo_create_hip_test test_name)
endif()

target_link_libraries(${TEST_TARGET_NAME} PRIVATE ginkgo GTest::Main GTest::GTest ${ARGN})
add_test(NAME ${REL_BINARY_DIR}/${test_name} COMMAND ${TEST_TARGET_NAME})
add_test(NAME ${REL_BINARY_DIR}/${test_name}
COMMAND ${TEST_TARGET_NAME}
WORKING_DIRECTORY "$<TARGET_FILE_DIR:ginkgo>")
endfunction(ginkgo_create_hip_test)
2 changes: 1 addition & 1 deletion cmake/get_info.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ foreach(log_type ${log_types})
ginkgo_print_module_footer(${${log_type}} " Developer helpers:")
ginkgo_print_foreach_variable(${${log_type}}
"GINKGO_DEVEL_TOOLS;GINKGO_WITH_CLANG_TIDY;GINKGO_WITH_IWYU"
"GINKGO_CHECK_CIRCULAR_DEPS;GINKGO_CHECK_PATH")
"GINKGO_CHECK_CIRCULAR_DEPS")
ginkgo_print_module_footer(${${log_type}} "")
endforeach()

Expand Down

0 comments on commit 4a1039e

Please sign in to comment.