This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/CMakeLists.txt

834 lines
20 KiB
CMake
Raw Normal View History

2017-10-17 00:13:09 +01:00
2016-07-31 10:56:54 +01:00
# value of 3.4.0 or lower.
2017-06-13 13:34:17 +01:00
cmake_minimum_required(VERSION 3.4)
2014-12-14 12:05:43 +00:00
# Sets the version of CMake required to build the native
# library. You should either keep the default value or pass a
2016-07-31 10:56:54 +01:00
# value of 3.4.0 or lower.
2017-05-02 07:42:21 +01:00
include(CMakeToolsHelpers OPTIONAL)
2015-08-08 15:11:29 +01:00
2016-08-03 00:30:02 +01:00
project( YAP )
2017-07-30 22:24:00 +01:00
include(FeatureSummary)
2017-10-17 00:13:09 +01:00
include(GNUInstallDirs)
2017-05-08 18:51:29 +01:00
2017-06-12 18:02:37 +01:00
set(YAP_APP_DIR "${CMAKE_SOURCE_DIR}/../..")
2017-10-17 00:13:09 +01:00
cmake_policy(VERSION 3.4)
2016-11-11 07:23:34 +00:00
2016-07-31 10:56:54 +01:00
set(
2016-12-16 17:22:50 +00:00
CMAKE_MODULE_PATH
"${CMAKE_SOURCE_DIR}"
"${CMAKE_SOURCE_DIR}/cmake"
)
2016-05-30 11:23:36 +01:00
2017-11-10 23:08:35 +00:00
IF (ENV{CONDA_BUILD} STREQUAL "1")
set (ANACONDA YES)
endif()
2016-07-31 10:56:54 +01:00
include(CheckIncludeFiles)
2015-06-19 01:30:13 +01:00
include(CheckLibraryExists)
include(CheckSymbolExists)
include(CheckTypeSize)
2016-07-31 10:56:54 +01:00
include(CMakeDependentOption)
include(MacroOptionalAddSubdirectory)
include(MacroOptionalFindPackage)
2017-07-30 22:24:00 +01:00
include(FeatureSummary)
2016-07-31 10:56:54 +01:00
include(FindPackageHandleStandardArgs)
2017-10-17 00:13:09 +01:00
# Optional Components
#
include(CheckIncludeFileCXX)
include(CheckFunctionExists)
include(CheckFunctionExists)
include(CheckPrototypeExists)
include(CheckVariableExists)
include(CheckCXXSourceCompiles)
include(TestBigEndian)
include(GetGitRevisionDescription)
2016-12-10 07:06:16 +00:00
2016-07-31 10:56:54 +01:00
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.z
# You can define libraries, and CMake builds it for you.
2016-07-31 10:56:54 +01:00
# Gradle automatically packages shared libraries with your APK.
2015-06-19 01:30:13 +01:00
2016-11-11 07:23:34 +00:00
#cross-compilation support
# Search packages for host system instead of packages for target system
# in case of cross compilation define these macro by toolchain file
2016-11-11 07:23:34 +00:00
if(NOT COMMAND find_host_package)
2017-10-17 00:13:09 +01:00
macro(find_host_package)
find_package(${ARGN})
endmacro()
2016-11-11 07:23:34 +00:00
endif()
if(NOT COMMAND find_host_program)
2017-10-17 00:13:09 +01:00
macro(find_host_program)
find_program(${ARGN})
endmacro()
2016-11-11 07:23:34 +00:00
endif()
2015-06-19 01:30:13 +01:00
2017-11-08 09:29:01 +00:00
if (POLICY CMP0003)
cmake_policy(SET CMP0003 NEW)
2017-11-10 23:08:35 +00:00
endif()
2017-11-08 09:29:01 +00:00
if (POLICY CMP0068)
cmake_policy(SET CMP0068 NEW)
2017-11-10 23:08:35 +00:00
endif()
2017-11-08 09:29:01 +00:00
2017-11-10 23:08:35 +00:00
option(BUILD_SHARED_LIBS "Build shared library" ON)
2017-11-08 09:29:01 +00:00
2016-12-16 17:22:50 +00:00
set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
set (CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
2017-10-11 02:24:15 +01:00
#begining stuff for top CMakeLists
2016-06-02 11:52:22 +01:00
2017-10-11 02:24:15 +01:00
include (MacroLogFeature)
2016-05-30 11:23:36 +01:00
2017-10-11 02:24:15 +01:00
if (POLICY CMP0042)
2017-10-17 00:13:09 +01:00
cmake_policy( SET CMP0042 NEW)
2017-10-11 02:24:15 +01:00
endif()
function(add_to_group list output)
2017-10-17 00:13:09 +01:00
set (tmp ${${output}})
foreach (path ${${list}})
get_source_file_property(path ${path} LOCATION)
list( APPEND tmp ${path})
endforeach ()
set (${output} ${tmp} CACHE INTERNAL "prolog library files")
2017-10-11 02:24:15 +01:00
endfunction(add_to_group list output )
function(add_to_libgroup el list)
2017-11-08 09:29:01 +00:00
# add_custom_command( TARGET ${el} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${el}> ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py
# DEPENDS ${el} )
2017-10-17 00:13:09 +01:00
list( APPEND ${list} ${${el}})
set (${list} ${${list}} CACHE INTERNAL "prolog dll files")
2017-10-11 02:24:15 +01:00
endfunction(add_to_libgroup el list )
function(add_to_corelibgroup el list)
2017-11-08 09:29:01 +00:00
# add_custom_command( TARGET ${el} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${el}> $<TARGET_SONAME_FILE:${el}> $<TARGET_LINKER_FILE:${el}> ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py
# DEPENDS ${el} )
2017-10-17 00:13:09 +01:00
list( APPEND ${list} ${${el}})
set (${list} ${${list}} CACHE INTERNAL "prolog dll files")
2017-10-11 02:24:15 +01:00
endfunction(add_to_corelibgroup el list )
if (ANDROID_OLD)
2017-10-17 00:13:09 +01:00
macro ( MY_add_custom_target)
endmacro()
2017-10-11 02:24:15 +01:00
else()
2017-10-17 00:13:09 +01:00
macro ( MY_add_custom_target )
add_custom_target (${ARGN})
endmacro()
2017-10-11 02:24:15 +01:00
endif()
if (WIN32)
macro ( add_component arg1 )
add_library ( ${arg1} OBJECT ${ARGN})
endmacro()
else()
macro ( add_component arg1 )
add_library ( ${arg1} OBJECT ${ARGN})
endmacro()
endif()
macro ( add_lib arg1 )
add_library ( ${arg1} SHARED ${ARGN})
add_to_libgroup( ${arg1} YAP_DLLS )
endmacro()
macro ( add_corelib arg1 )
add_library ( ${arg1} SHARED ${ARGN})
add_to_corelibgroup( ${arg1} YAP_DLLS )
endmacro()
if (ANDROID_OLD)
2017-10-17 00:13:09 +01:00
macro ( MY_add_dependencies)
endmacro()
2017-10-11 02:24:15 +01:00
else()
2017-10-17 00:13:09 +01:00
macro ( MY_add_dependencies )
add_dependencies (${ARGN})
endmacro()
2017-10-11 02:24:15 +01:00
endif()
if (ANDROID_OLD)
2017-10-17 00:13:09 +01:00
macro ( MY_add_library)
endmacro()
2017-10-11 02:24:15 +01:00
else()
2017-10-17 00:13:09 +01:00
macro ( MY_add_library )
add_library (${ARGN})
endmacro()
2017-10-11 02:24:15 +01:00
endif()
if (ANDROID)
2017-10-17 00:13:09 +01:00
macro ( MY_add_subdirectory)
endmacro()
2017-10-11 02:24:15 +01:00
else()
2017-10-17 00:13:09 +01:00
macro ( MY_add_subdirectory )
add_subdirectory (${ARGN})
endmacro()
2017-10-11 02:24:15 +01:00
endif()
if (ANDROID_OLD)
2017-10-17 00:13:09 +01:00
macro ( MY_include)
endmacro()
2017-10-11 02:24:15 +01:00
else()
2017-10-17 00:13:09 +01:00
macro ( MY_include )
include (${ARGN})
endmacro()
2017-10-11 02:24:15 +01:00
endif()
if (ANDROID)
2017-10-17 00:13:09 +01:00
macro ( MY_install)
endmacro()
2017-10-11 02:24:15 +01:00
else()
2017-10-17 00:13:09 +01:00
macro ( MY_install )
install (${ARGN})
endmacro()
2017-10-11 02:24:15 +01:00
endif()
if (ANDROID_OLD)
2017-10-17 00:13:09 +01:00
macro ( MY_set_target_properties)
endmacro()
2017-10-11 02:24:15 +01:00
else()
2017-10-17 00:13:09 +01:00
macro ( MY_set_target_properties )
set_target_properties (${ARGN})
endmacro()
2017-10-11 02:24:15 +01:00
endif()
if (ANDROID_OLD)
2017-10-17 00:13:09 +01:00
macro ( MY_target_link_libraries)
endmacro()
2017-10-11 02:24:15 +01:00
else()
2017-10-17 00:13:09 +01:00
macro ( MY_target_link_libraries )
target_link_libraries (${ARGN})
endmacro()
2017-10-11 02:24:15 +01:00
endif()
# where we have most scripts
# set path to additional CMake modules
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(disallow)
disallow_intree_builds()
# set(CMAKE_BUILD_TYPE Debug)
2017-11-10 23:08:35 +00:00
if (APPLE)
2017-10-17 00:13:09 +01:00
set (MACOSX_RPATH ON)
set (PATH $ENV{PATH})
list (FIND ${PATH} pos /usr/local)
if (pos EQUAL -1)
set (pos 0)
endif()
list (INSERT CMAKE_PREFIX_PATH pos
/usr/local/opt/gmp
/usr/local/opt/libxml2
/usr/local/opt/openmpi
/usr/local/opt/openssl
/usr/local/opt/postgresql
/usr/local/opt/python3
/usr/local/opt/readline
/usr/local/opt/swig
)
2017-11-08 09:29:01 +00:00
endif ( )
2017-10-17 00:13:09 +01:00
if(ANDROID)
set ( datarootdir /assets )
endif()
set ( prefix ${CMAKE_INSTALL_PREFIX}) #BINDIR})
set ( bindir ${CMAKE_INSTALL_PREFIX}/bin) #BINDIR})
set ( includedir ${CMAKE_INSTALL_PREFIX}/include) #INCLUDEDIR})
set ( libdir ${CMAKE_INSTALL_PREFIX}/lib) #LIBDIR})
set ( exec_prefix ${CMAKE_INSTALL_PREFIX}/libexec) #LIBEXECDIR})
set( datarootdir ${CMAKE_INSTALL_PREFIX}/share) #DATAROOTDIR})
set ( datadir ${CMAKE_INSTALL_PREFIX}/share) #DATADIR})
set ( mandir ${CMAKE_INSTALL_PREFIX}/share/man) #MANDIR})
2017-10-27 13:56:49 +01:00
set ( docdir ${CMAKE_INSTALL_PREFIX}/share/docs) #MANDIR})
2017-10-11 02:24:15 +01:00
2017-10-17 00:13:09 +01:00
set ( libpl ${datarootdir}/Yap)
2017-10-11 02:24:15 +01:00
2017-10-17 00:13:09 +01:00
set ( dlls ${libdir}/Yap)
2017-10-11 02:24:15 +01:00
set(YAP_ROOTDIR ${prefix})
# erootdir -> rootdir
# bindir defined above
# libdir defined above
2017-10-17 00:13:09 +01:00
set(YAP_SHAREDIR ${datarootdir})
set(YAP_BINDIR ${bindir})
set(YAP_INCLUDEDIR ${includedir})
set(YAP_ROOTDIR ${prefix})
set(YAP_LIBDIR ${dlls})
2017-10-11 02:24:15 +01:00
#
#
# include( Sources NO_POLICY_SCOPE )
#
# include( Model NO_POLICY_SCOPE )
include (cudd NO-POLICY-SCOPE)
include (java NO-POLICY-SCOPE)
set (pl_library "" CACHE INTERNAL "prolog library files" )
set (pl_os_library "" CACHE INTERNAL "prolog os files" )
set (pl_boot_library "" CACHE INTERNAL "prolog boot files" )
2016-05-30 11:23:36 +01:00
2017-10-17 00:13:09 +01:00
find_package (GMP)
# GMP_FOUND - true if GMP/MPIR was found
# GMP_INCLUDE_DIRS - include search path
# GMP_LIBRARIES - libraries to link with
# GMP_LIBRARY_ #add_executable(test ${SOURCES})
2017-10-11 02:24:15 +01:00
2017-10-17 00:13:09 +01:00
list(APPEND YAP_SYSTEM_OPTIONS big_numbers)
2017-10-11 02:24:15 +01:00
2017-10-17 00:13:09 +01:00
find_package( Readline)
2017-10-11 02:24:15 +01:00
2017-10-17 00:13:09 +01:00
List(APPEND YAP_SYSTEM_OPTIONS readline)
2017-10-12 12:08:32 +01:00
# include subdirectories configuration
## after we have all functionality in
#
# ADD_SUBDIRECTORY(console/terminal)
2017-10-11 02:24:15 +01:00
#MPI STUFF
# library/mpi/mpi.c library/mpi/mpe.c
# library/lammpi/yap_mpi.c library/lammpi/hash.c library/lammpi/prologterms2c.c
# )
#WIN STUFF
# SET(PLCONS_SOURCES
# console/LGPL/pl-nt.c
# console/LGPL/pl-ntcon.c
# console/LGPL/pl-ntconsole.c
# console/LGPL/pl-ntmain.c
# )
set(YAP_FOUND ON)
set(YAP_MAJOR_VERSION 6)
set(YAP_MINOR_VERSION 3)
set(YAP_PATCH_VERSION 5)
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_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "MS_WIN64=1" )
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 )
2017-10-17 00:13:09 +01:00
set(YAP_SYSTEM_OPTIONS "unix " ${YAP_SYSTEM_OPTIONS})
2017-10-11 02:24:15 +01:00
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
2017-10-17 00:13:09 +01:00
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS DEPTH_LIMIT=1;COROUTINING=1;RATIONAL_TREES=1 )
2017-10-11 02:24:15 +01:00
# inform we are compiling YAP
2017-10-17 00:13:09 +01:00
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "_YAP_NOT_INSTALLED_=1;HAVE_CONFIG_H=1;_GNU_SOURCE" )
2017-10-11 02:24:15 +01:00
# Compilation model
# target_compile_definitions(libYap PUBLIC _XOPEN_SOURCE=700 )
#add_definitions( -Wall -Wstrict-prototypes -Wmissing-prototypes)
# Model Specific
2017-10-17 00:13:09 +01:00
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUG=1> )
2017-10-11 02:24:15 +01:00
#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 )
2017-10-17 00:13:09 +01:00
if ( ${C_COMPILER} MATCHES "GNU")
set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$<CONFIG:Release>:-O3;-fomit-frame-poinkter;-fstrict-aliasing;-freorder-blocks;-fsched-interblock> )
else()
set_property( DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$<CONFIG:Release>:-O3;-fstrict-aliasing;-freorder-blocks;-fsched-interblock> )
endif()
2017-10-11 02:24:15 +01:00
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
2017-10-17 00:13:09 +01:00
"support for procedure-call tracing" ON)
2017-10-11 02:24:15 +01:00
#TODO:
if (WITH_CALL_TRACER)
2017-10-17 00:13:09 +01:00
list (APPEND YAP_SYSTEM_OPTIONS "call_tracer " ${YAP_SYSTEM_OPTIONS})
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:LOW_LEVEL_TRACER=1> )
2017-10-11 02:24:15 +01:00
endif (WITH_CALL_TRACER)
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS UTF8PROC=1)
2017-06-13 13:34:17 +01:00
2016-11-24 04:35:39 +00:00
include_directories ( utf8proc packages/myddas packages/myddas/sqlite3/src)
2016-11-11 15:53:09 +00:00
2017-10-17 00:13:09 +01:00
2016-11-11 15:53:09 +00:00
if (ANDROID)
2017-10-17 00:13:09 +01:00
include_directories (
packages/myddas/sqlite3/src/Android/jni/sqlite
packages/myddas/sqlite3/src/Android/jni/sqlite/nativehelper
2017-06-13 13:34:17 +01:00
)
endif (ANDROID)
2016-11-11 15:53:09 +00:00
2017-06-13 13:34:17 +01:00
set_property( SOURCE ${LIBYAP_SOURCES} APPEND PROPERTY COMPILE_DEFINITIONS YAP_KERNEL=1)
2016-07-31 10:56:54 +01:00
add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1)
2016-05-30 11:23:36 +01:00
2016-07-31 10:56:54 +01:00
if (MYSQL_FOUND)
2017-10-17 00:13:09 +01:00
add_definitions(= -DMYDDAS_MYSQL=1)
2017-06-13 13:34:17 +01:00
endif()
2015-06-19 01:30:13 +01:00
2016-07-31 10:56:54 +01:00
if (ODBC_FOUND)
2017-10-17 00:13:09 +01:00
add_definitions(= -DMYDDAS_ODBC=1)
2017-06-13 13:34:17 +01:00
endif()
2016-07-31 10:56:54 +01:00
if (MYSQL_POSTGRES)
2017-10-17 00:13:09 +01:00
add_definitions(= -DMYDDAS_POSTGRES=1)
2017-06-13 13:34:17 +01:00
endif()
OPTION (WITH_SWIG " Enable SWIG interfaces to foreign languages" ON)
2017-07-25 01:10:44 +01:00
IF (WITH_SWIG OR ANDROID)
2017-10-17 00:13:09 +01:00
find_host_package (SWIG)
# macro_log_feature (SWIG_FOUND "Swig"
# "Use SWIG Interface Generator "
# "http://www.swig.org" ON)
2017-07-25 01:10:44 +01:00
ENDIF (WITH_SWIG OR ANDROID)
2016-12-16 17:22:50 +00:00
2017-10-17 00:13:09 +01:00
2017-06-13 13:34:17 +01:00
option (WITH_PYTHON
2017-10-17 00:13:09 +01:00
"Allow Python->YAP and YAP->Python" ON)
2017-06-13 13:34:17 +01:00
IF (WITH_PYTHON)
2017-10-17 00:13:09 +01:00
include(python NO_POLICY_SCOPE)
2017-06-13 13:34:17 +01:00
ENDIF (WITH_PYTHON)
2016-07-31 10:56:54 +01:00
2017-10-17 00:13:09 +01:00
List (APPEND YLIBS $<TARGET_OBJECTS:libOPTYap> )
List (APPEND YLIBS $<TARGET_OBJECTS:libYAPOs> )
List (APPEND YLIBS $<TARGET_OBJECTS:utf8proc> )
List (APPEND YLIBS $<TARGET_OBJECTS:myddas> )
List (APPEND YLIBS $<TARGET_OBJECTS:libswi> )
if (WIN32)
List (APPEND YLIBS $<TARGET_OBJECTS:Yapsqlite3> )
List (APPEND YLIBS $<TARGET_OBJECTS:YAP++> )
if (WITH_PYTHON )
List (APPEND YLIBS $<TARGET_OBJECTS:Py4YAP> )
endif()
endif()
2017-06-13 13:34:17 +01:00
2017-10-17 00:13:09 +01:00
include (Sources)
2016-12-03 16:38:07 +00:00
2017-10-11 02:24:15 +01:00
add_corelib( # Sets the name of the library.
2017-10-17 00:13:09 +01:00
libYap
2016-07-31 10:56:54 +01:00
2017-10-17 00:13:09 +01:00
# Sets the library as a shared library.
SHARED
2017-10-17 00:13:09 +01:00
${ENGINE_SOURCES}
${C_INTERFACE_SOURCES}
//${STATIC_SOURCES}
# cmake object libraries
${YLIBS}
)
2016-04-08 09:13:45 +01:00
if (WIN32)
2017-10-17 00:13:09 +01:00
target_link_libraries(libYap ${WINDLLS})
if (PYTHON_INCLUDE_DIRS AND PYTHON_LIBRARIES )
target_link_libraries(libYap ${PYTHON_LIBRARIES})
endif()
endif (WIN32)
2016-08-01 12:54:28 +01:00
2017-10-17 00:13:09 +01:00
if (GMP_FOUND)
#config.h needs this (TODO: change in code latter)
include_directories( ${GMP_INCLUDE_DIRS} )
target_link_libraries(libYap ${GMP_LIBRARIES} )
endif (GMP_FOUND)
2017-10-11 02:24:15 +01:00
2017-10-17 00:13:09 +01:00
if (READLINE_FOUND)
include_directories( ${READLINE_INCLUDE_DIR} )
target_link_libraries(libYap ${READLINE_LIBRARIES} )
# required for configure
list (APPEND CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBRARIES})
list (APPEND CMAKE_REQUIRED_INCLUDES ${READLINE_INCLUDE_DIR})
endif()
2017-10-11 02:24:15 +01:00
set(YAP_STARTUP startup.yss)
## define system
2017-10-17 00:13:09 +01:00
# Optional libraries that affect compilation
#
2017-10-11 02:24:15 +01:00
set(CMAKE_TOP_BINARY_DIR ${CMAKE_BINARY_DIR})
set(YAP_PL_SRCDIR ${CMAKE_SOURCE_DIR}/pl)
set(YAP_YAPLIB libYap${CMAKE_SHARED_LIBRARY_SUFFIX})
string(TIMESTAMP YAP_TIMESTAMP)
string( SUBSTRING ${CMAKE_SHARED_LIBRARY_SUFFIX} 1 -1 SO_EXT )
set_property(DIRECTORY PROPERTY CXX_STANDARD 11)
# rpath stuff, hopefully it works
2017-10-17 00:13:09 +01:00
# use, i.e. don't skip the full RPATH for the build tree
2017-11-08 09:29:01 +00:00
# SET(CMAKE_SKIP_BUILD_RPATH FALSE)
2017-10-11 02:24:15 +01:00
2017-11-10 23:08:35 +00:00
2017-10-11 02:24:15 +01:00
# when building, don't use the install RPATH already
# (but later on when installing)
2017-11-08 09:29:01 +00:00
# SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
2017-10-11 02:24:15 +01:00
2017-11-08 09:29:01 +00:00
# SET(CMAKE_INSTALL_RPATH ${CMAKE_CURRENT_BUILD_PATH})
2017-10-11 02:24:15 +01:00
# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
2017-11-08 09:29:01 +00:00
# SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
2017-10-11 02:24:15 +01:00
2017-11-08 09:29:01 +00:00
# the RPATH to be used when installing, but only if it's not a system directory#LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${libdir}" isSystemDir)
# IF("${isSystemDir}" STREQUAL "-1")
2017-11-10 23:08:35 +00:00
if (ANACONDA)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
SET(CMAKE_INSTALL_RPATH ${CMAKE_BINARY_DIR})
else()
2017-11-09 12:14:41 +00:00
SET(CMAKE_INSTALL_RPATH "${libdir}")
2017-11-10 23:08:35 +00:00
endif()
2017-11-08 09:29:01 +00:00
# ENDIF("${isSystemDir}" STREQUAL "-1")
2017-10-11 02:24:15 +01:00
include_directories (H
2017-10-17 00:13:09 +01:00
H/generated
include os OPTYap utf8proc JIT/HPP)
2017-10-11 02:24:15 +01:00
include_directories (BEFORE ${CMAKE_BINARY_DIR} ${CMAKE_TOP_BINARY_DIR})
if (ANDROID)
2017-10-17 00:13:09 +01:00
include_directories (CXX ${CMAKE_SOURCE_DIR}/../generated/src/jni)
2017-10-11 02:24:15 +01:00
endif()
include( Threads )
#
# include OS and I/o stuff
#
# convenience libraries
# OPTYap exports important flags
#
list(APPEND YAP_SYSTEM_OPTIONS "thread support")
2017-10-17 00:13:09 +01:00
set_target_properties(libYap
PROPERTIES OUTPUT_NAME Yap
)
MY_set_target_properties(libYap
PROPERTIES VERSION ${YAP_FULL_VERSION}
SOVERSION ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}
)
2017-11-10 23:08:35 +00:00
2017-10-11 02:24:15 +01:00
#utf-8 is not an option
# we use the nice UTF-8 package
#available at the Julia project
2017-10-17 00:13:09 +01:00
ADD_SUBDIRECTORY ( OPTYap )
ADD_SUBDIRECTORY ( os )
2017-10-11 02:24:15 +01:00
ADD_SUBDIRECTORY ( packages/myddas )
ADD_SUBDIRECTORY ( utf8proc )
ADD_SUBDIRECTORY ( library/dialect/swi/fli )
ADD_SUBDIRECTORY ( CXX )
add_subDIRECTORY ( H )
#bootstrap and saved state
add_subDIRECTORY ( pl )
ADD_SUBDIRECTORY( library)
ADD_SUBDIRECTORY( swi/library "swiLibrary" )
2016-06-02 11:52:22 +01:00
if (ANDROID)
2017-10-17 00:13:09 +01:00
target_link_libraries(libYap android log)
2016-08-22 05:31:21 +01:00
2016-07-31 10:56:54 +01:00
endif ()
2016-05-31 19:28:29 +01:00
2016-07-31 10:56:54 +01:00
set_target_properties(libYap
2017-10-17 00:13:09 +01:00
PROPERTIES OUTPUT_NAME Yap
)
2016-08-01 12:54:28 +01:00
2017-11-10 23:08:35 +00:00
# file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py)
2017-10-27 23:06:23 +01:00
2017-06-13 13:34:17 +01:00
if (PYTHONLIBS_FOUND AND SWIG_FOUND)
2017-10-17 00:13:09 +01:00
add_subdirectory(packages/python/swig)
2017-06-13 13:34:17 +01:00
2017-10-17 00:13:09 +01:00
include(FindPythonModule)
2017-06-13 13:34:17 +01:00
2017-10-17 00:13:09 +01:00
find_python_module( jupyter )
2017-06-13 13:34:17 +01:00
2017-10-17 00:13:09 +01:00
if (PY_JUPYTER)
add_subdirectory(packages/python/yap_kernel)
ENDIF()
2017-06-13 13:34:17 +01:00
endif()
2017-07-25 01:10:44 +01:00
IF (SWIG_FOUND OR ANDROID)
2017-10-17 00:13:09 +01:00
add_subDIRECTORY (packages/swig NO_POLICY_SCOPE)
2017-07-25 01:10:44 +01:00
ENDIF()
2017-10-11 02:24:15 +01:00
message(STATUS "Building YAP packages version ${YAP_VERSION}")
if (NOT WIN32)
set (BUILD_SHARED_LIBS ON)
endif()
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)
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)
2017-10-27 23:06:23 +01:00
OPTION (WITH_DOCS " Enable documentation, requires doxygen-yap" ON)
2017-10-11 02:24:15 +01:00
IF (WITH_CLPBN)
add_subDIRECTORY (packages/CLPBN)
ENDIF(WITH_CLPBN)
IF (WITH_CPLINT)
2017-10-17 00:13:09 +01:00
add_subDIRECTORY (packages/cplint)
ENDIF(WITH_CPLINT)
# 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)
IF (WITH_DOCS)
2017-10-11 02:24:15 +01:00
add_subDIRECTORY (docs)
2017-10-17 00:13:09 +01:00
ENDIF (WITH_DOCS)
2017-10-11 02:24:15 +01:00
# add_subDIRECTORY (packages/cuda)
option (WITH_GECODE
2017-10-17 00:13:09 +01:00
"interface gecode constraint solver" ON)
2017-10-11 02:24:15 +01:00
if (WITH_GECODE)
2017-10-17 00:13:09 +01:00
add_subDIRECTORY (packages/gecode)
2017-10-11 02:24:15 +01:00
endif()
add_subDIRECTORY (packages/real)
add_subDIRECTORY (packages/jpl)
add_subDIRECTORY (packages/bdd)
add_subDIRECTORY (packages/ProbLog)
add_subDIRECTORY (packages/swi-minisat2)
add_subDIRECTORY (packages/clpqr)
#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)
#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:
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
if(WIN32)
if(MSVC)
2017-10-17 00:13:09 +01:00
set(MSVC_RUNTIME "dynamic")
2017-10-11 02:24:15 +01:00
ENDIF(MSVC)
target_link_libraries(libYap wsock32 ws2_32 Shlwapi)
endif(WIN32)
add_executable (yap-bin ${CONSOLE_SOURCES})
set_target_properties (yap-bin PROPERTIES OUTPUT_NAME yap)
target_link_libraries(yap-bin libYap )
2017-10-17 00:13:09 +01:00
install(TARGETS libYap yap-bin
RUNTIME DESTINATION ${bindir}
LIBRARY DESTINATION ${libdir}
ARCHIVE DESTINATION ${libdir}
)
2017-10-11 02:24:15 +01:00
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 )
2017-10-17 00:13:09 +01:00
add_subDIRECTORY(library/lammpi)
2017-10-11 02:24:15 +01:00
2017-10-17 00:13:09 +01:00
if (MPI_C_FOUND)
2017-10-11 02:24:15 +01:00
CMAKE_DEPENDENT_OPTION( WITH_MPI ON "Interface to OpenMPI/MPICH"
"MPI_C_FOUND" OFF)
macro_optional_add_subDIRECTORY(library/mpi)
2017-10-17 00:13:09 +01:00
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)
2017-10-11 02:24:15 +01:00
## add_subDIRECTORY(utils)
#
macro_display_feature_log()
if(POLICY CMP0058)
2017-10-17 00:13:09 +01:00
cmake_policy(SET CMP0058 NEW)
2017-10-11 02:24:15 +01:00
endif(POLICY CMP0058)
include(Config NO_POLICY_SCOPE)
2017-07-30 22:24:00 +01:00
2017-10-11 02:24:15 +01:00
2017-07-30 22:24:00 +01:00
feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES
2017-10-17 00:13:09 +01:00
INCLUDE_QUIET_PACKAGES
)