File: BuiltinVecCore.cmake

package info (click to toggle)
vecgeom 1.2.8%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 24,016 kB
  • sloc: cpp: 88,803; ansic: 6,888; python: 1,035; sh: 582; sql: 538; makefile: 23
file content (91 lines) | stat: -rw-r--r-- 3,565 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#  This function is used to force a build on a dependant project at cmake configuration phase.
#
function (build_external_project target globpattern ) #FOLLOWING ARGUMENTS are the ARGS of ExternalProject_Add
  set(trigger_build_topdir ${PROJECT_BINARY_DIR}/buildExternals/${target})
  set(trigger_src_dir ${PROJECT_BINARY_DIR}/buildExternals/${target}/trigger_src)
  set(trigger_build_dir ${PROJECT_BINARY_DIR}/buildExternals/${target}/build)

  #mktemp dir in build tree
  file(MAKE_DIRECTORY ${trigger_build_dir} ${trigger_src_dir} ${trigger_build_dir})

  #generate false dependency project
  set(CMAKE_LIST_CONTENT "
      cmake_minimum_required(VERSION 3.16...3.27)
      project(BuiltinVecCore)
      include(ExternalProject)
      ExternalProject_add(${target}
              ${ARGN}
              )

      add_custom_target(trigger_${target})
      add_dependencies(trigger_${target} ${target})
  ")

  file(WRITE ${trigger_src_dir}/CMakeLists.txt "${CMAKE_LIST_CONTENT}")

  execute_process(COMMAND ${CMAKE_COMMAND} ${trigger_src_dir} -G ${CMAKE_GENERATOR}
    WORKING_DIRECTORY ${trigger_build_dir}
  )
  execute_process(COMMAND ${CMAKE_COMMAND} --build .
    WORKING_DIRECTORY ${trigger_build_dir}
  )

  FILE(GLOB VecCoreHeaders string(${globpattern}))

  add_custom_target(${target})
  add_custom_command(
          OUTPUT ${VecCoreHeaders}
          COMMAND ${CMAKE_COMMAND} --build .
          WORKING_DIRECTORY ${trigger_build_dir}
  )
endfunction()


set(VecCore_PROJECT "VecCore-${VecCore_VERSION}")
set(VecCore_SRC_URI "http://lcgpackages.web.cern.ch/lcgpackages/tarFiles/sources")
set(VecCore_SRC_MD5 "3e5b84d1b502ab7c7047c4b494ce640a")
set(VecCore_DESTDIR "${PROJECT_BINARY_DIR}/installExternals/${VecCore_PROJECT}")
set(VecCore_ROOTDIR "${VecCore_DESTDIR}/${CMAKE_INSTALL_PREFIX}")
set(VecCore_SRC_TAG "v${VecCore_VERSION}")

if(VECGEOM_VC)
  set(Vc_LIBNAME ${CMAKE_STATIC_LIBRARY_PREFIX}Vc${CMAKE_STATIC_LIBRARY_SUFFIX})
  set(Vc_LIBRARY ${VecCore_ROOTDIR}/lib${LIB_SUFFIX}/${Vc_LIBNAME})
endif()

build_external_project(${VecCore_PROJECT}
  "${VecCore_ROOTDIR}/include/VecCore/*.h;${VecCore_ROOTDIR}/include/VecCore/VecCore;${VecCore_ROOTDIR}/include/VecCore/Backend/*.h"
  "URL \"${VecCore_SRC_URI}/VecCore-${VecCore_VERSION}.tar.gz\"
  URL_MD5 ${VecCore_SRC_MD5}
  #GIT_REPOSITORY \"${VecCore_SRC_URI}\"
  #GIT_TAG \"${VecCore_SRC_TAG}\"

  PREFIX external
  STAMP_DIR external/stamp
  BINARY_DIR external/build
  BUILD_IN_SOURCE 0
  LOG_DOWNLOAD 1 LOG_CONFIGURE 1 LOG_BUILD 1 LOG_INSTALL 1
  CMAKE_ARGS -G \"${CMAKE_GENERATOR}\"
             -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DBUILD_TESTING=OFF
             -DCUDA=${VECGEOM_ENABLE_CUDA} -DVC=${VECGEOM_VC}
             -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
           \"-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}\"
             -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
           \"-DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}\"
             -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
           \"-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}\"
           \"-DVc_DIR=${Vc_DIR}\"
  INSTALL_COMMAND env DESTDIR=${VecCore_DESTDIR} ${CMAKE_COMMAND} --build . --target install"
)

add_custom_target(VecCore)
add_dependencies(VecCore ${VecCore_PROJECT})

install(DIRECTORY ${VecCore_ROOTDIR}/ DESTINATION "." )

# Find VecCore with selected components turned on (CUDA and backend)
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${VecCore_DESTDIR}/${CMAKE_INSTALL_PREFIX})

# Make sure to look again for a version of VecCore so that we can make sure to find
# the one we just build.
unset(VecCore_DIR CACHE)