aboutsummaryrefslogtreecommitdiff
path: root/cmake/dependencies/PICSAR.cmake
blob: c4bc24a7c81e622a1034f43f9daf84a91ed3a685 (plain) (blame)
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
function(find_picsar)
    if(WarpX_picsar_src)
        message(STATUS "Compiling local PICSAR ...")
        message(STATUS "PICSAR source path: ${WarpX_picsar_src}")
    elseif(WarpX_picsar_internal)
        message(STATUS "Downloading PICSAR ...")
        message(STATUS "PICSAR repository: ${WarpX_picsar_repo} (${WarpX_picsar_branch})")
        include(FetchContent)
    endif()
    if(WarpX_picsar_internal OR WarpX_picsar_src)
        set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)

        # Enable or disable QED lookup tables generation

        # If table generation is enabled, enable or disable
        # openMP support depending on WarpX_COMPUTE
        if(WarpX_QED_TABLE_GEN)
            set(PXRMP_QED_TABLEGEN ON CACHE INTERNAL "")
            if(WarpX_COMPUTE STREQUAL OMP)
                set(PXRMP_QED_OMP ON CACHE INTERNAL "")
            else()
                set(PXRMP_QED_OMP OFF CACHE INTERNAL "")
            endif()
        else()
            set(PXRMP_QED_TABLEGEN OFF CACHE INTERNAL "")
            set(PXRMP_QED_OMP OFF CACHE INTERNAL "")
        endif()

        # Always disable tests
        set (PXRMP_QED_TEST OFF CACHE INTERNAL "")

        if(WarpX_COMPUTE STREQUAL SYCL)
            set (PXRMP_DPCPP_FIX ON CACHE INTERNAL "")
        endif()

        if(WarpX_picsar_src)
            add_subdirectory(
                ${WarpX_picsar_src}/multi_physics/QED
                _deps/localpicsar-build/
            )
            get_source_version(PXRMP_QED ${WarpX_picsar_src})
        else()
            FetchContent_Declare(fetchedpicsar
                GIT_REPOSITORY ${WarpX_picsar_repo}
                GIT_TAG        ${WarpX_picsar_branch}
                BUILD_IN_SOURCE 0
            )
            FetchContent_GetProperties(fetchedpicsar)

            if(NOT fetchedpicsar_POPULATED)
                FetchContent_Populate(fetchedpicsar)
                add_subdirectory(
                    ${fetchedpicsar_SOURCE_DIR}/multi_physics/QED
                    ${fetchedpicsar_BINARY_DIR}
                )
            endif()
            get_source_version(PXRMP_QED ${fetchedpicsar_SOURCE_DIR})
            if(NOT PXRMP_QED_GIT_VERSION)
                set(PXRMP_QED_GIT_VERSION "${WarpX_picsar_branch}" CACHE INTERNAL "")
            endif()

            # advanced fetch options
            mark_as_advanced(FETCHCONTENT_BASE_DIR)
            mark_as_advanced(FETCHCONTENT_FULLY_DISCONNECTED)
            mark_as_advanced(FETCHCONTENT_QUIET)
            mark_as_advanced(FETCHCONTENT_SOURCE_DIR_FETCHEDPICSAR)
            mark_as_advanced(FETCHCONTENT_UPDATES_DISCONNECTED)
            mark_as_advanced(FETCHCONTENT_UPDATES_DISCONNECTED_FETCHEDPICSAR)
        endif()

        # PICSAR options not relevant to WarpX users
        mark_as_advanced(DIM)
        mark_as_advanced(USE_XSDK_DEFAULTS)
        mark_as_advanced(PXRMP_QED_TABLEGEN)
        mark_as_advanced(PXRMP_QED_OMP)
        mark_as_advanced(PXRMP_QED_TEST)
        mark_as_advanced(PXRMP_BOOST_TEST_DYN_LINK)
        mark_as_advanced(PXRMP_DPCPP_FIX)


        # PICSAR_VERSION: not yet defined
        #message(STATUS "PICSAR: Using version '${PICSAR_VERSION}'")
    else()
        # not supported by PICSAR (yet)
        #find_package(PICSAR 22.07 CONFIG REQUIRED QED)
        #message(STATUS "PICSAR: Found version '${PICSAR_VERSION}'")
        message(FATAL_ERROR "PICSAR: Cannot be used as externally installed "
            "library yet. "
            "Note that you can point to an external source tree with "
            "-DWarpX_picsar_src=<path>"
        )
    endif()
endfunction()

if(WarpX_QED)
    # local source-tree
    set(WarpX_picsar_src ""
        CACHE PATH
        "Local path to PICSAR source directory (preferred if set)")

    # Git fetcher
    option(WarpX_picsar_internal   "Download & build PICSAR" ON)
    set(WarpX_picsar_repo "https://github.com/ECP-WarpX/picsar.git"
        CACHE STRING
        "Repository URI to pull and build PICSAR from if(WarpX_picsar_internal)")
    set(WarpX_picsar_branch "4252e567089fce30d2a3a82d78998e8d3d8220c2"
        CACHE STRING
        "Repository branch for WarpX_picsar_repo if(WarpX_picsar_internal)")

    cmake_dependent_option(WarpX_QED_TABLE_GEN "generate QED lookup tables (requires boost)"
        ON "WarpX_QED" OFF)

    find_picsar()
endif()