118 lines
3.1 KiB
Python
Executable File
118 lines
3.1 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import errno
|
|
import glob
|
|
import os
|
|
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",
|
|
|
|
"PLUGIN_UPDATER_GPU": "OFF",
|
|
"JVM_BINDINGS": "ON"
|
|
}
|
|
|
|
|
|
@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__":
|
|
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(".."):
|
|
maybe_makedirs("build")
|
|
with cd("build"):
|
|
if sys.platform == "win32":
|
|
# Force x64 build on Windows.
|
|
maybe_generator = ' -G"Visual Studio 14 Win64"'
|
|
else:
|
|
maybe_generator = ""
|
|
|
|
args = ["-D{0}:BOOL={1}".format(k, v) for k, v in CONFIG.items()]
|
|
run("cmake .. " + " ".join(args) + maybe_generator)
|
|
run("cmake --build . --config Release")
|
|
|
|
with cd("demo/regression"):
|
|
run(sys.executable + " mapfeat.py")
|
|
run(sys.executable + " mknfold.py machine.txt 1")
|
|
|
|
print("copying native library")
|
|
library_name = {
|
|
"win32": "xgboost4j.dll",
|
|
"darwin": "libxgboost4j.dylib",
|
|
"linux": "libxgboost4j.so"
|
|
}[sys.platform]
|
|
maybe_makedirs("xgboost4j/src/main/resources/lib")
|
|
cp("../lib/" + library_name, "xgboost4j/src/main/resources/lib")
|
|
|
|
print("copying pure-Python tracker")
|
|
cp("../dmlc-core/tracker/dmlc_tracker/tracker.py",
|
|
"xgboost4j/src/main/resources")
|
|
|
|
print("copying train/test files")
|
|
maybe_makedirs("xgboost4j-spark/src/test/resources")
|
|
with cd("../demo/regression"):
|
|
run("{} mapfeat.py".format(sys.executable))
|
|
run("{} mknfold.py machine.txt 1".format(sys.executable))
|
|
|
|
for file in glob.glob("../demo/regression/machine.txt.t*"):
|
|
cp(file, "xgboost4j-spark/src/test/resources")
|
|
for file in glob.glob("../demo/data/agaricus.*"):
|
|
cp(file, "xgboost4j-spark/src/test/resources")
|