#!/usr/bin/env python
import errno
import argparse
import glob
import os
import platform
import shutil
import subprocess
import sys
from contextlib import contextmanager

# Monkey-patch the API inconsistency between Python2.X and 3.X.
if sys.platform.startswith("linux"):
    sys.platform = "linux"


CONFIG = {
    "USE_OPENMP": "ON",
    "USE_HDFS": "OFF",
    "USE_AZURE": "OFF",
    "USE_S3": "OFF",

    "USE_CUDA": "OFF",
    "USE_NCCL": "OFF",
    "JVM_BINDINGS": "ON",
    "LOG_CAPI_INVOCATION": "OFF"
}


@contextmanager
def cd(path):
    path = normpath(path)
    cwd = os.getcwd()
    os.chdir(path)
    print("cd " + path)
    try:
        yield path
    finally:
        os.chdir(cwd)


def maybe_makedirs(path):
    path = normpath(path)
    print("mkdir -p " + path)
    try:
        os.makedirs(path)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise


def run(command, **kwargs):
    print(command)
    subprocess.check_call(command, shell=True, **kwargs)


def cp(source, target):
    source = normpath(source)
    target = normpath(target)
    print("cp {0} {1}".format(source, target))
    shutil.copy(source, target)


def normpath(path):
    """Normalize UNIX path to a native path."""
    normalized = os.path.join(*path.split("/"))
    if os.path.isabs(path):
        return os.path.abspath("/") + normalized
    else:
        return normalized


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--log-capi-invocation', type=str, choices=['ON', 'OFF'], default='OFF')
    parser.add_argument('--use-cuda', type=str, choices=['ON', 'OFF'], default='OFF')
    cli_args = parser.parse_args()

    if sys.platform == "darwin":
        # Enable of your compiler supports OpenMP.
        CONFIG["USE_OPENMP"] = "OFF"
        os.environ["JAVA_HOME"] = subprocess.check_output(
            "/usr/libexec/java_home").strip().decode()

    print("building Java wrapper")
    with cd(".."):
        build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' else 'build'
        maybe_makedirs(build_dir)
        with cd(build_dir):
            if sys.platform == "win32":
                # Force x64 build on Windows.
                maybe_generator = ' -A x64'
            else:
                maybe_generator = ""
            if sys.platform == "linux":
                maybe_parallel_build = " -- -j $(nproc)"
            else:
                maybe_parallel_build = ""

            if cli_args.log_capi_invocation == 'ON':
                CONFIG['LOG_CAPI_INVOCATION'] = 'ON'

            if cli_args.use_cuda == 'ON':
                CONFIG['USE_CUDA'] = 'ON'
                CONFIG['USE_NCCL'] = 'ON'

            args = ["-D{0}:BOOL={1}".format(k, v) for k, v in CONFIG.items()]

            # if enviorment set rabit_mock
            if os.getenv("RABIT_MOCK", None) is not None:
                args.append("-DRABIT_MOCK:BOOL=ON")

            # if enviorment set GPU_ARCH_FLAG
            gpu_arch_flag = os.getenv("GPU_ARCH_FLAG", None)
            if gpu_arch_flag is not None:
                args.append("%s" % gpu_arch_flag)

            lib_dir = os.path.join(os.pardir, 'lib')
            if os.path.exists(lib_dir):
                shutil.rmtree(lib_dir)
            run("cmake .. " + " ".join(args) + maybe_generator)
            run("cmake --build . --config Release" + maybe_parallel_build)

        with cd("demo/CLI/regression"):
            run(f'"{sys.executable}" mapfeat.py')
            run(f'"{sys.executable}" mknfold.py machine.txt 1')

    xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j'
    xgboost4j_spark = 'xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j-spark'

    print("copying native library")
    library_name, os_folder = {
        "Windows": ("xgboost4j.dll", "windows"),
        "Darwin": ("libxgboost4j.dylib", "macos"),
        "Linux": ("libxgboost4j.so", "linux"),
        "SunOS": ("libxgboost4j.so", "solaris"),
    }[platform.system()]
    arch_folder = {
        "x86_64": "x86_64",  # on Linux & macOS x86_64
        "amd64": "x86_64",  # on Windows x86_64
        "i86pc": "x86_64",  # on Solaris x86_64
        "sun4v": "sparc",  # on Solaris sparc
        "arm64": "aarch64",  # on macOS & Windows ARM 64-bit
        "aarch64": "aarch64"
    }[platform.machine().lower()]
    output_folder = "{}/src/main/resources/lib/{}/{}".format(xgboost4j, os_folder, arch_folder)
    maybe_makedirs(output_folder)
    cp("../lib/" + library_name, output_folder)

    print("copying pure-Python tracker")
    cp("../python-package/xgboost/tracker.py", "{}/src/main/resources".format(xgboost4j))

    print("copying train/test files")
    maybe_makedirs("{}/src/test/resources".format(xgboost4j_spark))
    with cd("../demo/CLI/regression"):
        run(f'"{sys.executable}" mapfeat.py')
        run(f'"{sys.executable}" mknfold.py machine.txt 1')

    for file in glob.glob("../demo/CLI/regression/machine.txt.t*"):
        cp(file, "{}/src/test/resources".format(xgboost4j_spark))
    for file in glob.glob("../demo/data/agaricus.*"):
        cp(file, "{}/src/test/resources".format(xgboost4j_spark))

    maybe_makedirs("{}/src/test/resources".format(xgboost4j))
    for file in glob.glob("../demo/data/agaricus.*"):
        cp(file, "{}/src/test/resources".format(xgboost4j))

