123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #
- # Licensed to the Apache Software Foundation (ASF) under one
- # or more contributor license agreements. See the NOTICE file
- # distributed with this work for additional information
- # regarding copyright ownership. The ASF licenses this file
- # to you under the Apache License, Version 2.0 (the
- # "License"); you may not use this file except in compliance
- # with the License. You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- #
- #
- # Common JNI detection for CMake, shared by all Native components.
- #
- # Check the JVM_ARCH_DATA_MODEL variable as been set to 32 or 64 by maven.
- if(NOT DEFINED JVM_ARCH_DATA_MODEL)
- message(FATAL_ERROR "JVM_ARCH_DATA_MODEL is not defined")
- elseif(NOT (JVM_ARCH_DATA_MODEL EQUAL 32 OR JVM_ARCH_DATA_MODEL EQUAL 64))
- message(FATAL_ERROR "JVM_ARCH_DATA_MODEL is not 32 or 64")
- endif()
- #
- # Linux-specific JNI configuration.
- #
- if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- # Locate JNI_INCLUDE_DIRS and JNI_LIBRARIES.
- # Since we were invoked from Maven, we know that the JAVA_HOME environment
- # variable is valid. So we ignore system paths here and just use JAVA_HOME.
- file(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _java_home)
- if(CMAKE_SYSTEM_PROCESSOR MATCHES "^i.86$")
- set(_java_libarch "i386")
- elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "amd64")
- set(_java_libarch "amd64")
- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
- set(_java_libarch "arm")
- elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)64le")
- if(EXISTS "${_java_home}/jre/lib/ppc64le")
- set(_java_libarch "ppc64le")
- else()
- set(_java_libarch "ppc64")
- endif()
- else()
- set(_java_libarch ${CMAKE_SYSTEM_PROCESSOR})
- endif()
- set(_JDK_DIRS "${_java_home}/jre/lib/${_java_libarch}/*"
- "${_java_home}/jre/lib/${_java_libarch}"
- "${_java_home}/jre/lib/*"
- "${_java_home}/jre/lib"
- "${_java_home}/lib/*"
- "${_java_home}/lib"
- "${_java_home}/include/*"
- "${_java_home}/include"
- "${_java_home}"
- )
- find_path(JAVA_INCLUDE_PATH
- NAMES jni.h
- PATHS ${_JDK_DIRS}
- NO_DEFAULT_PATH)
- #In IBM java, it's jniport.h instead of jni_md.h
- find_path(JAVA_INCLUDE_PATH2
- NAMES jni_md.h jniport.h
- PATHS ${_JDK_DIRS}
- NO_DEFAULT_PATH)
- set(JNI_INCLUDE_DIRS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
- find_library(JAVA_JVM_LIBRARY
- NAMES jvm JavaVM
- PATHS ${_JDK_DIRS}
- NO_DEFAULT_PATH)
- set(JNI_LIBRARIES ${JAVA_JVM_LIBRARY})
- unset(_java_libarch)
- unset(_java_home)
- message("JAVA_HOME=${JAVA_HOME}, JAVA_JVM_LIBRARY=${JAVA_JVM_LIBRARY}")
- message("JAVA_INCLUDE_PATH=${JAVA_INCLUDE_PATH}, JAVA_INCLUDE_PATH2=${JAVA_INCLUDE_PATH2}")
- if(JAVA_JVM_LIBRARY AND JAVA_INCLUDE_PATH AND JAVA_INCLUDE_PATH2)
- message("Located all JNI components successfully.")
- else()
- message(FATAL_ERROR "Failed to find a viable JVM installation under JAVA_HOME.")
- endif()
- # Use the standard FindJNI module to locate the JNI components.
- find_package(JNI REQUIRED)
- #
- # Otherwise, use the standard FindJNI module to locate the JNI components.
- #
- else()
- find_package(Java REQUIRED)
- include(UseJava)
- find_package(JNI REQUIRED)
- endif()
|