diff --git a/jvm-packages/create_jni.bat b/jvm-packages/create_jni.bat deleted file mode 100644 index 596374e30..000000000 --- a/jvm-packages/create_jni.bat +++ /dev/null @@ -1,19 +0,0 @@ -echo "copy native library" -set libsource=..\lib\libxgboost4j.so - -if not exist %libsource% ( -goto end -) - -set libfolder=src\main\resources\lib -set libpath=%libfolder%\xgboost4j.dll -if not exist %libfolder% (mkdir %libfolder%) -if exist %libpath% (del %libpath%) -copy %libsource% %libpath% -echo complete -exit - -:end - echo "source library not found, please build it first by runing mingw32-make jvm" - pause - exit diff --git a/jvm-packages/create_jni.py b/jvm-packages/create_jni.py new file mode 100755 index 000000000..11a84ec77 --- /dev/null +++ b/jvm-packages/create_jni.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +import errno +import glob +import os +import shutil +import subprocess +import sys +from contextlib import contextmanager +from subprocess import check_output + + +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.""" + return os.path.join(*path.split("/")) + + +if __name__ == "__main__": + if sys.platform == "darwin": + # Enable of your compiler supports OpenMP. + CONFIG["USE_OPENMP"] = "OFF" + os.environ["JAVA_HOME"] = 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 .") + + 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", + "linux2": "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") diff --git a/jvm-packages/create_jni.sh b/jvm-packages/create_jni.sh deleted file mode 100755 index 902be52e2..000000000 --- a/jvm-packages/create_jni.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -set -e -x - -echo "build java wrapper" - -# cd to script's directory -pushd `dirname $0` > /dev/null - -#settings according to os -dl="so" -USE_OMP=ON - -if [ $(uname) == "Darwin" ]; then - export JAVA_HOME=$(/usr/libexec/java_home) - dl="dylib" - #change this to 0 if your compiler support openmp - USE_OMP=OFF -fi - -cd .. -mkdir -p build -cd build -cmake .. -DJVM_BINDINGS:BOOL=ON -DUSE_OPENMP:BOOL=${USE_OMP} -make -cd ../jvm-packages -echo "move native lib" - -libPath="xgboost4j/src/main/resources/lib" -if [ ! -d "$libPath" ]; then - mkdir -p "$libPath" -fi - -rm -f xgboost4j/src/main/resources/lib/libxgboost4j.${dl} -cp ../lib/libxgboost4j.${dl} xgboost4j/src/main/resources/lib/libxgboost4j.${dl} -# copy python to native resources -cp ../dmlc-core/tracker/dmlc_tracker/tracker.py xgboost4j/src/main/resources/tracker.py -# copy test data files -mkdir -p xgboost4j-spark/src/test/resources/ -cd ../demo/regression -python mapfeat.py -python mknfold.py machine.txt 1 -cd - -cp ../demo/regression/machine.txt.t* xgboost4j-spark/src/test/resources/ -cp ../demo/data/agaricus.* xgboost4j-spark/src/test/resources/ -popd > /dev/null -echo "complete" diff --git a/jvm-packages/xgboost4j/pom.xml b/jvm-packages/xgboost4j/pom.xml index bb4e4d1e8..d73775b6a 100644 --- a/jvm-packages/xgboost4j/pom.xml +++ b/jvm-packages/xgboost4j/pom.xml @@ -11,97 +11,7 @@ xgboost4j 0.7 jar - - - NotWindows - - - !windows - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.3 - - protected - true - - - - org.apache.maven.plugins - maven-assembly-plugin - - false - - - - exec-maven-plugin - org.codehaus.mojo - 1.6.0 - - - native - generate-sources - - exec - - - create_jni.sh - - - - - - - - - Windows - - - windows - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.3 - - protected - true - - - - org.apache.maven.plugins - maven-assembly-plugin - - false - - - - exec-maven-plugin - org.codehaus.mojo - - - native - generate-sources - - exec - - - create_jni.bat - - - - - - - - + junit @@ -122,4 +32,45 @@ test + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.3 + + protected + true + + + + org.apache.maven.plugins + maven-assembly-plugin + + false + + + + exec-maven-plugin + org.codehaus.mojo + + + native + generate-sources + + exec + + + python + + create_jni.py + + ${user.dir} + + + + + +