list(APPEND objects
    H_Ewald_pw.cpp
    H_Hartree_pw.cpp
    VL_in_pw.cpp
    VNL_in_pw.cpp
    charge.cpp
    charge_broyden.cpp
    charge_extra.cpp
    charge_mixing.cpp
    charge_pulay.cpp
    diago_cg.cpp
    diago_david.cpp
    efield.cpp
    energy.cpp
    forces.cpp
    global.cpp
    klist.cpp
    magnetism.cpp
    occupy.cpp
    potential.cpp
    pw_basis.cpp
    bspline_sf.cpp
    pw_complement.cpp
    soc.cpp
    sto_che.cpp
    sto_elec.cpp
    sto_hchi.cpp
    sto_iter.cpp
    sto_wf.cpp
    stress_func_cc.cpp
    stress_func_ewa.cpp
    stress_func_gga.cpp
    stress_func_mgga.cpp
    stress_func_har.cpp
    stress_func_kin.cpp
    stress_func_loc.cpp
    stress_func_nl.cpp
    stress_func_print.cpp
    stress_pw.cpp
    symmetry_rho.cpp
    threshold_elec.cpp
    use_fft.cpp
    vdwd2.cpp
    vdwd2_parameters.cpp
    vdwd3.cpp
    vdwd3_parameters.cpp
    wavefunc.cpp
    wf_atomic.cpp
    wf_igk.cpp
    xc_3.cpp
    run_md_pw.cpp)
if(USE_CUDA)
    list(APPEND objects
        diago_cg.cu
        electrons.cu
        hamilt.cu
        hamilt_pw.cu
        use_fft_kernel.cu
    )
elseif(USE_ROCM)
    list(APPEND objects
        diago_cg_hip.cpp
        electrons_hip.cpp
        hamilt_hip.cpp
        hamilt_pw_hip.cpp
        use_fft_kernel_hip.cpp
    )
else()
    list(APPEND objects
        hamilt.cpp
        hamilt_pw.cpp
        electrons.cpp
    )
endif()

add_library(
    pw
    OBJECT
    ${objects}
)

IF (BUILD_TESTING)
  add_subdirectory(test)
endif()
