From 5584eb1a55d4188bfbc4425ff1b3fac61334626b Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Sun, 31 Jul 2016 04:56:54 -0500 Subject: [PATCH] Android support --- CMakeLists.txt | 846 +++---------------------- CXX/CMakeLists.txt | 22 +- OPTYap/CMakeLists.txt | 42 +- cmake/Model.cmake | 108 ++++ cmake/Sources.cmake | 1 + library/CMakeLists.txt | 24 +- library/dialect/CMakeLists.txt | 2 - library/dialect/swi/fli/CMakeLists.txt | 13 +- library/dialect/swi/os/CMakeLists.txt | 2 +- library/random/CMakeLists.txt | 11 +- library/system/CMakeLists.txt | 26 +- os/CMakeLists.txt | 79 ++- 12 files changed, 303 insertions(+), 873 deletions(-) create mode 100644 cmake/Model.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 455c2f7bc..8a595bd6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,796 +1,112 @@ -# organised as follows: -# main variables -# sources -# system core -# libraries +# Sets the minimum version of CMake required to build the native +# library. You should either keep the default value or only pass a +# value of 3.4.0 or lower. -project(YAP) +# Sets the minimum version of CMake required to build the native +# library. You should either keep the default value or only pass a +# value of 3.4.0 or lower. -cmake_minimum_required (VERSION 2.8) +cmake_minimum_required(VERSION 3.4.1) +set( + CMAKE_MODULE_PATH + "${CMAKE_SOURCE_DIR}" + "${CMAKE_SOURCE_DIR}/cmake") -set (ENV{ANDROID_NDK} "/Volumes/Transcend/vsc/AndroidSDK/ndk-bundle") +set(LIBYAP_SOURCES ../../externalNativeBuild/swig/yapj.cpp) -# where we have most scripts -# set path to additional CMake modules -set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) - -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - -include(disallow) - -disallow_intree_builds() - -# set(CMAKE_BUILD_TYPE Debug) - -set (MACOSX_RPATH ON) -if(POLICY CMP0042) - cmake_policy(SET CMP0042 NEW) -endif(POLICY CMP0042) -if(POLICY CMP0043) -cmake_policy(SET CMP0043 NEW) -endif(POLICY CMP0043) - - -set(YAP_FOUND ON) - -set(YAP_MAJOR_VERSION 6) -set(YAP_MINOR_VERSION 3) -set(YAP_PATCH_VERSION 4) - -set(YAP_SYSTEM_OPTIONS "attributed_variables" ) - -if (WIN32) - set (YAP_ARCH $ENV{PROCESSOR_ARCHITECTURE}) - set(YAP_SYSTEM_OPTIONS "windows " ${YAP_SYSTEM_OPTIONS}) -endif() -if (UNIX) - find_program (UNAME uname) - execute_process ( - COMMAND ${UNAME} -m - OUTPUT_VARIABLE YAP_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE ) - set(YAP_SYSTEM_OPTIONS "unix " ${YAP_SYSTEM_OPTIONS}) -endif() - -set(YAP_FULL_VERSION - ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION}) -set(YAP_FVERSION - ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION}) -set(YAP_NUMERIC_VERSION - ${YAP_MAJOR_VERSION}*10000+${YAP_MINOR_VERSION}*100+${YAP_PATCH_VERSION}) -set(MYDDAS_VERSION MYDDAS-0.9.1) - -site_name( YAP_SITE ) - - -message(STATUS "Building YAP version ${YAP_VERSION}") - -# -# Optional Components -# -include(CheckIncludeFile) -include(CheckIncludeFileCXX) -include (CheckIncludeFiles) +include(CheckIncludeFiles) include(CheckLibraryExists) include(CheckSymbolExists) -include(CheckFunctionExists) -include(CheckIncludeFiles) -include(CheckFunctionExists) -include(CheckPrototypeExists) include(CheckTypeSize) -include(CheckVariableExists) -include(CheckCXXSourceCompiles) -include(TestBigEndian) -include (CMakeDependentOption) -include (MacroOptionalAddSubdirectory) -include (MacroOptionalFindPackage) -include (MacroLogFeature) -include(GetGitRevisionDescription) - -#cross-compilation support -# Search packages for host system instead of packages for target system -# in case of cross compilation these macro should be defined by toolchain file -if(NOT COMMAND find_host_package) - macro(find_host_package) - find_package(${ARGN}) - endmacro() -endif() -if(NOT COMMAND find_host_program) - macro(find_host_program) - find_program(${ARGN}) - endmacro() -endif() +include(CMakeDependentOption) +include(MacroOptionalAddSubdirectory) +include(MacroOptionalFindPackage) +include(MacroLogFeature) +include(FindPackageHandleStandardArgs) +# Creates and names a library, sets it as either STATIC +# or SHARED, and provides the relative paths to its source code. +# You can define multiple libraries, and CMake builds it for you. +# Gradle automatically packages shared libraries with your APK. -# Test signal handler return type (mimics AC_TYPE_SIGNAL) -include(TestSignalType) #check if this is really needed as c89 defines this as void +include(Prelims NO_POLICY_SCOPE) -# Test standard headers (mimics AC_HEADER_STDC) -include(TestSTDC) +include(Sources NO_POLICY_SCOPE) -set(bitness 32) -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(bitness 64) -endif() -get_git_head_revision(GIT_HEAD GIT_SHA1) -git_describe(GIT_DESCRIBE) +include(Model NO_POLICY_SCOPE) +add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1) + +if (MYSQL_FOUND) + add_definitions(= -DMYDDAS_MYSQL=1) + endif() + +if (ODBC_FOUND) + add_definitions(= -DMYDDAS_ODBC=1) + endif() + +if (MYSQL_POSTGRES) + add_definitions(= -DMYDDAS_POSTGRES=1) + endif() if (ANDROID) - set (GMP_ROOT "${CMAKE_SOURCE_DIR}/../gmp/${ANDROID_ABI}") -else() - set(YAP_STARTUP startup.yss) - option (WITH_CUDD "BDD CUDD package" ON) -if (WITH_CUDD) -#detect cudd setup, as it is shared between different installations. + set(ALL_SOURCES ../../externalNativeBuild/swig/yapj.cpp) -find_package(CUDD) -# CUDD_FOUND - system has 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} ) + ADD_SUBDIRECTORY(os) + ADD_SUBDIRECTORY(OPTYap) + ADD_SUBDIRECTORY(packages/myddas) + ADD_SUBDIRECTORY(library/random) + ADD_SUBDIRECTORY(library/system) + ADD_SUBDIRECTORY(utf8proc) + ADD_SUBDIRECTORY(CXX) - 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) -#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) +else () + set(YLIBS + $ + $ + $ + $ + $ + $ + ) -endif (Java_Development_FOUND) -endif(WITH_JAVA) +endif () -option(WITH_PYTHON "Try to use Python (currently Python 3)" ON) +add_library( # Sets the name of the library. + libYap -if (WITH_PYTHON) + # Sets the library as a shared library. + SHARED + ${ENGINE_SOURCES} + ${C_INTERFACE_SOURCES} + ${STATIC_SOURCES} + ${HEADERS} + ${WINDLLS} + ${YLIBS} + ${ALL_SOURCES} + ) -#BREW install for Python3 +include(libYap) +if (USE_GMP) + target_link_libraries(libYap ${READLINE_LIBRARIES}) +endif (USE_GMP) +if (USE_READLINE) + target_link_libraries(libYap libGMP) +endif (USE_READLINE) -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() +if (ANDROID) -find_package(PythonInterp) -find_package(PythonLibs) - - macro_log_feature (PYTHONLIBS_FOUND "Python" - "Use Python System" - "http://www.python.org" FALSE) -endif() - - - endif(ANDROID) - - -if ( -) - cmake_policy( SET CMP0042 NEW) - #cmake_policy( NO_POLICY_SCOPE ) -endif() - -set (BUILD_SHARED_LIBS ON) - -## define system - -include (Sources) - - -if (YAP_SINGLE_FILE) -set(YAP_MODULES - $ - $ - $ -) -else(YAP_SINGLE_FILE) - if (WIN32) - set(YAP_MODULES - $ - ${YAP_MODULES} - ) - endif( ) - set( UTF8PROC_DL utf8proc) -endif(YAP_SINGLE_FILE) - - -add_library(libYap - ${ENGINE_SOURCES} - ${C_INTERFACE_SOURCES} - ${STATIC_SOURCES} - ${OPTYAP_SOURCES} - ${HEADERS} - ${WINDLLS} - $ - $ - $ - $ - ${YAP_MODULES} -) - - - -set_property(DIRECTORY PROPERTY CXX_STANDARD 11) - - # Optional libraries that affect compilation - # - include (Config) - -IF (NOT MSVC) - IF (ANDROID) - target_link_libraries(libYap m android log ) - ELSE (ANDROID) - target_link_libraries(libYap m) - ENDIF (ANDROID) -ENDIF (NOT MSVC) + target_link_libraries(libYap m android log) +endif () set_target_properties(libYap - PROPERTIES VERSION ${YAP_FULL_VERSION} - SOVERSION ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION} - OUTPUT_NAME Yap - ) - - -set(CMAKE_TOP_BINARY_DIR ${CMAKE_BINARY_DIR}) -set(YAP_PL_SRCDIR ${CMAKE_SOURCE_DIR}/pl) - -# Compatibility vars with autotols -if (ANDROID) -set ( prefix "${CMAKE_SOURCE_DIR}/app/src/main") -set ( exec_prefix "${prefix}") -set ( libdir "${exec_prefix}/jniLibs/${ANDROID_ABI}") -set ( dlls "${libdir}") -set ( includedir "${prefix}/src/include") -set ( datarootdir "${prefix}/share") -set ( libpl "${datarootdir}/Yap") -set ( datadir "${datarootdir}") -set ( mandir "${datarootdir}/man") -set ( bindir "${exec_prefix}/bin") -set ( docdir "${exec_prefix}/share/doc/Yap") -else() -set ( prefix "${CMAKE_INSTALL_PREFIX}") -set ( exec_prefix "${prefix}") -set ( libdir "${exec_prefix}/lib") -set ( dlls "${exec_prefix}/lib/Yap") -set ( includedir "${prefix}/include") -set ( datarootdir "${prefix}/share") -set ( libpl "${prefix}/share/Yap") -set ( datadir "${datarootdir}") -set ( mandir "${datarootdir}/man") -set ( bindir "${exec_prefix}/bin") -set ( docdir "${exec_prefix}/share/doc/Yap") -endif() - -set(YAP_ROOTDIR ${prefix}) - -# erootdir -> rootdir -# bindir defined above -# libdir defined above -set(YAP_LIBDIR "${dlls}") -set(YAP_SHAREDIR "${datarootdir}") -set(YAP_BINDIR "${bindir}") -set(YAP_INCLUDEDIR "${includedir}") -set(YAP_ROOTDIR "${prefix}") - -set(YAP_YAPLIB libYap${CMAKE_SHARED_LIBRARY_SUFFIX}) -string(TIMESTAMP YAP_TIMESTAMP) -string( SUBSTRING ${CMAKE_SHARED_LIBRARY_SUFFIX} 1 -1 SO_EXT ) -# -include_directories (H H/generated include os OPTYap utf8proc JIT/HPP) -include_directories (BEFORE ${CMAKE_BINARY_DIR}) - -# rpath stuff, hopefully it works - -# use, i.e. don't skip the full RPATH for the build tree -SET(CMAKE_SKIP_BUILD_RPATH FALSE) - -# when building, don't use the install RPATH already -# (but later on when installing) -SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) - -SET(CMAKE_INSTALL_RPATH "${libdir};${dlls}:") - -# add the automatically determined parts of the RPATH -# which point to directories outside the build tree to the install RPATH -SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - - -# the RPATH to be used when installing, but only if it's not a system directory -LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${libdir};${dlls}" isSystemDir) -IF("${isSystemDir}" STREQUAL "-1") - SET(CMAKE_INSTALL_RPATH "${libdir};${dlls}") -ENDIF("${isSystemDir}" STREQUAL "-1") - - -# -set ( MIN_STACKSPACE 1024*SIZEOF_INT_P ) -set ( MIN_HEAPSPACE 2*1024*SIZEOF_INT_P ) -set ( MIN_TRAILSPACE 512*SIZEOF_INT_P ) -set ( DEF_STACKSPACE 0 ) -set ( DEF_HEAPSPACE 0 ) -set ( DEF_TRAILSPACE 0 ) - -# option (RATIONAL_TREES "support infinite rational trees" ON) -# dd_definitions (-D) - -## don't touch these opts - set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS DEPTH_LIMIT=1;COROUTINING=1;RATIONAL_TREES=1 ) - -# inform we are compiling YAP - set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "_YAP_NOT_INSTALLED_=1;HAVE_CONFIG_H=1" ) - -# Compilation model -# target_compile_definitions(libYap PUBLIC _XOPEN_SOURCE=700 ) - -#add_definitions( -Wall -Wstrict-prototypes -Wmissing-prototypes) - -# Model Specific - set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:DEBUG=1> ) - -#ensure cells are properly aligned in code -set (ALIGN_LONGS 1) - -#ensure best access to slots in environments -set (MSHIFTOFFS 1) - -set (C_COMPILER CMAKE_C_COMPILER_ID) - -if ( ${C_COMPILER} MATCHES "GNU") - set (HAVE_GCC 1) -endif() - -# compatible compilers -if ( ${C_COMPILER} MATCHES "Clang") - set (HAVE_GCC 1) -endif() - -if ( ${C_COMPILER} MATCHES "Intel") - set (HAVE_GCC 1) -endif() - -# Model Specific -if (HAVE_GCC) - set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -Wall ) -if ( ${C_COMPILER} MATCHES "GNU") - set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$:-O3;-fomit-frame-pointer;-fstrict-aliasing;-freorder-blocks;-fsched-interblock> ) -else() - set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$:-O3;-fstrict-aliasing;-freorder-blocks;-fsched-interblock> ) -endif() - set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -fexceptions ) -endif() - -# set_property( DIRECTORY APPEND_STRING PROPERTY -fsanitize=memory;-fsanitize-memory-track-origins=2) -if (HAVE_GCC) - # replace instructions codes by the address of their code - option (WITH_THREADED_CODE "threaded code" ON) - if (WITH_THREADED_CODE) - set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS THREADED_CODE=1;USE_SYSTEM_MALLOC=1) - endif (WITH_THREADED_CODE) -endif (HAVE_GCC) - -# -#option (YAP_SWI_IO ON) - -OPTION (WITH_CALL_TRACER -"support for procedure-call tracing" ON) -#TODO: -if (WITH_CALL_TRACER) - set(YAP_SYSTEM_OPTIONS "call_tracer " ${YAP_SYSTEM_OPTIONS}) -set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:LOW_LEVEL_TRACER=1> ) -endif (WITH_CALL_TRACER) - -#set( CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBS} ${CMAKE_REQUIRED_LIBRARIES} ) -#target_link_libraries(libYap ${READLINE_LIBS}) - -#utf-8 is not an option -# we use the nice UTF-8 package -#available at the Julia project -include_directories ( utf8proc ) -set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS UTF8PROC=1) -ADD_SUBDIRECTORY ( utf8proc ) - -find_package (GMP) -macro_log_feature (GMP_FOUND - "GNU libgmp (in some cases MPIR" - "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 -# GMP_LIBRARIES - libraries to link with -# GMP_LIBRARY_DLL - library DLL to install. Only available on WIN32. -# GMP_LIBRARIES_DIR - the directory the library we link with is found in. - include_directories (${GMP_INCLUDE_DIRS}) - #add_executable(test ${SOURCES}) - target_link_libraries(libYap ${GMP_LIBRARIES}) - #config.h needs this (TODO: change in code latter) - set( CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${GMP_INCLUDE_DIRS} ) - #set( CMAKE_REQUIRED_LIBRARIES ${GMP_LIBRARIES} ${CMAKE_REQUIRED_LIBRARIES} ) -IF (MSVC) -file(COPY ${GMP_LIBRARY_DLL} DESTINATION ${CMAKE_BINARY_DIR} ) -ENDIF(MSVC) - - endif (GMP_FOUND) - -macro_optional_find_package (Threads OFF) -macro_log_feature (THREADS_FOUND "Threads Support" - "GNU Threads Library (or similar)" - "http://www.gnu.org/software/threads") -if (WITH_Threads) - # - # CMAKE_THREAD_LIBS_INIT - the thread library - # CMAKE_USE_SPROC_INIT - are we using sproc? - # CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads? - # CMAKE_USE_PTHREADS_INIT - are we using pthreads - # CMAKE_HP_PTHREADS_INIT - are we using hp pthreads - # - # The following import target is created - # - # :: - # - # Threads::Threads - # - # For systems with multiple thread libraries, caller can set - # - # :: - # - # CMAKE_THREAD_PREFER_PTHREAD - # - # If the use of the -pthread compiler and linker flag is prefered then the - # caller can set - # - # :: - # - set( THREADS_PREFER_PTHREAD_FLAG ON) - - if (CMAKE_USE_PTHREADS_INIT) - target_link_libraries(libYap pthread) - set (HAVE_READLINE_READLINE_H 1) -# set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) - check_function_exists( pthread_mutexattr_setkind_np HAVE_PTHREAD_MUTEXATTR_SETKIND_NP ) - check_function_exists( pthread_mutexattr_settype HAVE_PTHREAD_MUTEXATTR_SETTYPE ) - check_function_exists( pthread_setconcurrency HAVE_PTHREAD_SETCONCURRENCY ) - endif (CMAKE_USE_PTHREADS_INIT) - set(YAP_SYSTEM_OPTIONS "threads " ${YAP_SYSTEM_OPTIONS}) - set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS THREADS=1) - # - # Please note that the compiler flag can only be used with the imported - # target. Use of both the imported target as well as this switch is highly - # recommended for new code. -endif (WITH_Threads) - -CMAKE_DEPENDENT_OPTION (WITH_MAX_Threads 1024 - "maximum number of threads" "WITH_MAX_Threads" 1) - -CMAKE_DEPENDENT_OPTION (WITH_MAX_Workers 64 - "maximum number of or-parallel workers" "WITH_MAX_Workers" 1) - -cmake_dependent_option (WITH_Pthread_Locking - "use pthread locking primitives for internal locking" ON - "WITH_ThreadsS" OFF) - -IF(WITH_Pthread_Lockin) - set_DIRECTORY_properties(PROPERTIES APPEND COMPILE_DEFINITIONS USE_PTHREAD_LOCKING=1) -ENDIF() - -# -# include OS and I/o stuff -# -# convenience libraries -# OPTYap exports important flags -# -add_subDIRECTORY (OPTYap) - -add_subDIRECTORY (packages/myddas) - - -add_subDIRECTORY (os) - -#bootstrap and saved state -add_subDIRECTORY (pl) - -#C++ interface -add_subDIRECTORY (CXX) - -ADD_SUBDIRECTORY(library) -ADD_SUBDIRECTORY(swi/library) -# ADD_SUBDIRECTORY(os) -# ADD_SUBDIRECTORY(packages) - - -option (WITH_JIT -"just in Time Clause Compilation" OFF) -if (WITH_JIT) - add_subDIRECTORY(JIT) -endif (WITH_JIT) - - -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_HORUS " Enable the CLPBN and PFL probabilistic languages" ON) - -IF (WITH_CLPBN) -add_subDIRECTORY (packages/CLPBN) -ENDIF(WITH_CLPBN) - -IF (WITH_CPLINT) -add_subDIRECTORY (packages/cplint) -ENDIF(WITH_CPLINT) - -ENDIF(NOT MSVC AND NOT ANDROID) - -#must be last -add_subDIRECTORY (packages/swig) - - -# please install doxygen for prolog first -# git clone http://www.github.com/vscosta/doxygen-yap -# cd doxygen-yap -# mkdir -p build -# cd build -# make; sudo make install -option (WITH_DOCS - "generate YAP docs" OFF) - - # add_subDIRECTORY (docs) - - -# add_subDIRECTORY (packages/cuda) - - -add_subDIRECTORY (packages/gecode) - -add_subDIRECTORY (packages/real) - -add_subDIRECTORY (packages/python) - -add_subDIRECTORY (packages/jpl) - -add_subDIRECTORY (packages/bdd) - -add_subDIRECTORY (packages/ProbLog) - -add_subDIRECTORY (packages/swi-minisat2) - -#todo: use cmake target builds -# option (USE_MAXPERFORMANCE -# "try using the best flags for specific architecture" OFF) - -# option (USE_MAXMEMORY -# "try using the best flags for using the memory to the most" ON) -#TODO: check MAXMEMORY - -#TODO: use cmake target builds -# option (USE_DEBUGYAP -# "enable C-debugging for YAP" OFF)e - -#TODO: use cmake arch/compiler -# option (USE_CYGWIN -# "use cygwin library in WIN32" OFF) - -option (WITH_PRISM - "use PRISM system in YAP" ON) -#TODO: - - -option (WITH_YAP_DLL - "compile YAP as a DLL" ON) -#TODO: - -option (WITH_YAP_STATIC - "compile YAP statically" OFF) -#TODO: - -# modern systems do this. -set ( MALLOC_T "void *" ) -CMAKE_DEPENDENT_OPTION (WITH_SYSTEM_MALLOC - "use malloc to allocate memory" ON "NOT WITH_COPY_OR_PARALELISM" OFF) -CMAKE_DEPENDENT_OPTION (WITH_DL_MALLOC - "use malloc to allocate memory" ON "NOT WITH_SYSTEM_MALLOC" OFF) -CMAKE_DEPENDENT_OPTION (WITH_YAP_MALLOC - "use malloc to allocate memory" ON "NOT WITH_SYSTEM_MALLOC;NOT WITH_DL_MALLOC" OFF) - -option(WITH_YAP_CONDOR - "allow YAP to be used from condor" OFF) - -if (WITH_YAP_CONDOR) - # use default allocator - set ( YAP_STATIC ON ) - set ( YAP_DLL OFF ) -endif() - -#TODO: detect arch before allow this option -# OPTION(WIN64 -# "compile YAP for win64" OFF) - -# option (APRIL -# "compile Yap to support April ILP system" OFF) -# option (DLCOMPAT -# "use dlcompat library for dynamic loading on Mac OS X" OFF) - -# SHARED PACKAGES with SWI - -# swi packages have both Makefile.in which we will use and -# Makefile.mak, we will use the later to identify this packages -# while we keep both autotools amd cmake working side by side -# Search for available packages which all have a Makefile.mak -#file (GLOB PACKAGES packages/*/Makefile.mak) - -# needed by this packages - - -target_link_libraries(libYap - ${UTF8PROC_DL} - ${GMP_LIBRARIES} - ${READLINE_LIBS} - ${CMAKE_DL_LIBS} - ) - -if(WIN32) - - if(MSVC) - set(MSVC_RUNTIME "dynamic") - ENDIF(MSVC) - - target_link_libraries(libYap wsock32 ws2_32 Shlwapi) - -endif(WIN32) - -add_executable (yap-bin ${CONSOLE_SOURCES}) - -if (ANDROID) - -set_target_properties (yap-bin PROPERTIES OUTPUT_NAME yapi) -else() -set_target_properties (yap-bin PROPERTIES OUTPUT_NAME yap) - - -endif() - -target_link_libraries(yap-bin libYap ) - - -CMAKE_DEPENDENT_OPTION (WITH_SYSTEM_MMAP "Use MMAP for shared memory allocation" ON - "NOT WITH_YAPOR_THOR" OFF) - -CMAKE_DEPENDENT_OPTION (WITH_SYSTEM_SHM "Use SHM for shared memory allocation" ON - "NOT WITH_YAPOR_THOR; NOT WITH_SYSTEM_MMAP" OFF ) - - add_subDIRECTORY(library/lammpi) - - if (MPI_C_FOUND) - - CMAKE_DEPENDENT_OPTION( WITH_MPI ON "Interface to OpenMPI/MPICH" - "MPI_C_FOUND" OFF) - macro_optional_add_subDIRECTORY(library/mpi) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MPI_C_COMPILE_FLAGS} ") - include_directories(${MPI_C_INCLUDE_PATH}) - target_link_libraries(yap-bin ${MPI_C_LIBRARIES} ) - if(MPI_C_COMPILE_FLAGS) - set_target_properties(yap-bin PROPERTIES - COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}") - endif(MPI_C_COMPILE_FLAGS) - - if(MPI_C_LINK_FLAGS) - set_target_properties(yap-bin PROPERTIES - LINK_FLAGS "${MPI_C_LINK_FLAGS}") - endif() - endif (MPI_C_FOUND) - - - ## add_subDIRECTORY(utils) - -if (NOT ANDROID) - add_custom_target (main ALL DEPENDS ${YAP_STARTUP} ) # WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) -endif() -# -# include subdirectories configuration -## after we have all functionality in -# - -configure_file ("${PROJECT_SOURCE_DIR}/config.h.cmake" - "${PROJECT_BINARY_DIR}/YapConfig.h" ) -configure_file ("${PROJECT_SOURCE_DIR}/YapTermConfig.h.cmake" - "${PROJECT_BINARY_DIR}/YapTermConfig.h" ) -configure_file ("${PROJECT_SOURCE_DIR}/config.h.cmake" - "${PROJECT_BINARY_DIR}/config.h" ) - configure_file("${PROJECT_SOURCE_DIR}/GitSHA1.c.in" "${PROJECT_BINARY_DIR}/GitSHA1.c" @ONLY) - -# ADD_SUBDIRECTORY(console/terminal) - - - - -if (ANDROID) -INSTALL(FILES ${GMP_LIBRARIES} DESTINATION ${libdir} + PROPERTIES OUTPUT_NAME Yap ) -endif(ANDROID) - install(TARGETS libYap yap-bin - RUNTIME DESTINATION ${bindir} - LIBRARY DESTINATION ${libdir} - ARCHIVE DESTINATION ${libdir} - ) - -macro_display_feature_log() -if(POLICY CMP0058) -cmake_policy(SET CMP0058 NEW) -endif(POLICY CMP0058) +include(Config) +MY_include(Packages) diff --git a/CXX/CMakeLists.txt b/CXX/CMakeLists.txt index 7648fca48..d203b748f 100644 --- a/CXX/CMakeLists.txt +++ b/CXX/CMakeLists.txt @@ -5,28 +5,22 @@ set(SO_MINOR 0) set(SO_PATCH 0) set (CXX_SOURCES - yapa.hh - yapdb.hh yapi.cpp - yapi.hh - yapie.hh - yapq.hh - yapt.hh ) +list(APPEND LIBYAP_SOURCES ${CXX_SOURCES} PARENT_SCOPE) -if (YAP_SINGLE_FILE OR WIN32) -add_library (Yap++ OBJECT ${CXX_SOURCES} ) -else(YAP_SINGLE_FILE OR WIN32) -add_library (Yap++ SHARED ${CXX_SOURCES} ) +add_external (Yap++ ${CXX_SOURCES} ) +if (ANDROID) +else() +MY_target_link_libraries(Yap++ ${CMAKE_DL_LIBS} libYap) +endif() -target_link_libraries(Yap++ ${CMAKE_DL_LIBS} libYap) - -install(TARGETS Yap++ +MY_install(TARGETS Yap++ LIBRARY DESTINATION ${libdir} ARCHIVE DESTINATION ${libdir} ) -endif(YAP_SINGLE_FILE OR WIN32) + include_directories (H include ${CMAKE_BINARY_DIR} ${GMP_INCLUDE_DIR}) diff --git a/OPTYap/CMakeLists.txt b/OPTYap/CMakeLists.txt index 7574d279f..5ff5aee35 100644 --- a/OPTYap/CMakeLists.txt +++ b/OPTYap/CMakeLists.txt @@ -1,5 +1,5 @@ -set (OPTYap_SOURCES +set (OPTYap_HEADERS opt.config.h opt.proto.h opt.structs.h @@ -15,18 +15,22 @@ set (OPTYap_SOURCES locks_alpha.h locks_alpha_funcs.h locks_pthread.h - or.memory.c - opt.init.c - opt.preds.c - or.copy_engine.c - or.cow_engine.c - or.sba_engine.c - or.thread_engine.c - or.scheduler.c - or.cut.c - tab.tries.c - tab.completion.c + ) + set (OPTYap_SOURCES + or.memory.c + opt.init.c + opt.preds.c + or.copy_engine.c + or.cow_engine.c + or.sba_engine.c + or.thread_engine.c + or.scheduler.c + or.cut.c + tab.tries.c + tab.completion.c + ) + option (WITH_TABLING "Support tabling" ON) if (WITH_TABLING) @@ -50,21 +54,21 @@ if (WITH_YAPOR_COPY) OPTION (WITH_YAPOR_THOR "Thread-based Or-parallelism" OFF) if (WITH_YAPOR_THOR) - set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR_THREADS=1;USE_SYSTEM_MALLOC=1) + set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR_THREADS=1) set(WITH_YAPOR ON) set(YAP_SYSTEM_OPTIONS "or_parallelism " ${YAP_SYSTEM_OPTIONS} PARENT_SCOPE) endif (WITH_YAPOR_THOR) OPTION (WITH_YAPOR_ACOW "Process-based Copy-On-Write Or-parallelism" OFF) if (WITH_YAPOR_ACOW) - set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR_COW=1;USE_SYSTEM_MALLOC=1) + set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR_COW=1) set(WITH_YAPOR ON) set(YAP_SYSTEM_OPTIONS "or_parallelism " ${YAP_SYSTEM_OPTIONS} PARENT_SCOPE) endif (WITH_YAPOR_ACOW) OPTION (WITH_YAPOR_SBA "Sparse Bind Array-based Or-parallelism" OFF) if (WITH_YAPOR_SBA) - set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR_SBA=1;USE_SYSTEM_MALLOC=1) + set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR_SBA=1) set(WITH_YAPOR ON) set(YAP_SYSTEM_OPTIONS "or_parallelism, " ${YAP_SYSTEM_OPTIONS} PARENT_SCOPE) endif (WITH_YAPOR_SBA) @@ -73,19 +77,15 @@ endif (WITH_YAPOR_SBA) if (WITH_YAPOR) set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS YAPOR=1) -else() - set_property(DIRECTORY .. APPEND PROPERTY COMPILE_DEFINITIONS USE_SYSTEM_MALLOC=1) endif () - - set (POSITION_INDEPENDENT_CODE TRUE) -add_library (libOPTYap OBJECT +add_component (libOPTYap ${OPTYap_SOURCES} ) -set_target_properties(libOPTYap +MY_set_target_properties(libOPTYap PROPERTIES # RPATH ${libdir} VERSION ${LIBYAPTAI_FULL_VERSION} # SOVERSION ${LIBYAPTAI_MAJOR_VERSION}.${LIBYAPTAI_MINOR_VERSION} diff --git a/cmake/Model.cmake b/cmake/Model.cmake new file mode 100644 index 000000000..338b04010 --- /dev/null +++ b/cmake/Model.cmake @@ -0,0 +1,108 @@ +set(YAP_FOUND ON) + +set(YAP_MAJOR_VERSION 6) +set(YAP_MINOR_VERSION 3) +set(YAP_PATCH_VERSION 4) + +set(YAP_FULL_VERSION + ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION}) +set(YAP_FVERSION + ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION}) +set(YAP_NUMERIC_VERSION + ${YAP_MAJOR_VERSION}*10000+${YAP_MINOR_VERSION}*100+${YAP_PATCH_VERSION}) +set(MYDDAS_VERSION MYDDAS-0.9.1) + +site_name( YAP_SITE ) + + +if (WIN32) + set (YAP_ARCH $ENV{PROCESSOR_ARCHITECTURE}) + set(YAP_SYSTEM_OPTIONS "windows " ${YAP_SYSTEM_OPTIONS}) +endif() +if (UNIX) + find_program (UNAME uname) + execute_process ( + COMMAND ${UNAME} -m + OUTPUT_VARIABLE YAP_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE ) + set(YAP_SYSTEM_OPTIONS "unix " ${YAP_SYSTEM_OPTIONS}) +endif() + + +# +set ( MIN_STACKSPACE 1024*SIZEOF_INT_P ) +set ( MIN_HEAPSPACE 32*1024*SIZEOF_INT_P ) +set ( MIN_TRAILSPACE 512*SIZEOF_INT_P ) +set ( DEF_STACKSPACE 0 ) +set ( DEF_HEAPSPACE 0 ) +set ( DEF_TRAILSPACE 0 ) + +# option (RATIONAL_TREES "support infinite rational trees" ON) +# dd_definitions (-D) + +## don't touch these opts + set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS DEPTH_LIMIT=1;COROUTINING=1;RATIONAL_TREES=1 ) + +# inform we are compiling YAP + set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "_YAP_NOT_INSTALLED_=1;HAVE_CONFIG_H=1" ) + +# Compilation model +# target_compile_definitions(libYap PUBLIC _XOPEN_SOURCE=700 ) + +#add_definitions( -Wall -Wstrict-prototypes -Wmissing-prototypes) + +# Model Specific + set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:DEBUG=1> ) + +#ensure cells are properly aligned in code +set (ALIGN_LONGS 1) + +#ensure best access to slots in environments +set (MSHIFTOFFS 1) + +set (C_COMPILER CMAKE_C_COMPILER_ID) + +if ( ${C_COMPILER} MATCHES "GNU") + set (HAVE_GCC 1) +endif() + +# compatible compilers +if ( ${C_COMPILER} MATCHES "Clang") + set (HAVE_GCC 1) +endif() + +if ( ${C_COMPILER} MATCHES "Intel") + set (HAVE_GCC 1) +endif() + +# Model Specific +if (HAVE_GCC) + set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -Wall ) +if ( ${C_COMPILER} MATCHES "GNU") + set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$:-O3;-fomit-frame-pointer;-fstrict-aliasing;-freorder-blocks;-fsched-interblock> ) +else() + set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$:-O3;-fstrict-aliasing;-freorder-blocks;-fsched-interblock> ) +endif() + set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -fexceptions ) +endif() + +# set_property( DIRECTORY APPEND_STRING PROPERTY -fsanitize=memory;-fsanitize-memory-track-origins=2) +if (HAVE_GCC) + # replace instructions codes by the address of their code + option (WITH_THREADED_CODE "threaded code" ON) + if (WITH_THREADED_CODE) + set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS THREADED_CODE=1) + endif (WITH_THREADED_CODE) +endif (HAVE_GCC) + +# +#option (YAP_SWI_IO ON) + +OPTION (WITH_CALL_TRACER +"support for procedure-call tracing" ON) +#TODO: +if (WITH_CALL_TRACER) + list (APPEND YAP_SYSTEM_OPTIONS "call_tracer " ${YAP_SYSTEM_OPTIONS}) +set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:LOW_LEVEL_TRACER=1> ) +endif (WITH_CALL_TRACER) + +set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS UTF8PROC=1) diff --git a/cmake/Sources.cmake b/cmake/Sources.cmake index 9020b2a34..778867c94 100644 --- a/cmake/Sources.cmake +++ b/cmake/Sources.cmake @@ -102,6 +102,7 @@ set(C_INTERFACE_SOURCES C/clause_list.c ) +list(APPEND LIBYAP_SOURCES ${C_INTERFACE_SOURCES} ${ENGINE_SOURCES}) set (HEADERS H/Atoms.h diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 399ccc248..c55b97ffe 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -62,19 +62,17 @@ set (LIBRARY_PL block_diagram.yap ) -add_subdirectory(clp) -add_subdirectory(dialect) -add_subdirectory(matlab) -add_subdirectory(matrix) -add_subdirectory(random) -add_subdirectory(regex) -add_subdirectory(rltree) -add_subdirectory(system) -add_subdirectory(tries) -add_subdirectory(ytest) - -add_custom_target (library SOURCES ${LIBRARY_PL} ) # WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) - +MY_add_subdirectory(dialect) +MY_add_subdirectory(clp) +MY_add_subdirectory(matlab) +MY_add_subdirectory(matrix) +MY_add_subdirectory(random) +MY_add_subdirectory(regex) +MY_add_subdirectory(rltree) +MY_add_subdirectory(system) +MY_add_subdirectory(tries) +MY_add_subdirectory(ytest) +MY_add_custom_target (library SOURCES ${LIBRARY_PL} ) # WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ) install(FILES ${LIBRARY_PL} DESTINATION ${libpl} diff --git a/library/dialect/CMakeLists.txt b/library/dialect/CMakeLists.txt index ea3e55770..c15c2651c 100644 --- a/library/dialect/CMakeLists.txt +++ b/library/dialect/CMakeLists.txt @@ -5,8 +5,6 @@ set (DIALECTS_PL swi.yap ) -add_subdirectory(swi) - add_custom_target( dialects DEPENDS visited SOURCES ${DIALECTS_PL} ) diff --git a/library/dialect/swi/fli/CMakeLists.txt b/library/dialect/swi/fli/CMakeLists.txt index 6e566a8dd..ecabf2a64 100644 --- a/library/dialect/swi/fli/CMakeLists.txt +++ b/library/dialect/swi/fli/CMakeLists.txt @@ -1,13 +1,12 @@ set (LIBSWI_SOURCES - swi.c blobs.c) +swi.c blobs.c ) -set (POSITION_INDEPENDENT_CODE TRUE) - -add_library (libswi OBJECT +add_component (libswi ${LIBSWI_SOURCES}) -set_target_properties(libswi + +MY_set_target_properties(libswi PROPERTIES # RPATH ${libdir} VERSION ${LIBYAPTAI_FULL_VERSION} # SOVERSION ${LIBYAPTAI_MAJOR_VERSION}.${LIBYAPTAI_MINOR_VERSION} @@ -16,11 +15,7 @@ set_target_properties(libswi include_directories (../../../H ../.../../include ../os ${CMAKE_BINARY_DIR} ${GMP_INCLUDE_DIR}) -target_link_libraries( libYap) - set (YAP_SWILIB $ ) set( CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${GMP_INCLUDE_DIR} ) #set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${GMP_LIBRARIES} ) - - diff --git a/library/dialect/swi/os/CMakeLists.txt b/library/dialect/swi/os/CMakeLists.txt index 6f46c6900..f60d0214b 100644 --- a/library/dialect/swi/os/CMakeLists.txt +++ b/library/dialect/swi/os/CMakeLists.txt @@ -51,7 +51,7 @@ add_subdirectory (libtai) # ugh set (POSITION_INDEPENDENT_CODE TRUE) -add_library (libswi_os SHARED +add_component (libswi_os ${LIBSWI_OS_SOURCES} $ ) diff --git a/library/random/CMakeLists.txt b/library/random/CMakeLists.txt index d964d6e00..44c7a38ed 100644 --- a/library/random/CMakeLists.txt +++ b/library/random/CMakeLists.txt @@ -1,11 +1,14 @@ - -add_library (yap_random SHARED yap_random.c) + +set( LIBRANDOM_SOURCES yap_random.c) +add_external (yap_random ${LIBRANDOM_SOURCES}) +if (ANDROID) +else() target_link_libraries(yap_random libYap) set_target_properties (yap_random PROPERTIES PREFIX "") +endif() -install(TARGETS yap_random +MY_install(TARGETS yap_random LIBRARY DESTINATION ${dlls} ARCHIVE DESTINATION ${dlls} ) - diff --git a/library/system/CMakeLists.txt b/library/system/CMakeLists.txt index 3361d0b46..2b5e5b15b 100644 --- a/library/system/CMakeLists.txt +++ b/library/system/CMakeLists.txt @@ -1,6 +1,14 @@ +set( LIBSYSTEM_SOURCES sys.c crypto/md5.c ) +set( LIBSYSTEM_HEADERS crypto/md5.h) -add_library (sys SHARED sys.c crypto/md5.c crypto/md5.h) +add_external (sys ${LIBSYSTEM_SOURCES}) +if (ANDROID) +set (TARGET libYap) +else() +set (TARGET sys) +endif() + # # this will support getting better cryptographic support, @@ -13,26 +21,24 @@ find_package (OpenSSL) "https://www.openssl.org/") if (OPENSSL_FOUND) include_directories (${OPENSSL_INCLUDE_DIR}) - target_link_libraries(sys ${OPENSSL_LIBRARIES}) + target_link_libraries(${TARGET} ${OPENSSL_LIBRARIES}) check_include_file( "openssl/ripemd.h" HAVE_OPENSSL_RIPEMD_H ) check_include_file( "openssl/md5.h" HAVE_OPENSSL_MD5_H ) endif (OPENSSL_FOUND) check_library_exists( crypt crypt "" HAVE_LIBCRYPT ) if (HAVE_LIBCRYPT) - target_link_libraries(sys crypt) + target_link_libraries(${TARGET} crypt) endif (HAVE_LIBCRYPT) -target_link_libraries(sys libYap) -if (ANDROID) -target_link_libraries(sys android gmp) +MY_target_link_libraries(sys libYap) + +if (NOT ANDROID) +set_target_properties (sys PROPERTIES PREFIX "") endif() -set_target_properties (sys PROPERTIES PREFIX "") - -install(TARGETS sys +MY_install(TARGETS sys LIBRARY DESTINATION ${dlls} ARCHIVE DESTINATION ${dlls} ) configure_file ("sys_config.h.cmake" "sys_config.h" ) - diff --git a/os/CMakeLists.txt b/os/CMakeLists.txt index 4a33ab1ac..4685648aa 100644 --- a/os/CMakeLists.txt +++ b/os/CMakeLists.txt @@ -1,6 +1,7 @@ set (YAPOS_SOURCES alias.c + assets.c charsio.c chartypes.c console.c @@ -31,10 +32,40 @@ set (YAPOS_HEADERS fmemopen.h yapio.h sysbits.h + VFS.h ) + include_directories (../H ../include ../OPTYap . ${GMP_INCLUDE_DIR} ${PROJECT_BINARY_DIR}) -include_directories (../H ../include ../OPTYap . ${GMP_INCLUDE_DIR} ${PROJECT_BINARY_DIR}) + set (POSITION_INDEPENDENT_CODE TRUE) + + add_component (libYAPOs + ${YAPOS_SOURCES} + ) + + MY_set_target_properties(libYAPOs + PROPERTIES + # RPATH ${libdir} VERSION ${LIBYAPTAI_FULL_VERSION} + # SOVERSION ${LIBYAPTAI_MAJOR_VERSION}.${LIBYAPTAI_MINOR_VERSION} + POSITION_INDEPENDENT_CODE TRUE + ) + + + #set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${GMP_LIBRARIES} ) + + set (YAPOS_PL_SOURCES + edio.yap + chartypes.yap + ) + + install (FILES ${YAPOS_PL_SOURCES} + DESTINATION ${libpl}/os ) + + + +include(CheckFunctionExists) +include(CheckSymbolExists) +include(CheckVariableExists) option (READLINE "GNU readline console" ON) @@ -55,15 +86,14 @@ include_directories (../H ../include ../OPTYap . ${GMP_INCLUDE_DIR} ${PROJECT_B # READLINE_ncurses_LIBRARY, where to find the ncurses library [might not be defined] include_directories (BEFORE ${READLINE_INCLUDE_DIR}) - - set(YAP_SYSTEM_OPTIONS "readline " ${YAP_SYSTEM_OPTIONS} PARENT_SCOPE) - set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${READLINE_LIBRARIES} ) - check_library_exists( readline readline "" HAVE_LIBREADLINE ) - - check_include_files( "stdio.h;readline/readline.h" HAVE_READLINE_READLINE_H ) + set_property( TARGET libYap APPEND PROPERTY LINK_LIBRARIES ${READLINE_LIBRARIES} ) +list( APPEND CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBRARIES} ) + check_include_files( "stdio.h;readline/readline.h" HAVE_READLINE_READLINE_H ) check_include_files( "stdio.h;readline/history.h" HAVE_READLINE_HISTORY_H ) - if (HAVE_READLINE_READLINE_H) - SET ( USE_READLINE ON ) + if (HAVE_READLINE_READLINE_H) + SET ( USE_READLINE ON PARENT_SCOPE) + set(YAP_SYSTEM_OPTIONS "readline" ${YAP_SYSTEM_OPTIONS} PARENT_SCOPE) + check_library_exists( readline readline "${READLINE_LIBRARIES}" HAVE_LIBREADLINE ) check_function_exists( add_history HAVE_ADD_HISTORY ) check_function_exists( rl_begin_undo_group HAVE_RL_BEGIN_UNDO_GROUP) check_function_exists( rl_clear_pending_input HAVE_RL_CLEAR_PENDING_INPUT) @@ -74,37 +104,18 @@ include_directories (../H ../include ../OPTYap . ${GMP_INCLUDE_DIR} ${PROJECT_B check_function_exists( rl_reset_after_signal HAVE_RL_RESET_AFTER_SIGNAL ) check_function_exists( rl_set_keyboard_input_timeout HAVE_RL_SET_KEYBOARD_INPUT_TIMEOUT ) check_function_exists( rl_set_prompt HAVE_RL_SET_PROMPT) - check_variable_exists( rl_catch_signals "readline/readline.h" HAVE_DECL_RL_CATCH_SIGNALS ) - check_symbol_exists( rl_completion_func_t stdio.h;readline/readline.h HAVE_DECL_RL_COMPLETION_FUNC_T ) - check_variable_exists( rl_done stdio.h;readline/readline.h HAVE_DECL_RL_DONE ) - check_symbol_exists( rl_hook_func_t stdio.h;readline/readline.h HAVE_DECL_RL_HOOK_FUNC_T ) + check_symbol_exists( rl_catch_signals "readline/readline.h" HAVE_DECL_RL_CATCH_SIGNALS ) + check_type_size( rl_completion_func_t RL_COMPLETION_FUNC_T ) + check_symbol_exists( rl_done stdio.h;readline/readline.h HAVE_DECL_RL_DONE ) + CHECK_TYPE_SIZE( rl_hook_func_t RL_HOOK_FUNC_T ) check_symbol_exists( rl_event_hook stdio.h;readline/readline.h HAVE_DECL_RL_EVENT_HOOK ) - check_variable_exists( rl_readline_state stdio.h;readline/readline.h HAVE_DECL_RL_READLINE_STATE ) + check_symbol_exists( rl_readline_state stdio.h;readline/readline.h HAVE_DECL_RL_READLINE_STATE ) endif() endif (READLINE_FOUND) -endif (READLINE) -set (POSITION_INDEPENDENT_CODE TRUE) - -add_library (libYAPOs OBJECT - ${YAPOS_SOURCES} - ) - -set_target_properties(libYAPOs - PROPERTIES - - # RPATH ${libdir} VERSION ${LIBYAPTAI_FULL_VERSION} - # SOVERSION ${LIBYAPTAI_MAJOR_VERSION}.${LIBYAPTAI_MINOR_VERSION} - POSITION_INDEPENDENT_CODE TRUE - OUTPUT_NAME YAPOs - depends dheap - ) - -configure_file ("${PROJECT_SOURCE_DIR}/os/YapIOConfig.h.cmake" - "${PROJECT_BINARY_DIR}/os/YapIOConfig.h" ) set( READLINE_LIBS ${READLINE_LIBRARIES} PARENT_SCOPE) +endif (READLINE) -#set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${GMP_LIBRARIES} )