58cfd3ec89719c2f8b01996dc293c2b1d43db203
<mask token>


@contextmanager
def cd(path):
    path = normpath(path)
    cwd = os.getcwd()
    os.chdir(path)
    print('cd ' + path)
    try:
        yield path
    finally:
        os.chdir(cwd)


def maybe_makedirs(path):
    path = normpath(path)
    print('mkdir -p ' + path)
    try:
        os.makedirs(path)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise


def run(command, **kwargs):
    print(command)
    subprocess.check_call(command, shell=True, **kwargs)


def cp(source, target):
    source = normpath(source)
    target = normpath(target)
    print('cp {0} {1}'.format(source, target))
    shutil.copy(source, target)


def normpath(path):
    """Normalize UNIX path to a native path."""
    normalized = os.path.join(*path.split('/'))
    if os.path.isabs(path):
        return os.path.abspath('/') + normalized
    else:
        return normalized


<mask token>

<mask token>
if sys.platform.startswith('linux'):
    sys.platform = 'linux'
<mask token>


@contextmanager
def cd(path):
    path = normpath(path)
    cwd = os.getcwd()
    os.chdir(path)
    print('cd ' + path)
    try:
        yield path
    finally:
        os.chdir(cwd)


def maybe_makedirs(path):
    path = normpath(path)
    print('mkdir -p ' + path)
    try:
        os.makedirs(path)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise


def run(command, **kwargs):
    print(command)
    subprocess.check_call(command, shell=True, **kwargs)


def cp(source, target):
    source = normpath(source)
    target = normpath(target)
    print('cp {0} {1}'.format(source, target))
    shutil.copy(source, target)


