diff --git a/CMakeLists.txt b/CMakeLists.txt index 42339b02e..4a867a586 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,9 @@ project(YAP) -cmake_minimum_required (VERSION 3.0) +cmake_minimum_required (VERSION 2.8) + +set (ENV{ANDROID_NDK} "/Volumes/Transcend/vsc/AndroidSDK/ndk-bundle") # where we have most scripts # set path to additional CMake modules @@ -114,22 +116,13 @@ get_git_head_revision(GIT_HEAD GIT_SHA1) git_describe(GIT_DESCRIBE) if (ANDROID) - IF(DEFINED ENV{ANDROID_SDK}) - set (ANDROID_SDK $ENV{ANDROID_SDK}) -ELSEIF( NOT DEFINED ANDROID_SDK) - message("ANDROID_SDK is not defined. You must tell CMake where to find the SDK") - # exit early - return() -ENDIF() - set (ANDROIDDLLS "android" "log") - set (ANDROID_ANT ${ANDROID_SDK}/tools/ant) - set (ANDROID_SDK_TOOL ${ANDROID_SDK}/tools/android) + set (GMP_ROOT "${CMAKE_SOURCE_DIR}/../gmp/${ANDROID_ABI}") else() set(YAP_STARTUP startup.yss) endif() - option (WITH_CUDD "BDD CUDD package" ON) + option (WITH_CUDD "BDD CUDD package" NOT ${WITH_ANDROID}) if (WITH_CUDD) #detect cudd setup, as it is shared between different installations. @@ -138,26 +131,102 @@ find_package(CUDD) # CUDD_LIBRARIES - Link these to use CUDD # CUDD_INCLUDE_DIR - Include directory for using CUDD # - +if (CUDD_FOUND) set( CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${CUDD_INCLUDE_DIR} ) check_include_files( cudd.h HAVE_CUDD_H ) check_include_files( "stdio.h;cudd/cudd.h" HAVE_CUDD_CUDD_H ) check_include_files( cuddInt.h HAVE_CUDDINT_H ) check_include_files( "stdio.h;cudd/cudd.h;cudd/cuddInt.h" HAVE_CUDD_CUDDINT_H ) +endif (CUDD_FOUND) endif(WITH_CUDD) option(WITH_JAVA "Try to use Java (currently Java 6,7,8)" ON) if (WITH_JAVA) - include(java) +#detect java setup, as it is shared between different installations. + +find_package(Java 1.8 COMPONENTS Runtime Development) +# find_package(Java COMPONENTS Development) +# find_package(Java COMPONENTS Runtime) +#find_package(JavaLibs) +macro_log_feature (Java_Development_FOUND "Java" + "Use Java System" + "http://www.java.org" FALSE) + +if (Java_Development_FOUND) + + find_package(JNI) + + if (JNI_FOUND) + + include(UseJava) + + # + # Java_JAVA_EXECUTABLE = the full path to the Java runtime + # Java_JAVAC_EXECUTABLE = the full path to the Java compiler + # Java_JAVAH_EXECUTABLE = the full path to the Java header generator + # Java_JAVADOC_EXECUTABLE = the full path to the Java documention generator + # Java_IDLJ_EXECUTABLE = the full path to the Java idl compiler + # Java_JAR_EXECUTABLE = the full path to the Java archiver + # Java_JARSIGNER_EXECUTABLE = the full path to the Java jar signer + # Java_VERSION_STRING = Version of java found, eg. 1.6.0_12 + # Java_VERSION_MAJOR = The major version of the package found. + # Java_VERSION_MINOR = The minor version of the package found. + # Java_VERSION_PATCH = The patch version of the package found. + # Java_VERSION_TWEAK = The tweak version of the package found (after '_') + # Java_VERSION = This is set to: $major.$minor.$patch(.$tweak) + # + # The Java_ADDITIONAL_VERSIONS variable can be used to specify a list + # of version numbers that should be taken into account when searching + # for Java. You need to set this variable before calling + # find_package(JavaLibs). + # + #macro_optional_find_package(JNI ON) + # JNI_INCLUDE_DIRS = the include dirs to use + # JNI_LIBRARIES = the libraries to use + # JNI_FOUND = TRUE if JNI headers and libraries were found. + # JAVA_AWT_LIBRARY = the path to the jawt library + # JAVA_JVM_LIBRARY = the path to the jvm library + # JAVA_INCLUDE_PATH = the include path to jni.h + # JAVA_INCLUDE_PATH2 = the include path to jni_md.h + # JAVA_AWT_INCLUDE_PATH = the include path to jawt.h +endif (JNI_FOUND) + + +endif (Java_Development_FOUND) endif(WITH_JAVA) option(WITH_PYTHON "Try to use Python (currently Python 3)" ON) if (WITH_PYTHON) - include(python) + + +#BREW install for Python3 + + +if (APPLE) +foreach (i 3.6 3.5 3.4 3.3 3.2 3.1 3.0) + set (PYTHON_INCLUDE_DIRS /usr/local/Frameworks/Python.framework/Versions/${i}/Headers) + message("Trying Python ${i}") + if (EXISTS ${PYTHON_INCLUDE_DIRS}) + set (PYTHON_EXECUTABLE /usr/local/bin/python${i} CACHE FILEPATH "Path to a program" FORCE ) + set (PYTHON_INCLUDE_DIR /usr/local/Frameworks/Python.framework/Versions/${i}/include/python${i}m + CACHE PATH "Path to a file." FORCE ) + set (PYTHON_LIBRARY /usr/local/Frameworks/Python.framework/Versions/${i}/lib/libpython${i}.dylib + CACHE FILEPATH "Path to a library" FORCE ) + break() + endif() +endforeach() +endif() + +find_package(PythonInterp) +find_package(PythonLibs) + + macro_log_feature (PYTHONLIBS_FOUND "Python" + "Use Python System" + "http://www.python.org" FALSE) endif() @@ -213,8 +282,12 @@ set_property(DIRECTORY PROPERTY CXX_STANDARD 11) include (Config) IF (NOT MSVC) - target_link_libraries(libYap m ${ANDROIDDLLS} + IF (ANDROID) + target_link_libraries(libYap m android log ) + ELSEIF (ANDROID) + target_link_libraries(libYap m ${ANDROID_DLLS} ) + ENDIF (ANDROID) ENDIF (NOT MSVC) set_target_properties(libYap @@ -229,12 +302,11 @@ set(YAP_PL_SRCDIR ${CMAKE_SOURCE_DIR}/pl) # Compatibility vars with autotols if (ANDROID) -set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/packages/swig/android) -set ( prefix "${CMAKE_INSTALL_PREFIX}") +set ( prefix "${CMAKE_SOURCE_DIR}/app/main") set ( exec_prefix "${prefix}") -set ( libdir "${exec_prefix}/libs/${ANDROID_ABI}") +set ( libdir "${exec_prefix}/lib/${ANDROID_ABI}") set ( dlls "${libdir}") -set ( includedir "${prefix}/include") +set ( includedir "${prefix}/src/include") set ( datarootdir "${prefix}/share") set ( libpl "${datarootdir}/Yap") set ( datadir "${datarootdir}") @@ -354,9 +426,6 @@ endif() endif() # set_property( DIRECTORY APPEND_STRING PROPERTY -fsanitize=memory;-fsanitize-memory-track-origins=2) - -message(STATUS "Running with CMAKE_C_FLAGS ${CMAKE_C_FLAGS}") - if (HAVE_GCC) # replace instructions codes by the address of their code option (WITH_THREADED_CODE "threaded code" ON) @@ -392,6 +461,7 @@ macro_log_feature (GMP_FOUND "GNU big integers and rationals" "http://gmplib.org") set(YAP_SYSTEM_OPTIONS "big_numbers " ${YAP_SYSTEM_OPTIONS}) + if (GMP_FOUND) # GMP_FOUND - true if GMP/MPIR was found # GMP_INCLUDE_DIRS - include search path @@ -516,25 +586,31 @@ add_subDIRECTORY (packages/ProbLog) add_subDIRECTORY (packages/swi-minisat2) -IF (NOT MSVC) +add_subDIRECTORY (packages/raptor) + +add_subDIRECTORY (packages/xml) + + +IF (NOT MSVC AND NOT ANDROID) OPTION (WITH_CLPBN " Enable the CLPBN and PFL probabilistic languages" ON) -OPTION (WITH_CPLINT " Enable the cplint probabilistic language" ON) +OPTION (WITH_CPLINT " Enable the cplint probabilistic language" ON) OPTION (WITH_HORUS " Enable the CLPBN and PFL probabilistic languages" ON) IF (WITH_CLPBN) add_subDIRECTORY (packages/CLPBN) -ENDIF() +ENDIF(WITH_CLPBN) IF (WITH_CPLINT) add_subDIRECTORY (packages/cplint) -ENDIF() -ENDIF(NOT MSVC) +ENDIF(WITH_CPLINT) -add_subDIRECTORY (packages/raptor) +ENDIF(NOT MSVC AND NOT ANDROID) + +#must be last +add_subDIRECTORY (packages/swig) -add_subDIRECTORY (packages/xml) # please install doxygen for prolog first # git clone http://www.github.com/vscosta/doxygen-yap @@ -571,9 +647,6 @@ option (WITH_PRISM "use PRISM system in YAP" ON) #TODO: -#must be last -add_subDIRECTORY (packages/swig) - option (WITH_YAP_DLL "compile YAP as a DLL" ON) @@ -694,14 +767,12 @@ configure_file ("${PROJECT_SOURCE_DIR}/config.h.cmake" # ADD_SUBDIRECTORY(console/terminal) -install ( - TARGETS yap-bin libYap - RUNTIME DESTINATION ${bindir} - ARCHIVE DESTINATION ${libdir} - LIBRARY DESTINATION ${libdir} - ) +if (ANDROID) +file(INSTALL DESTINATION ${libdir} TYPE SHARED_LIBRARY FILES + ${GMP_LIBRARIES} ) +endif(ANDROID) macro_display_feature_log() if(POLICY CMP0058) diff --git a/cmake/FindCUDD.cmake b/cmake/FindCUDD.cmake index dc33ca50b..94d2360b5 100644 --- a/cmake/FindCUDD.cmake +++ b/cmake/FindCUDD.cmake @@ -40,7 +40,7 @@ endif() ) - + mark_as_advanced(CUDD_INCLUDE_DIR) if (${CUDD_ROOT}) set (CUDD_LIB_SEARCH_PATH @@ -52,15 +52,16 @@ if (${CUDD_ROOT}) ) endif() + mark_as_advanced(CUDD_LIB_SEarcH_PATH on) + - set (CUDD_LIB_SEARCH_PATH ${CUDD_LIB_SEARCH_PATH} /usr/local/lib/cudd /usr/local/cudd/lib /usr/lib/cudd /usr/lib/cudd/lib - /usr/lib64/cudd + /usr/lib64/cudds /usr/freeware/lib64 ) find_library(CUDD_LIBRARIES @@ -113,9 +114,9 @@ find_library(CUDD_EPD_LIBRARY ) -set(CUDD_LIBRARIES +set(CUDD_LIBRARIES ${CUDD_LIBRARIES} ${CUDD_ST_LIBRARY} ${CUDD_UTIL_LIBRARY} - ${CUDD_MTR_LIBRARY} ${CUDD_EPD_LIBRARY} ${CUDD_DDDMP_LIBRARY} PARENT_SCOPE ) + ${CUDD_MTR_LIBRARY} ${CUDD_EPD_LIBRARY} ${CUDD_DDDMP_LIBRARY} ) endif () # Check for cudd 2. diff --git a/cmake/FindGMP.cmake b/cmake/FindGMP.cmake index 6ccc5c2bd..33c0ae673 100644 --- a/cmake/FindGMP.cmake +++ b/cmake/FindGMP.cmake @@ -8,7 +8,12 @@ # GMP_LIBRARY_DLL - library DLL to install. Only available on WIN32. # GMP_LIBRARIES_DIR - the directory the library we link with is found in. - +if (ANDROID) + set (GMP_FOUND ON) + set (GMP_INCLUDE_DIRS ${GMP_ROOT}) + set (GMP_LIBRARIES ${GMP_ROOT}/libgmp.so) + set (GMP_LIBRARIES_DIR ${GMP_ROOT}) +else(ANDROID) if(MSVC) find_library(GMP_LIBRARIES NAMES mpir mpird PATHS @@ -36,7 +41,7 @@ find_file(GMP_LIBRARY_DLL NAMES mpir.dll mpird.dll ${GMP_LIBRARIES_DIR} ) - find_path(GMP_INCLUDE_DIRS + find_path(GMP_INCLUDE_DIRS NAMES mpir.h mpird.h PATHS ${GMP_LIBRARIES_DIR}/../include @@ -48,12 +53,23 @@ else(MSVC) #use GMP, notice that there are two cases, everything is the same directory, or everything is in #its proper places + +find_path(GMP_INCLUDE_DIRS + NAMES gmp.h + PATHS + . + ${GMP_ROOT} + ${GMP_LIBRARIES_DIR}/../include + ${GMP_LIBRARIES_DIR} + ) + find_library(GMP_LIBRARIES NAMES gmp - PATHS + PATHS + . + ${GMP_ROOT} + ${GMP_ROOT}/lib $ENV{GMP_ROOT} $ENV{GMP_ROOT}/lib - ${GMP_ROOT} - ${GMP_ROOT}/lib /usr/local/opt/gmp/lib /opt/lib /usr/local/lib @@ -63,15 +79,11 @@ else(MSVC) get_filename_component(GMP_LIBRARIES_DIR "${GMP_LIBRARIES}" PATH CACHE) -find_path(GMP_INCLUDE_DIRS - NAMES gmp.h - PATHS - ${GMP_LIBRARIES_DIR}/../include - ${GMP_LIBRARIES_DIR} - ) endif(MSVC) +endif(ANDROID) +message("${GMP_ROOT} ${GMP_INCLUDE_DIRS} ${GMP_LIBRARIES} ${GMP_LIBRARIES_DIR}") # handle the QUIET and REQUIRED arguments and set GMP_FOUND to TRUE if # all listed variables are true