Example #1
0
    def __init__(self,
                 sources,
                 target,
                 arch=None,
                 std="c++11",
                 includes: list = None,
                 defines: dict = None,
                 cflags: str = None,
                 extra_cflags: str = None,
                 extra_lflags: str = None,
                 build_directory: str = None):
        if arch is None:
            arch = find_cuda_device_arch()
            if arch is None:
                raise ValueError("you must specify arch if use cuda.")

        cflags = cflags or f"-x cu -Xcompiler -fPIC -arch={arch} --expt-relaxed-constexpr"
        try:
            cuda_home = find_cuda()
        except:
            cuda_home = None
        if cuda_home is not None:
            cuda_include = Path(cuda_home) / "include"
        includes = includes or []
        includes += [str(cuda_include)]
        super().__init__(sources,
                         target,
                         std,
                         includes,
                         defines,
                         cflags,
                         compiler="nvcc",
                         extra_cflags=extra_cflags,
                         extra_lflags=extra_lflags,
                         build_directory=build_directory)
Example #2
0
def load_pb11(sources,
              target,
              cwd='.',
              cuda=False,
              arch=None,
              num_workers=4,
              includes: list = None,
              build_directory=None,
              compiler="g++"):
    cmd_groups = []
    cmds = []
    outs = []
    main_sources = []
    if arch is None:
        arch = find_cuda_device_arch()

    for s in sources:
        s = str(s)
        if ".cu" in s or ".cu.cc" in s:
            assert cuda is True, "cuda must be true if contain cuda file"
            cmds.append(Nvcc(s, out(s), arch))
            outs.append(out(s))
        else:
            main_sources.append(s)

    if cuda is True and arch is None:
        raise ValueError("you must specify arch if sources contains"
                         " cuda files")
    cmd_groups.append(cmds)
    if cuda:
        cmd_groups.append(
            [Pybind11CUDALink(outs + main_sources, target, includes=includes)])
    else:
        cmd_groups.append(
            [Pybind11Link(outs + main_sources, target, includes=includes)])
    for cmds in cmd_groups:
        compile_libraries(cmds,
                          cwd,
                          num_workers=num_workers,
                          compiler=compiler)

    return import_file(target, add_to_sys=False, disable_warning=True)