def normpath(path):
    """Normalize UNIX path to a native path."""
    normalized = os.path.join(*path.split('/'))
    if os.path.isabs(path):
        return os.path.abspath('/') + normalized
    else:
        return normalized


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--log-capi-invocation', type=str, choices=['ON',
        'OFF'], default='OFF')
    parser.add_argument('--use-cuda', type=str, choices=['ON', 'OFF'],
        default='OFF')
    cli_args = parser.parse_args()
    if sys.platform == 'darwin':
        CONFIG['USE_OPENMP'] = 'OFF'
        os.environ['JAVA_HOME'] = subprocess.check_output(
            '/usr/libexec/java_home').strip().decode()
    print('building Java wrapper')
    with cd('..'):
        build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' else 'build'
        maybe_makedirs(build_dir)
        with cd(build_dir):
            if sys.platform == 'win32':
                maybe_generator = ' -A x64'
            else:
                maybe_generator = ''
            if sys.platform == 'linux':
                maybe_parallel_build = ' -- -j $(nproc)'
            else:
                maybe_parallel_build = ''
            if cli_args.log_capi_invocation == 'ON':
                CONFIG['LOG_CAPI_INVOCATION'] = 'ON'
            if cli_args.use_cuda == 'ON':
                CONFIG['USE_CUDA'] = 'ON'
                CONFIG['USE_NCCL'] = 'ON'
            args = ['-D{0}:BOOL={1}'.format(k, v) for k, v in CONFIG.items()]
            if os.getenv('RABIT_MOCK', None) is not None:
                args.append('-DRABIT_MOCK:BOOL=ON')
            gpu_arch_flag = os.getenv('GPU_ARCH_FLAG', None)
            if gpu_arch_flag is not None:
                args.append('%s' % gpu_arch_flag)
            lib_dir = os.path.join(os.pardir, 'lib')
            if os.path.exists(lib_dir):
                shutil.rmtree(lib_dir)
            run('cmake .. ' + ' '.join(args) + maybe_generator)
            run('cmake --build . --config Release' + maybe_parallel_build)
        with cd('demo/CLI/regression'):
            run(f'"{sys.executable}" mapfeat.py')
            run(f'"{sys.executable}" mknfold.py machine.txt 1')
    xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j'
    xgboost4j_spark = ('xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' else
        'xgboost4j-spark')
    print('copying native library')
    library_name, os_folder = {'Windows': ('xgboost4j.dll', 'windows'),
        'Darwin': ('libxgboost4j.dylib', 'macos'), 'Linux': (
        'libxgboost4j.so', 'linux'), 'SunOS': ('libxgboost4j.so', 'solaris')}[
        platform.system()]
    arch_folder = {'x86_64': 'x86_64', 'amd64': 'x86_64', 'i86pc': 'x86_64',
        'sun4v': 'sparc', 'arm64': 'aarch64', 'aarch64': 'aarch64'}[platform
        .machine().lower()]
    output_folder = '{}/src/main/resources/lib/{}/{}'.format(xgboost4j,
        os_folder, arch_folder)
    maybe_makedirs(output_folder)
    cp('../lib/' + library_name, output_folder)
    print('copying pure-Python tracker')
    cp('../python-package/xgboost/tracker.py', '{}/src/main/resources'.
        format(xgboost4j))
    print('copying train/test files')
    maybe_makedirs('{}/src/test/resources'.format(xgboost4j_spark))
    with cd('../demo/CLI/regression'):
        run(f'"{sys.executable}" mapfeat.py')
        run(f'"{sys.executable}" mknfold.py machine.txt 1')
    for file in glob.glob('../demo/CLI/regression/machine.txt.t*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j_spark))
    for file in glob.glob('../demo/data/agaricus.*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j_spark))
    maybe_makedirs('{}/src/test/resources'.format(xgboost4j))
    for file in glob.glob('../demo/data/agaricus.*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j))

<mask token>
if sys.platform.startswith('linux'):
    sys.platform = 'linux'
CONFIG = {'USE_OPENMP': 'ON', 'USE_HDFS': 'OFF', 'USE_AZURE': 'OFF',
    'USE_S3': 'OFF', 'USE_CUDA': 'OFF', 'USE_NCCL': 'OFF', 'JVM_BINDINGS':
    'ON', 'LOG_CAPI_INVOCATION': 'OFF'}


@contextmanager
def cd(path):
    path = normpath(path)
    cwd = os.getcwd()
    os.chdir(path)
    print('cd ' + path)
    try:
        yield path
    finally:
        os.chdir(cwd)


def maybe_makedirs(path):
    path = normpath(path)
    print('mkdir -p ' + path)
    try:
        os.makedirs(path)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise


def run(command, **kwargs):
    print(command)
    subprocess.check_call(command, shell=True, **kwargs)


def cp(source, target):
    source = normpath(source)
    target = normpath(target)
    print('cp {0} {1}'.format(source, target))
    shutil.copy(source, target)


def normpath(path):
    """Normalize UNIX path to a native path."""
    normalized = os.path.join(*path.split('/'))
    if os.path.isabs(path):
        return os.path.abspath('/') + normalized
    else:
        return normalized


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--log-capi-invocation', type=str, choices=['ON',
        'OFF'], default='OFF')
    parser.add_argument('--use-cuda', type=str, choices=['ON', 'OFF'],
        default='OFF')
    cli_args = parser.parse_args()
    if sys.platform == 'darwin':
        CONFIG['USE_OPENMP'] = 'OFF'
        os.environ['JAVA_HOME'] = subprocess.check_output(
            '/usr/libexec/java_home').strip().decode()
    print('building Java wrapper')
    with cd('..'):
        build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' else 'build'
        maybe_makedirs(build_dir)
        with cd(build_dir):
            if sys.platform == 'win32':
                maybe_generator = ' -A x64'
            else:
                maybe_generator = ''
            if sys.platform == 'linux':
                maybe_parallel_build = ' -- -j $(nproc)'
            else:
                maybe_parallel_build = ''
            if cli_args.log_capi_invocation == 'ON':
                CONFIG['LOG_CAPI_INVOCATION'] = 'ON'
            if cli_args.use_cuda == 'ON':
                CONFIG['USE_CUDA'] = 'ON'
                CONFIG['USE_NCCL'] = 'ON'
            args = ['-D{0}:BOOL={1}'.format(k, v) for k, v in CONFIG.items()]
            if os.getenv('RABIT_MOCK', None) is not None:
                args.append('-DRABIT_MOCK:BOOL=ON')
            gpu_arch_flag = os.getenv('GPU_ARCH_FLAG', None)
            if gpu_arch_flag is not None:
                args.append('%s' % gpu_arch_flag)
            lib_dir = os.path.join(os.pardir, 'lib')
            if os.path.exists(lib_dir):
                shutil.rmtree(lib_dir)
            run('cmake .. ' + ' '.join(args) + maybe_generator)
            run('cmake --build . --config Release' + maybe_parallel_build)
        with cd('demo/CLI/regression'):
            run(f'"{sys.executable}" mapfeat.py')
            run(f'"{sys.executable}" mknfold.py machine.txt 1')
    xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j'
    xgboost4j_spark = ('xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' else
        'xgboost4j-spark')
    print('copying native library')
    library_name, os_folder = {'Windows': ('xgboost4j.dll', 'windows'),
        'Darwin': ('libxgboost4j.dylib', 'macos'), 'Linux': (
        'libxgboost4j.so', 'linux'), 'SunOS': ('libxgboost4j.so', 'solaris')}[
        platform.system()]
    arch_folder = {'x86_64': 'x86_64', 'amd64': 'x86_64', 'i86pc': 'x86_64',
        'sun4v': 'sparc', 'arm64': 'aarch64', 'aarch64': 'aarch64'}[platform
        .machine().lower()]
    output_folder = '{}/src/main/resources/lib/{}/{}'.format(xgboost4j,
        os_folder, arch_folder)
    maybe_makedirs(output_folder)
    cp('../lib/' + library_name, output_folder)
    print('copying pure-Python tracker')
    cp('../python-package/xgboost/tracker.py', '{}/src/main/resources'.
        format(xgboost4j))
    print('copying train/test files')
    maybe_makedirs('{}/src/test/resources'.format(xgboost4j_spark))
    with cd('../demo/CLI/regression'):
        run(f'"{sys.executable}" mapfeat.py')
        run(f'"{sys.executable}" mknfold.py machine.txt 1')
    for file in glob.glob('../demo/CLI/regression/machine.txt.t*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j_spark))
    for file in glob.glob('../demo/data/agaricus.*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j_spark))
    maybe_makedirs('{}/src/test/resources'.format(xgboost4j))
    for file in glob.glob('../demo/data/agaricus.*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j))

import errno
import argparse
import glob
import os
import platform
import shutil
import subprocess
import sys
from contextlib import contextmanager
if sys.platform.startswith('linux'):
    sys.platform = 'linux'
CONFIG = {'USE_OPENMP': 'ON', 'USE_HDFS': 'OFF', 'USE_AZURE': 'OFF',
    'USE_S3': 'OFF', 'USE_CUDA': 'OFF', 'USE_NCCL': 'OFF', 'JVM_BINDINGS':
    'ON', 'LOG_CAPI_INVOCATION': 'OFF'}


@contextmanager
def cd(path):
    path = normpath(path)
    cwd = os.getcwd()
    os.chdir(path)
    print('cd ' + path)
    try:
        yield path
    finally:
        os.chdir(cwd)


def maybe_makedirs(path):
    path = normpath(path)
    print('mkdir -p ' + path)
    try:
        os.makedirs(path)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise


def run(command, **kwargs):
    print(command)
    subprocess.check_call(command, shell=True, **kwargs)


def cp(source, target):
    source = normpath(source)
    target = normpath(target)
    print('cp {0} {1}'.format(source, target))
    shutil.copy(source, target)


def normpath(path):
    """Normalize UNIX path to a native path."""
    normalized = os.path.join(*path.split('/'))
    if os.path.isabs(path):
        return os.path.abspath('/') + normalized
    else:
        return normalized


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--log-capi-invocation', type=str, choices=['ON',
        'OFF'], default='OFF')
    parser.add_argument('--use-cuda', type=str, choices=['ON', 'OFF'],
        default='OFF')
    cli_args = parser.parse_args()
    if sys.platform == 'darwin':
        CONFIG['USE_OPENMP'] = 'OFF'
        os.environ['JAVA_HOME'] = subprocess.check_output(
            '/usr/libexec/java_home').strip().decode()
    print('building Java wrapper')
    with cd('..'):
        build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' else 'build'
        maybe_makedirs(build_dir)
        with cd(build_dir):
            if sys.platform == 'win32':
                maybe_generator = ' -A x64'
            else:
                maybe_generator = ''
            if sys.platform == 'linux':
                maybe_parallel_build = ' -- -j $(nproc)'
            else:
                maybe_parallel_build = ''
            if cli_args.log_capi_invocation == 'ON':
                CONFIG['LOG_CAPI_INVOCATION'] = 'ON'
            if cli_args.use_cuda == 'ON':
                CONFIG['USE_CUDA'] = 'ON'
                CONFIG['USE_NCCL'] = 'ON'
            args = ['-D{0}:BOOL={1}'.format(k, v) for k, v in CONFIG.items()]
            if os.getenv('RABIT_MOCK', None) is not None:
                args.append('-DRABIT_MOCK:BOOL=ON')
            gpu_arch_flag = os.getenv('GPU_ARCH_FLAG', None)
            if gpu_arch_flag is not None:
                args.append('%s' % gpu_arch_flag)
            lib_dir = os.path.join(os.pardir, 'lib')
            if os.path.exists(lib_dir):
                shutil.rmtree(lib_dir)
            run('cmake .. ' + ' '.join(args) + maybe_generator)
            run('cmake --build . --config Release' + maybe_parallel_build)
        with cd('demo/CLI/regression'):
            run(f'"{sys.executable}" mapfeat.py')
            run(f'"{sys.executable}" mknfold.py machine.txt 1')
    xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j'
    xgboost4j_spark = ('xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' else
        'xgboost4j-spark')
    print('copying native library')
    library_name, os_folder = {'Windows': ('xgboost4j.dll', 'windows'),
        'Darwin': ('libxgboost4j.dylib', 'macos'), 'Linux': (
        'libxgboost4j.so', 'linux'), 'SunOS': ('libxgboost4j.so', 'solaris')}[
        platform.system()]
    arch_folder = {'x86_64': 'x86_64', 'amd64': 'x86_64', 'i86pc': 'x86_64',
        'sun4v': 'sparc', 'arm64': 'aarch64', 'aarch64': 'aarch64'}[platform
        .machine().lower()]
    output_folder = '{}/src/main/resources/lib/{}/{}'.format(xgboost4j,
        os_folder, arch_folder)
    maybe_makedirs(output_folder)
    cp('../lib/' + library_name, output_folder)
    print('copying pure-Python tracker')
    cp('../python-package/xgboost/tracker.py', '{}/src/main/resources'.
        format(xgboost4j))
    print('copying train/test files')
    maybe_makedirs('{}/src/test/resources'.format(xgboost4j_spark))
    with cd('../demo/CLI/regression'):
        run(f'"{sys.executable}" mapfeat.py')
        run(f'"{sys.executable}" mknfold.py machine.txt 1')
    for file in glob.glob('../demo/CLI/regression/machine.txt.t*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j_spark))
    for file in glob.glob('../demo/data/agaricus.*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j_spark))
    maybe_makedirs('{}/src/test/resources'.format(xgboost4j))
    for file in glob.glob('../demo/data/agaricus.*'):
        cp(file, '{}/src/test/resources'.format(xgboost4j))

#!/usr/bin/env python
import errno
import argparse
import glob
import os
import platform
import shutil
import subprocess
import sys
from contextlib import contextmanager

# Monkey-patch the API inconsistency between Python2.X and 3.X.
if sys.platform.startswith("linux"):
    sys.platform = "linux"


CONFIG = {
    "USE_OPENMP": "ON",
    "USE_HDFS": "OFF",
    "USE_AZURE": "OFF",
    "USE_S3": "OFF",

    "USE_CUDA": "OFF",
    "USE_NCCL": "OFF",
    "JVM_BINDINGS": "ON",
    "LOG_CAPI_INVOCATION": "OFF"
}


@contextmanager
def cd(path):
    path = normpath(path)
    cwd = os.getcwd()
    os.chdir(path)
    print("cd " + path)
    try:
        yield path
    finally:
        os.chdir(cwd)


def maybe_makedirs(path):
    path = normpath(path)
    print("mkdir -p " + path)
    try:
        os.makedirs(path)
    except OSError as e:
        if e.errno != errno.EEXIST:
            raise


def run(command, **kwargs):
    print(command)
    subprocess.check_call(command, shell=True, **kwargs)


def cp(source, target):
    source = normpath(source)
    target = normpath(target)
    print("cp {0} {1}".format(source, target))
    shutil.copy(source, target)


def normpath(path):
    """Normalize UNIX path to a native path."""
    normalized = os.path.join(*path.split("/"))
    if os.path.isabs(path):
        return os.path.abspath("/") + normalized
    else:
        return normalized


if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--log-capi-invocation', type=str, choices=['ON', 'OFF'], default='OFF')
    parser.add_argument('--use-cuda', type=str, choices=['ON', 'OFF'], default='OFF')
    cli_args = parser.parse_args()

    if sys.platform == "darwin":
        # Enable of your compiler supports OpenMP.
        CONFIG["USE_OPENMP"] = "OFF"
        os.environ["JAVA_HOME"] = subprocess.check_output(
            "/usr/libexec/java_home").strip().decode()

    print("building Java wrapper")
    with cd(".."):
        build_dir = 'build-gpu' if cli_args.use_cuda == 'ON' else 'build'
        maybe_makedirs(build_dir)
        with cd(build_dir):
            if sys.platform == "win32":
                # Force x64 build on Windows.
                maybe_generator = ' -A x64'
            else:
                maybe_generator = ""
            if sys.platform == "linux":
                maybe_parallel_build = " -- -j $(nproc)"
            else:
                maybe_parallel_build = ""

            if cli_args.log_capi_invocation == 'ON':
                CONFIG['LOG_CAPI_INVOCATION'] = 'ON'

            if cli_args.use_cuda == 'ON':
                CONFIG['USE_CUDA'] = 'ON'
                CONFIG['USE_NCCL'] = 'ON'

            args = ["-D{0}:BOOL={1}".format(k, v) for k, v in CONFIG.items()]

            # if enviorment set rabit_mock
            if os.getenv("RABIT_MOCK", None) is not None:
                args.append("-DRABIT_MOCK:BOOL=ON")

            # if enviorment set GPU_ARCH_FLAG
            gpu_arch_flag = os.getenv("GPU_ARCH_FLAG", None)
            if gpu_arch_flag is not None:
                args.append("%s" % gpu_arch_flag)

            lib_dir = os.path.join(os.pardir, 'lib')
            if os.path.exists(lib_dir):
                shutil.rmtree(lib_dir)
            run("cmake .. " + " ".join(args) + maybe_generator)
            run("cmake --build . --config Release" + maybe_parallel_build)

        with cd("demo/CLI/regression"):
            run(f'"{sys.executable}" mapfeat.py')
            run(f'"{sys.executable}" mknfold.py machine.txt 1')

    xgboost4j = 'xgboost4j-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j'
    xgboost4j_spark = 'xgboost4j-spark-gpu' if cli_args.use_cuda == 'ON' else 'xgboost4j-spark'

    print("copying native library")
    library_name, os_folder = {
        "Windows": ("xgboost4j.dll", "windows"),
        "Darwin": ("libxgboost4j.dylib", "macos"),
        "Linux": ("libxgboost4j.so", "linux"),
        "SunOS": ("libxgboost4j.so", "solaris"),
    }[platform.system()]
    arch_folder = {
        "x86_64": "x86_64",  # on Linux & macOS x86_64
        "amd64": "x86_64",  # on Windows x86_64
        "i86pc": "x86_64",  # on Solaris x86_64
        "sun4v": "sparc",  # on Solaris sparc
        "arm64": "aarch64",  # on macOS & Windows ARM 64-bit
        "aarch64": "aarch64"
    }[platform.machine().lower()]
    output_folder = "{}/src/main/resources/lib/{}/{}".format(xgboost4j, os_folder, arch_folder)
    maybe_makedirs(output_folder)
    cp("../lib/" + library_name, output_folder)

    print("copying pure-Python tracker")
    cp("../python-package/xgboost/tracker.py", "{}/src/main/resources".format(xgboost4j))

    print("copying train/test files")
    maybe_makedirs("{}/src/test/resources".format(xgboost4j_spark))
    with cd("../demo/CLI/regression"):
        run(f'"{sys.executable}" mapfeat.py')
        run(f'"{sys.executable}" mknfold.py machine.txt 1')

    for file in glob.glob("../demo/CLI/regression/machine.txt.t*"):
        cp(file, "{}/src/test/resources".format(xgboost4j_spark))
    for file in glob.glob("../demo/data/agaricus.*"):
        cp(file, "{}/src/test/resources".format(xgboost4j_spark))

    maybe_makedirs("{}/src/test/resources".format(xgboost4j))
    for file in glob.glob("../demo/data/agaricus.*"):
        cp(file, "{}/src/test/resources".format(xgboost4j))
