From 35af9f2c258303162644d57590b3248f0f2b12ff Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Thu, 3 Feb 2022 14:02:18 -0600 Subject: [PATCH 01/10] Use -t flag for Cython to reuse CXX files is PYX did not change --- dpctl/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dpctl/CMakeLists.txt b/dpctl/CMakeLists.txt index 3ca3c9a79d..14f9b7d38a 100644 --- a/dpctl/CMakeLists.txt +++ b/dpctl/CMakeLists.txt @@ -2,7 +2,7 @@ find_package(PythonExtensions REQUIRED) find_package(NumPy REQUIRED) -set(CYTHON_FLAGS "-w ${CMAKE_SOURCE_DIR}") +set(CYTHON_FLAGS "-t -w ${CMAKE_SOURCE_DIR}") find_package(Cython REQUIRED) if(WIN32) From 5e26e5d76eb26bce02f874328a68d0b64620b1d0 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Thu, 3 Feb 2022 14:02:56 -0600 Subject: [PATCH 02/10] Drop use of COMPONENT in install commands --- CMakeLists.txt | 1 - libsyclinterface/CMakeLists.txt | 2 -- 2 files changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8aff7d1d70..858c83c5fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,6 @@ add_subdirectory(libsyclinterface) file(GLOB _dpctl_capi_headers dpctl/apis/include/*.h*) install(FILES ${_dpctl_capi_headers} DESTINATION dpctl/include - COMPONENT DpctlCAPIHeaders ) add_subdirectory(dpctl) diff --git a/libsyclinterface/CMakeLists.txt b/libsyclinterface/CMakeLists.txt index a6c73f3878..e63c992acb 100644 --- a/libsyclinterface/CMakeLists.txt +++ b/libsyclinterface/CMakeLists.txt @@ -241,12 +241,10 @@ install(TARGETS install( FILES ${SUPPORT_HEADERS} DESTINATION ${_include_destination}/Support - COMPONENT SupportHeaders ) install( FILES ${CONFIG_HEADERS} DESTINATION ${_include_destination}/Config - COMPONENT ConfigHeaders ) # Enable code coverage related settings From db6b9533973707c33b0cc7187c1bc9131da6ed32 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Thu, 3 Feb 2022 15:49:38 -0600 Subject: [PATCH 03/10] Include all headers in PUBLIC_HEADER property of the library --- libsyclinterface/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libsyclinterface/CMakeLists.txt b/libsyclinterface/CMakeLists.txt index e63c992acb..6beed813a8 100644 --- a/libsyclinterface/CMakeLists.txt +++ b/libsyclinterface/CMakeLists.txt @@ -214,9 +214,13 @@ file(GLOB MAIN_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h") file(GLOB SUPPORT_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/Support/*.h") file(GLOB CONFIG_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/Config/*.h") +set(ALL_HEADERS "${MAIN_HEADERS}") +list(APPEND ALL_HEADERS "${SUPPORT_HEADERS}") +list(APPEND ALL_HEADERS "${CONFIG_HEADERS}") + set_target_properties(DPCTLSyclInterface PROPERTIES PUBLIC_HEADER - "${MAIN_HEADERS}" + "${ALL_HEADERS}" ) if (SKBUILD) From dff9c439c2e976f26a84522068d71118903aef1a Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Thu, 3 Feb 2022 19:08:20 -0600 Subject: [PATCH 04/10] Change the CMake script that for copying header files to dpctl/include Instead of using add_custom_command for a TARGET which does not specify the required PRE_BUILD/PRE_LINK/POST_LINK argument, use add_custom_command with OUTPUT to perform the copy, record files coped and create a custom target that depend on those. All Cython files then depend on that target. --- dpctl/CMakeLists.txt | 49 ++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/dpctl/CMakeLists.txt b/dpctl/CMakeLists.txt index 14f9b7d38a..541ef7d5e8 100644 --- a/dpctl/CMakeLists.txt +++ b/dpctl/CMakeLists.txt @@ -78,41 +78,64 @@ add_custom_target(_build_time_create_dpctl_include ALL DEPENDS DPCTLSyclInterface ) +set(_copied_header_files) file(GLOB _syclinterface_h ${CMAKE_SOURCE_DIR}/libsyclinterface/include/*.h) foreach(hf ${_syclinterface_h}) - add_custom_command(TARGET _build_time_create_dpctl_include - COMMAND ${CMAKE_COMMAND} -E copy ${hf} ${DPCTL_INCLUDE_DIR}/syclinterface - ) + get_filename_component(_header_name ${hf} NAME) + set(_target_header_file ${DPCTL_INCLUDE_DIR}/syclinterface/${_header_name}) + list(APPEND _copied_header_files ${_target_header_file}) + add_custom_command(OUTPUT ${_target_header_file} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${hf} ${_target_header_file} + DEPENDS ${hf} _build_time_create_dpctl_include + VERBATIM + ) endforeach() file(GLOB _syclinterface_Support_h ${CMAKE_SOURCE_DIR}/libsyclinterface/include/Support/*.h) foreach(hf ${_syclinterface_Support_h}) - add_custom_command(TARGET _build_time_create_dpctl_include - COMMAND ${CMAKE_COMMAND} -E copy ${hf} ${DPCTL_INCLUDE_DIR}/syclinterface/Support - ) + get_filename_component(_header_name ${hf} NAME) + set(_target_header_file ${DPCTL_INCLUDE_DIR}/syclinterface/Support/${_header_name}) + list(APPEND _copied_header_files ${_target_header_file}) + add_custom_command(OUTPUT ${_target_header_file} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${hf} ${_target_header_file} + DEPENDS ${hf} _build_time_create_dpctl_include + ) endforeach() file(GLOB _syclinterface_Config_h ${CMAKE_SOURCE_DIR}/libsyclinterface/include/Config/*.h) foreach(hf ${_syclinterface_Config_h}) - add_custom_command(TARGET _build_time_create_dpctl_include - COMMAND ${CMAKE_COMMAND} -E copy ${hf} ${DPCTL_INCLUDE_DIR}/syclinterface/Config - ) + get_filename_component(_header_name ${hf} NAME) + set(_target_header_file ${DPCTL_INCLUDE_DIR}/syclinterface/Config/${_header_name}) + list(APPEND _copied_header_files ${_target_header_file}) + add_custom_command(OUTPUT ${_target_header_file} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${hf} ${_target_header_file} + DEPENDS ${hf} _build_time_create_dpctl_include + ) endforeach() file(GLOB _apis_h ${CMAKE_CURRENT_SOURCE_DIR}/apis/include/*) foreach(hf ${_apis_h}) - add_custom_command(TARGET _build_time_create_dpctl_include - COMMAND ${CMAKE_COMMAND} -E copy ${hf} ${DPCTL_INCLUDE_DIR} - ) + get_filename_component(_header_name ${hf} NAME) + set(_target_header_file ${DPCTL_INCLUDE_DIR}/${_header_name}) + list(APPEND _copied_header_files ${_target_header_file}) + add_custom_command(OUTPUT ${_target_header_file} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${hf} ${_target_header_file} + DEPENDS ${hf} _build_time_create_dpctl_include + ) endforeach() +add_custom_target( + _build_time_create_dpctl_include_copy ALL + DEPENDS ${_copied_header_files} +) + set(CMAKE_INSTALL_RPATH "$ORIGIN") function(build_dpctl_ext _trgt _src _dest) add_cython_target(${_trgt} ${_src} CXX OUTPUT_VAR _generated_src) add_library(${_trgt} MODULE ${_generated_src}) target_include_directories(${_trgt} PRIVATE ${NumPy_INCLUDE_DIR} ${DPCTL_INCLUDE_DIR}) - add_dependencies(${_trgt} _build_time_create_dpctl_include) + add_dependencies(${_trgt} _build_time_create_dpctl_include_copy) if (DPCTL_GENERATE_COVERAGE) target_compile_definitions(${_trgt} PRIVATE CYTHON_TRACE=1 CYTHON_TRACE_NOGIL=1) target_compile_options(${_trgt} PRIVATE -fno-sycl-use-footer) From 524c3da1964b5205368b10d2d5bad6315dfd3712 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Thu, 3 Feb 2022 19:13:10 -0600 Subject: [PATCH 05/10] Use Ninja generated for Linux as well --- scripts/build_locally.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build_locally.py b/scripts/build_locally.py index 19b811f376..acd1a4a6a0 100644 --- a/scripts/build_locally.py +++ b/scripts/build_locally.py @@ -32,7 +32,7 @@ def run( build_system = None if "linux" in sys.platform: - build_system = "Unix Makefiles" + build_system = "Ninja" elif sys.platform in ["win32", "cygwin"]: build_system = "Ninja" else: From acb158ef69f5763cbe1c0d5d354933361c765415 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Thu, 3 Feb 2022 19:21:37 -0600 Subject: [PATCH 06/10] Use Ninja generator on both Linux and Windows Ninja parallalizes the build and hence works faster to build the project, it also does not have the bug that make has cause it to unconditionally recompile and relink extension libraries saving significant iterative development time. --- .github/workflows/generate-coverage.yaml | 10 ++++++---- .github/workflows/generate-docs.yml | 6 +++--- .github/workflows/os-llvm-sycl-build.yml | 4 ++-- conda-recipe/build.sh | 2 +- conda-recipe/meta.yaml | 3 +-- docs/docfiles/user_guides/QuickStart.rst | 10 +++++----- scripts/gen_coverage.py | 2 +- scripts/gen_docs.py | 2 +- 8 files changed, 20 insertions(+), 19 deletions(-) diff --git a/.github/workflows/generate-coverage.yaml b/.github/workflows/generate-coverage.yaml index d21da02645..89234307b3 100644 --- a/.github/workflows/generate-coverage.yaml +++ b/.github/workflows/generate-coverage.yaml @@ -32,9 +32,9 @@ jobs: sudo apt-get install intel-oneapi-compiler-dpcpp-cpp sudo apt-get install intel-oneapi-tbb - - name: Install CMake + - name: Install CMake and Ninja run: | - sudo apt-get install cmake + sudo apt-get install cmake ninja-build - name: Setup Python uses: actions/setup-python@v2 @@ -87,8 +87,10 @@ jobs: source /opt/intel/oneapi/setvars.sh export _SAVED_PATH=${PATH} export PATH=$(dirname $(dirname $(which icx)))/bin-llvm:${PATH} - python setup.py develop -- -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icpx -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON -DDPCTL_GENERATE_COVERAGE=ON -DDPCTL_BUILD_CAPI_TESTS=ON -DDPCTL_COVERAGE_REPORT_OUTPUT_DIR=$(pwd) - make -C $(find _skbuild -name tests) lcov-genhtml + python setup.py develop -- -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icpx -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON -DDPCTL_GENERATE_COVERAGE=ON -DDPCTL_BUILD_CAPI_TESTS=ON -DDPCTL_COVERAGE_REPORT_OUTPUT_DIR=$(pwd) + pushd $(find _skbuild -name tests) + cmake --build . --target lcov-genhtml || exit 1 + popd export PATH=${_SAVED_PATH} unset _SAVED_PATH python -c "import dpctl; print(dpctl.__version__); dpctl.lsplatform()" || exit 1 diff --git a/.github/workflows/generate-docs.yml b/.github/workflows/generate-docs.yml index 39bbf2e26a..adf8717192 100644 --- a/.github/workflows/generate-docs.yml +++ b/.github/workflows/generate-docs.yml @@ -35,10 +35,10 @@ jobs: if: ${{ !github.event.pull_request || github.event.action != 'closed' }} run: | sudo apt-get install doxygen - - name: Install CMake + - name: Install CMake and Ninja if: ${{ !github.event.pull_request || github.event.action != 'closed' }} run: | - sudo apt-get install cmake + sudo apt-get install cmake ninja-build - name: Setup Python if: ${{ !github.event.pull_request || github.event.action != 'closed' }} uses: actions/setup-python@v2 @@ -64,7 +64,7 @@ jobs: wget https://github.com/vovkos/doxyrest/releases/download/doxyrest-2.1.2/doxyrest-2.1.2-linux-amd64.tar.xz tar xf doxyrest-2.1.2-linux-amd64.tar.xz python setup.py develop -- \ - -G "Unix Makefiles" \ + -G "Ninja" \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_C_COMPILER:PATH=icx \ -DCMAKE_CXX_COMPILER:PATH=icpx \ diff --git a/.github/workflows/os-llvm-sycl-build.yml b/.github/workflows/os-llvm-sycl-build.yml index 8268bd0683..c1c0329db7 100644 --- a/.github/workflows/os-llvm-sycl-build.yml +++ b/.github/workflows/os-llvm-sycl-build.yml @@ -68,7 +68,7 @@ jobs: - name: Install system components shell: bash -l {0} run: | - sudo apt-get install cmake libtinfo5 + sudo apt-get install cmake ninja-build libtinfo5 - name: Setup Python uses: actions/setup-python@v2 @@ -97,6 +97,6 @@ jobs: export OCL_ICD_FILENAMES=libintelocl.so:libintelocl_emu.so clang++ --version sycl-ls - python setup.py develop -- -G "Unix Makefiles" -DCMAKE_C_COMPILER:PATH=clang -DCMAKE_CXX_COMPILER:PATH=clang++ -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON -DDPCTL_DPCPP_HOME_DIR=$(dirname $(dirname $(which clang))) -DDPCTL_DPCPP_FROM_ONEAPI=OFF + python setup.py develop -- -G Ninja -DCMAKE_C_COMPILER:PATH=clang -DCMAKE_CXX_COMPILER:PATH=clang++ -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON -DDPCTL_DPCPP_HOME_DIR=$(dirname $(dirname $(which clang))) -DDPCTL_DPCPP_FROM_ONEAPI=OFF python -c "import dpctl; dpctl.lsplatform()" || exit 1 SYCL_ENABLE_HOST_DEVICE=1 python -m pytest -v dpctl/tests diff --git a/conda-recipe/build.sh b/conda-recipe/build.sh index 9d581001fe..5bc85e861e 100755 --- a/conda-recipe/build.sh +++ b/conda-recipe/build.sh @@ -6,7 +6,7 @@ export LDFLAGS="$LDFLAGS -Wl,-rpath,$PREFIX/lib" ${PYTHON} setup.py clean --all -export CMAKE_GENERATOR="Unix Makefiles" +export CMAKE_GENERATOR="Ninja" SKBUILD_ARGS="-- -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icpx -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON -DDPCTL_DPCPP_HOME_DIR=${BUILD_PREFIX}" echo "${PYTHON} setup.py install ${SKBUILD_ARGS}" diff --git a/conda-recipe/meta.yaml b/conda-recipe/meta.yaml index c3087c303a..27322b0030 100644 --- a/conda-recipe/meta.yaml +++ b/conda-recipe/meta.yaml @@ -20,8 +20,7 @@ requirements: - cython - cmake >=3.21 - python - - make # [unix] - - ninja # [win] + - ninja - scikit-build - numpy 1.19 - wheel diff --git a/docs/docfiles/user_guides/QuickStart.rst b/docs/docfiles/user_guides/QuickStart.rst index 8c58acd15a..94b4953ca3 100644 --- a/docs/docfiles/user_guides/QuickStart.rst +++ b/docs/docfiles/user_guides/QuickStart.rst @@ -143,7 +143,7 @@ installed: - ``numpy`` - ``cmake`` - ``scikit-build`` - - ``ninja`` (only on Windows) + - ``ninja`` - ``gtest`` (optional to run C API tests) - ``gmock`` (optional to run C API tests) - ``pytest`` (optional to run Python API tests) @@ -152,15 +152,15 @@ Once the prerequisites are installed, building using ``scikit-build`` involves t .. code-block:: bash - python setup.py install -- -G Unix\ Makefiles -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icpx -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON + python setup.py install -- -G Ninja -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icpx -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON , and to develop: .. code-block:: bash - python setup.py develop -G Unix\ Makefiles -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icpx -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON + python setup.py develop -G Ninja -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icpx -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON -On Windows, use ``icx`` for both C and CXX compilers, and use :code:`-G Ninja` for cmake generator. +On Windows, use ``icx`` for both C and CXX compilers. Developing on Linux can also be done using driver script: @@ -180,7 +180,7 @@ Following steps in `Build and install with scikit-build`_ use command line optio .. code-block:: bash - python setup.py develop -- -G Unix\ Makefiles -DCMAKE_C_COMPILER:PATH=clang -DCMAKE_CXX_COMPILER:PATH=clang++ -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ONE -DDPCTL_DPCPP_HOME_DIR=${DPCPP_ROOT}/llvm/build -DDPCTL_DPCPP_FROM_ONEAPI=OFF + python setup.py develop -- -G Ninja -DCMAKE_C_COMPILER:PATH=clang -DCMAKE_CXX_COMPILER:PATH=clang++ -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ONE -DDPCTL_DPCPP_HOME_DIR=${DPCPP_ROOT}/llvm/build -DDPCTL_DPCPP_FROM_ONEAPI=OFF Alterantively, the driver script can be used diff --git a/scripts/gen_coverage.py b/scripts/gen_coverage.py index 43cffd1cd9..2e62727587 100644 --- a/scripts/gen_coverage.py +++ b/scripts/gen_coverage.py @@ -48,7 +48,7 @@ def run( "develop", "--", "-G", - "Unix Makefiles", + "Ninja", "-DCMAKE_BUILD_TYPE=Debug", "-DCMAKE_C_COMPILER:PATH=" + c_compiler, "-DCMAKE_CXX_COMPILER:PATH=" + cxx_compiler, diff --git a/scripts/gen_docs.py b/scripts/gen_docs.py index 9b5435c475..087bb32230 100644 --- a/scripts/gen_docs.py +++ b/scripts/gen_docs.py @@ -48,7 +48,7 @@ def run( "develop", "--", "-G", - "Unix Makefiles", + "Ninja", "-DCMAKE_BUILD_TYPE=Debug", "-DCMAKE_C_COMPILER:PATH=" + c_compiler, "-DCMAKE_CXX_COMPILER:PATH=" + cxx_compiler, From 8311e08beaa2b911359f8a390dce95a10bbaa117 Mon Sep 17 00:00:00 2001 From: Diptorup Deb Date: Fri, 4 Feb 2022 01:21:57 -0600 Subject: [PATCH 07/10] Improvements to gen_coverage.py helper script. -- Add an option to specify custom gtest installation. -- FindLLVMCov offers a way to specify where to look for llvm-cov. If `bin-llvm` is provided, set the `LLVM_TOOL_DIR` envar as well to help FindLLVMCov. Otherwise, just adding to PATH is not enough. -- Some formatting fixes to coverage workflow. --- .github/workflows/generate-coverage.yaml | 10 +++++++++- scripts/gen_coverage.py | 19 +++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/.github/workflows/generate-coverage.yaml b/.github/workflows/generate-coverage.yaml index 89234307b3..8ef77e3436 100644 --- a/.github/workflows/generate-coverage.yaml +++ b/.github/workflows/generate-coverage.yaml @@ -87,7 +87,15 @@ jobs: source /opt/intel/oneapi/setvars.sh export _SAVED_PATH=${PATH} export PATH=$(dirname $(dirname $(which icx)))/bin-llvm:${PATH} - python setup.py develop -- -G "Ninja" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER:PATH=icx -DCMAKE_CXX_COMPILER:PATH=icpx -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON -DDPCTL_GENERATE_COVERAGE=ON -DDPCTL_BUILD_CAPI_TESTS=ON -DDPCTL_COVERAGE_REPORT_OUTPUT_DIR=$(pwd) + python setup.py develop -- \ + -G "Ninja" \ + -DCMAKE_BUILD_TYPE=Debug \ + -DCMAKE_C_COMPILER:PATH=icx \ + -DCMAKE_CXX_COMPILER:PATH=icpx \ + -DDPCTL_ENABLE_LO_PROGRAM_CREATION=ON \ + -DDPCTL_GENERATE_COVERAGE=ON \ + -DDPCTL_BUILD_CAPI_TESTS=ON \ + -DDPCTL_COVERAGE_REPORT_OUTPUT_DIR=$(pwd) pushd $(find _skbuild -name tests) cmake --build . --target lcov-genhtml || exit 1 popd diff --git a/scripts/gen_coverage.py b/scripts/gen_coverage.py index 2e62727587..7f8b357bae 100644 --- a/scripts/gen_coverage.py +++ b/scripts/gen_coverage.py @@ -27,6 +27,7 @@ def run( compiler_root=None, run_pytest=False, bin_llvm=None, + gtest_config=None, ): IS_LIN = False @@ -66,18 +67,14 @@ def run( if bin_llvm: env = { "PATH": ":".join((os.environ.get("PATH", ""), bin_llvm)), + "LLVM_TOOLS_HOME": bin_llvm, } env.update({k: v for k, v in os.environ.items() if k != "PATH"}) + if gtest_config: + cmake_args += ["-DCMAKE_PREFIX_PATH=" + gtest_config] subprocess.check_call(cmake_args, shell=False, cwd=setup_dir, env=env) - test_dir = ( - subprocess.check_output( - ["find", "_skbuild", "-name", "tests"], cwd=setup_dir - ) - .decode("utf-8") - .strip("\n") - ) subprocess.check_call( - ["make", "-C", test_dir, "lcov-genhtml"], cwd=setup_dir + ["cmake", "--build", ".", "--target", "lcov-genhtml"], cwd=setup_dir ) subprocess.check_call( [ @@ -135,6 +132,11 @@ def run( driver.add_argument( "--bin-llvm", help="Path to folder where llvm-cov can be found" ) + driver.add_argument( + "--gtest-config", + help="Path to the GTestConfig.cmake file to locate a " + + "custom GTest installation.", + ) args = parser.parse_args() if args.oneapi: @@ -170,4 +172,5 @@ def run( compiler_root=args.compiler_root, run_pytest=args.run_pytest, bin_llvm=args.bin_llvm, + gtest_config=args.gtest_config, ) From 15477c66b02b3045b1328a87915d3b071e3f2370 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Fri, 4 Feb 2022 05:04:44 -0600 Subject: [PATCH 08/10] Use DEPENDS arg of add_custom_target rather than CMAKE_MAKE_EXECUTABLE to implement dependency --- libsyclinterface/tests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libsyclinterface/tests/CMakeLists.txt b/libsyclinterface/tests/CMakeLists.txt index dc180ec70d..36037b1d4b 100644 --- a/libsyclinterface/tests/CMakeLists.txt +++ b/libsyclinterface/tests/CMakeLists.txt @@ -61,7 +61,6 @@ if(DPCTL_GENERATE_COVERAGE) ${CMAKE_DL_LIBS} ) add_custom_target(llvm-cov - COMMAND ${CMAKE_MAKE_PROGRAM} dpctl_c_api_tests COMMAND ${CMAKE_COMMAND} -E env DPCTL_VERBOSITY=warning ${CMAKE_CURRENT_BINARY_DIR}/dpctl_c_api_tests COMMAND ${LLVMProfdata_EXE} merge @@ -75,10 +74,10 @@ if(DPCTL_GENERATE_COVERAGE) ${dpctl_sources} ${helper_sources} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS dpctl_c_api_tests ) add_custom_target(lcov-genhtml - COMMAND ${CMAKE_MAKE_PROGRAM} llvm-cov COMMAND ${LLVMCov_EXE} export -format=lcov @@ -91,6 +90,7 @@ if(DPCTL_GENERATE_COVERAGE) --output-directory ${COVERAGE_OUTPUT_DIR}/dpctl-c-api-coverage WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + DEPENDS llvm-cov ) else() file(GLOB_RECURSE sources ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) From c24d096f409bd221357eb0973cd4937ec0f51fd9 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Fri, 4 Feb 2022 05:05:55 -0600 Subject: [PATCH 09/10] cmake --build . --target lcov-genhtml must be run from cmake-build folder --- .github/workflows/generate-coverage.yaml | 2 +- scripts/gen_coverage.py | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/generate-coverage.yaml b/.github/workflows/generate-coverage.yaml index 8ef77e3436..b03c9fd031 100644 --- a/.github/workflows/generate-coverage.yaml +++ b/.github/workflows/generate-coverage.yaml @@ -96,7 +96,7 @@ jobs: -DDPCTL_GENERATE_COVERAGE=ON \ -DDPCTL_BUILD_CAPI_TESTS=ON \ -DDPCTL_COVERAGE_REPORT_OUTPUT_DIR=$(pwd) - pushd $(find _skbuild -name tests) + pushd $(find _skbuild -name cmake-build) cmake --build . --target lcov-genhtml || exit 1 popd export PATH=${_SAVED_PATH} diff --git a/scripts/gen_coverage.py b/scripts/gen_coverage.py index 7f8b357bae..611327689a 100644 --- a/scripts/gen_coverage.py +++ b/scripts/gen_coverage.py @@ -73,8 +73,16 @@ def run( if gtest_config: cmake_args += ["-DCMAKE_PREFIX_PATH=" + gtest_config] subprocess.check_call(cmake_args, shell=False, cwd=setup_dir, env=env) + cmake_build_dir = ( + subprocess.check_output( + ["find", "_skbuild", "-name", "cmake-build"], cwd=setup_dir + ) + .decode("utf-8") + .strip("\n") + ) subprocess.check_call( - ["cmake", "--build", ".", "--target", "lcov-genhtml"], cwd=setup_dir + ["cmake", "--build", ".", "--target", "lcov-genhtml"], + cwd=cmake_build_dir, ) subprocess.check_call( [ From 55056575f7eb0ffaa7bace30781181e49885ce01 Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk Date: Fri, 4 Feb 2022 05:40:20 -0600 Subject: [PATCH 10/10] no need to pin coverage at 3.2.0 (too old) --- .github/workflows/generate-coverage.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate-coverage.yaml b/.github/workflows/generate-coverage.yaml index b03c9fd031..c46af799a8 100644 --- a/.github/workflows/generate-coverage.yaml +++ b/.github/workflows/generate-coverage.yaml @@ -108,7 +108,7 @@ jobs: shell: bash -l {0} run: | sudo gem install coveralls-lcov - pip install coveralls==3.2.0 + pip install coveralls - name: Upload coverage data to coveralls.io shell: bash -l {0}