Android aupport

This commit is contained in:
Vitor Santos Costa 2016-11-11 01:23:34 -06:00
parent 51359cb175
commit c49165a7af
12 changed files with 81 additions and 95 deletions

View File

@ -917,7 +917,7 @@ static unsigned char *concat(int n, void *sv[] USES_REGS) {
buf = Malloc(room + 1); buf = Malloc(room + 1);
buf0 = buf; buf0 = buf;
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
#if _WIN32 #if _WIN32 || defined( __ANDROID__ )
strcpy(buf, sv[i]); strcpy(buf, sv[i]);
buf = (char*)buf + strlen(buf); buf = (char*)buf + strlen(buf);
#else #else

View File

@ -9,8 +9,9 @@
project( YAP ) project( YAP )
if (ANDROID) if (ANDROID)
set(YAP_APP_DIR "$CMAKE_SOURCE_DIR/../..") set(YAP_APP_DIR "${CMAKE_SOURCE_DIR}/../..")
cmake_policy(VERSION 3.4) cmake_policy(VERSION 3.4)
else () else ()
cmake_minimum_required(VERSION 2.8) cmake_minimum_required(VERSION 2.8)
include(CMakeToolsHelpers OPTIONAL) include(CMakeToolsHelpers OPTIONAL)
@ -38,6 +39,19 @@ include (GNUInstallDirs)
# You can define multiple libraries, and CMake builds it for you. # You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK. # Gradle automatically packages shared libraries with your APK.
#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(Prelims NO_POLICY_SCOPE) include(Prelims NO_POLICY_SCOPE)
@ -45,11 +59,10 @@ include(Sources NO_POLICY_SCOPE)
include(Model NO_POLICY_SCOPE) include(Model NO_POLICY_SCOPE)
include_directories ( utf8proc packages/myddas packages/myddas/sqlite3 ) include_directories ( utf8proc packages/myddas packages/myddas/sqlite3
if (ANDROID) packages/myddas/sqlite3/Android/jni/sqlite
packages/myddas/sqlite3/Android/jni/sqlite/nativehelper
include_directories ( packages/myddas/sqlite3/Android/jni/sqlite/nativehelper packages/myddas/sqlite3/Android/jni/sqlite ) )
endif (ANDROID)
add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1) add_definitions(-DUSE_MYDDAS=1 -DMYDDAS_SQLITE3=1)
if (MYSQL_FOUND) if (MYSQL_FOUND)
@ -66,21 +79,6 @@ if (MYSQL_POSTGRES)
if (ANDROID) if (ANDROID)
#
# SWIG_FOUND - set to true if SWIG is found
# SWIG_DIR - t he directory where swig is installed
# SWIG_EXECUTABLE - the path to the swig executable
# SWIG_VERSION - the version number of the swig executable
#
#
set (SWIG_CXX ${CMAKE_BINARY_DIR}/packages/swig/android/yap_swig.cpp)
add_subdirectory("packages/swig")
ADD_SUBDIRECTORY(os) ADD_SUBDIRECTORY(os)
ADD_SUBDIRECTORY(OPTYap) ADD_SUBDIRECTORY(OPTYap)
ADD_SUBDIRECTORY(packages/myddas) ADD_SUBDIRECTORY(packages/myddas)
@ -114,7 +112,7 @@ add_library( # Sets the name of the library.
SHARED SHARED
${ENGINE_SOURCES} ${ENGINE_SOURCES}
${SWIG_CXX} ${CMAKE_SOURCE_DIR}/../generated/jni/yap_wrap.cpp
${C_INTERFACE_SOURCES} ${C_INTERFACE_SOURCES}
${STATIC_SOURCES} ${STATIC_SOURCES}
${ALL_SOURCES} ${ALL_SOURCES}
@ -131,7 +129,7 @@ endif (USE_READLINE)
if (ANDROID) if (ANDROID)
add_dependencies(libYap plmyddas swig) add_dependencies(libYap plmyddas )
target_link_libraries(libYap android log) target_link_libraries(libYap android log)

View File

@ -480,8 +480,9 @@ bool YAPEngine::call(YAPPredicate ap, YAPTerm ts[]) {
YAP_dogoalinfo q; YAP_dogoalinfo q;
Term terr; Term terr;
jmp_buf q_env; jmp_buf q_env;
for (arity_t i = 0; i < arity; i++) for (arity_t i = 0; i < arity; i++)
Yap_XREGS[i + 1] = ts[i].term(); XREGS[i + 1] = ts[i].term();
q.CurSlot = Yap_StartSlots(); q.CurSlot = Yap_StartSlots();
q.p = P; q.p = P;
q.cp = CP; q.cp = CP;
@ -624,7 +625,7 @@ Term YAPEngine::fun(Term t) {
Yap_CloseHandles(q.CurSlot); Yap_CloseHandles(q.CurSlot);
throw YAPError(); throw YAPError();
} }
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "out %d", result); __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "out %ld", o);
t = Yap_GetFromSlot(q.CurSlot); t = Yap_GetFromSlot(q.CurSlot);
Yap_CloseHandles(q.CurSlot); Yap_CloseHandles(q.CurSlot);
@ -665,14 +666,14 @@ YAPQuery::YAPQuery(YAPPredicate p, YAPTerm ts[]) : YAPPredicate(p.ap) {
YAPListTerm YAPQuery::namedVars() { YAPListTerm YAPQuery::namedVars() {
CACHE_REGS CACHE_REGS
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %s %d", __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %s %ld",
vnames.text(), LOCAL_CurSlot); vnames.text(), LOCAL_CurSlot);
return vnames; // should be o return vnames; // should be o
} }
YAPListTerm YAPQuery::namedVarsCopy() { YAPListTerm YAPQuery::namedVarsCopy() {
CACHE_REGS CACHE_REGS
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %s %d", __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %s %ld",
vnames.text(), LOCAL_CurSlot); vnames.text(), LOCAL_CurSlot);
return YAPListTerm(YAP_CopyTerm(vnames.term())); // should be o return YAPListTerm(YAP_CopyTerm(vnames.term())); // should be o
} }
@ -703,7 +704,7 @@ bool YAPQuery::next() {
result = (bool)YAP_RetryGoal(&q_h); result = (bool)YAP_RetryGoal(&q_h);
} }
if (result) { if (result) {
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %d %s %d", __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "vnames %d %s %ld",
q_state, vnames.text(), LOCAL_CurSlot); q_state, vnames.text(), LOCAL_CurSlot);
} else { } else {
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "fail"); __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "fail");

View File

@ -54,7 +54,7 @@ public:
/// goal. /// goal.
inline YAPQuery(const char *s) : YAPPredicate(s, tgoal, names) { inline YAPQuery(const char *s) : YAPPredicate(s, tgoal, names) {
BACKUP_H(); BACKUP_H();
__android_log_print(ANDROID_LOG_INFO, "YAPDroid", "got game %d", __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "got game %ld",
LOCAL_CurSlot); LOCAL_CurSlot);
if (!ap) if (!ap)
return; return;

View File

@ -120,7 +120,7 @@ struct page_statistics {
#ifdef USE_PAGES_MALLOC #ifdef USE_PAGES_MALLOC
long pages_in_use; /* same as struct pages (opt.structs.h) */ long pages_in_use; /* same as struct pages (opt.structs.h) */
#endif /* USE_PAGES_MALLOC */ #endif /* USE_PAGES_MALLOC */
long structs_in_use; /* same as struct pages (opt.structs.h) */ size_t structs_in_use; /* same as struct pages (opt.structs.h) */
long bytes_in_use; long bytes_in_use;
}; };

View File

@ -95,7 +95,7 @@ struct threads_dependency_frame {
#ifdef USE_PAGES_MALLOC #ifdef USE_PAGES_MALLOC
typedef struct page_header { typedef struct page_header {
volatile int structs_in_use; volatile size_t structs_in_use;
void *allocated_area; void *allocated_area;
void *first_free_struct; void *first_free_struct;
struct page_header *previous; struct page_header *previous;
@ -125,7 +125,7 @@ struct global_page_entry {
int structs_per_page; int structs_per_page;
volatile long pages_in_use; volatile long pages_in_use;
#endif /* USE_PAGES_MALLOC */ #endif /* USE_PAGES_MALLOC */
volatile long structs_in_use; volatile size_t structs_in_use;
}; };
struct local_page_entry { struct local_page_entry {
@ -133,9 +133,10 @@ struct local_page_entry {
struct page_header *first_page; struct page_header *first_page;
struct page_header *last_page; struct page_header *last_page;
int structs_per_page; int structs_per_page;
long pages_in_use;
size_t pages_in_use;
#endif /* USE_PAGES_MALLOC */ #endif /* USE_PAGES_MALLOC */
long structs_in_use; size_t structs_in_use;
}; };
#define PgEnt_lock(X) ((X).lock) #define PgEnt_lock(X) ((X).lock)

View File

@ -105,20 +105,6 @@ else()
endif() endif()
#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()
# where we have most scripts # where we have most scripts
# set path to additional CMake modules # set path to additional CMake modules
@ -142,10 +128,10 @@ endif(POLICY CMP0043)
if (ANDROID) if (ANDROID)
set ( prefix ${YAP_APP_DIR}/app/build/generated ) set ( prefix ${YAP_APP_DIR}/app/src/generated )
set ( datarootdir ${YAP_APP_DIR}/app/build/generated/assets ) set ( datarootdir ${YAP_APP_DIR}/app/src/generated/assets )
set ( includedir "${prefix}/assets/include") set ( includedir "${prefix}/assets/include")
set ( libpl ${YAP_APP_DIR}/app/build/generated/assets/Yap) set ( libpl ${YAP_APP_DIR}/app/src/generated/assets/Yap)
else() else()
set ( prefix "${CMAKE_INSTALL_PREFIX}") set ( prefix "${CMAKE_INSTALL_PREFIX}")
set ( datarootdir "${prefix}/share") set ( datarootdir "${prefix}/share")

View File

@ -60,7 +60,7 @@ include_directories (H
include_directories (BEFORE ${CMAKE_BINARY_DIR}) include_directories (BEFORE ${CMAKE_BINARY_DIR})
if (ANDROID) if (ANDROID)
include_directories (CXX) include_directories (CXX ${CMAKE_SOURCE_DIR}/../generated/src/jni)
endif() endif()
find_package (GMP) find_package (GMP)

View File

@ -11,7 +11,6 @@ set(MYDDAS_SOURCES
myddas_shared.c myddas_shared.c
myddas_statistics.c myddas_statistics.c
myddas_top_level.c myddas_top_level.c
) )
include_directories(. sqlite3) include_directories(. sqlite3)

View File

@ -9,9 +9,9 @@ set(MYDDAS_YPP
myddas_prolog2sql_optimizer.ypp) myddas_prolog2sql_optimizer.ypp)
set(MYDDAS_DRIVERS set(MYDDAS_DRIVERS
myddas_driver.ypp "myddas_driver.ypp"
) )
message("libpl ${libpl}")
if (ANDROID) if (ANDROID)
set (PREFIX ${libpl} ) set (PREFIX ${libpl} )
else() else()
@ -30,7 +30,7 @@ function(cpp_compile output filename)
OUTPUT ${outfile} OUTPUT ${outfile}
COMMAND ${CMAKE_C_COMPILER} ${MYDDAS_FLAGS} /EP /P ${outfile} ${CMAKE_CURRENT_SOURCE_DIR}/${filename} COMMAND ${CMAKE_C_COMPILER} ${MYDDAS_FLAGS} /EP /P ${outfile} ${CMAKE_CURRENT_SOURCE_DIR}/${filename}
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${filename}") DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${filename}")
else () ELSE (MSVC)
add_custom_command( add_custom_command(
OUTPUT ${outfile} OUTPUT ${outfile}
COMMAND ${CMAKE_C_COMPILER} ${MYDDAS_FLAGS} -x c -E -P -w ${CMAKE_CURRENT_SOURCE_DIR}/${filename} -o ${outfile} COMMAND ${CMAKE_C_COMPILER} ${MYDDAS_FLAGS} -x c -E -P -w ${CMAKE_CURRENT_SOURCE_DIR}/${filename} -o ${outfile}
@ -40,7 +40,11 @@ function(cpp_compile output filename)
endfunction() endfunction()
function(cpp_driver output dbms filename) function(cpp_driver output dbms filename)
if (ANDROID)
set(outfile ${libpl}/myddas_${dbms}.yap)
else()
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/myddas_${dbms}.yap) set(outfile ${CMAKE_CURRENT_BINARY_DIR}/myddas_${dbms}.yap)
endif()
set(${output} ${${output}} ${outfile} PARENT_SCOPE) set(${output} ${${output}} ${outfile} PARENT_SCOPE)
IF (MSVC) IF (MSVC)
add_custom_command( add_custom_command(

View File

@ -1,3 +1,4 @@
message( " * Sqlite3 Data-Base (http://www.sqlite3ql.org), distributed with MYDDAS" )
set( YAPSQLITE3_SOURCES set( YAPSQLITE3_SOURCES
myddas_sqlite3.c myddas_sqlite3.c
@ -5,8 +6,30 @@ set( YAPSQLITE3_SOURCES
sqlite3.h sqlite3.h
) )
#sqlite3 is now in the system
set (SQLITE3_FOUND ON CACHE PRIVATE "")
include_directories ( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/..)
add_definitions(-DSQLITE_ENABLE_COLUMN_METADATA=1 )
add_definitions(-DSQLITE_ENABLE_JSON1=1 )
add_definitions(-DSQLITE_ENABLE_RBU=1 )
add_definitions(-DSQLITE_ENABLE_RTREE=1 )
add_definitions(-DSQLITE_ENABLE_FTS5=1 )
if (ANDROID) if (ANDROID)
set( YAPSQLITE3_ANDROID_SOURCES
include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/.. Android/jni/sqlite Android/jni/sqlite/nativehelper )
set(YAPSQLITE3_SOURCES
${YAPSQLITE3_SOURCES}
Android/jni/sqlite/JNIHelp.cpp Android/jni/sqlite/JNIHelp.cpp
Android/jni/sqlite/JniConstants.cpp Android/jni/sqlite/JniConstants.cpp
Android/jni/sqlite/android_database_SQLiteCommon.cpp Android/jni/sqlite/android_database_SQLiteCommon.cpp
@ -14,39 +37,13 @@ Android/jni/sqlite/android_database_SQLiteCommon.h
Android/jni/sqlite/android_database_SQLiteConnection.cpp Android/jni/sqlite/android_database_SQLiteConnection.cpp
Android/jni/sqlite/android_database_SQLiteDebug.cpp Android/jni/sqlite/android_database_SQLiteDebug.cpp
Android/jni/sqlite/android_database_SQLiteGlobal.cpp Android/jni/sqlite/android_database_SQLiteGlobal.cpp
Android/jni/sqlite/nativehelper/jni.h
Android/jni/sqlite/nativehelper/jniConstants.h
Android/jni/sqlite/nativehelper/JNIHelp.h
Android/jni/sqlite/nativehelper/ScopedLocalRef.h
) )
set( YAPSQLITE3_ANDROID_DIRS
Android/jni/sqlite add_component( sqlite3
Android/jni/sqlite/nativehelper ${YAPSQLITE3_SOURCES} )
)
endif (ANDROID) endif (ANDROID)
#sqlite3 is now in the system
set (SQLITE3_FOUND ON CACHE PRIVATE "")
message (
" * Sqlite3 Data-Base (http://www.sqlite3ql.org) is distributed with
MYDDAS" )
list (APPEND MYDDAS_FLAGS -DMYDDAS_SQLITE3=1)
set (MYDDAS_FLAGS ${MYDDAS_FLAGS} ON PARENT_SCOPE)
set_property(GLOBAL APPEND PROPERTY COMPILE_DEFINITIONS
-DMYDDAS_SQLITE3=1)
include_directories ( ${CMAKE_CURRENT_SOURCE_DIR}/.. ${CMAKE_CURRENT_SOURCE_DIR} ${YAPSQLITE3_ANDROID_DIRS})
add_component (Yapsqlite3 ${YAPSQLITE3_SOURCES} ${YAPSQLITE3_ANDROID_SOURCES})
if (NOT ANDROID)
#target_link_libraries(Yapsqlite3 libYap)
set_target_properties (Yapsqlite3 PROPERTIES
POSITION_INDEPENDENT_CODE ON
PREFIX ""
)
# install(TARGETS Yapsqlite3
# LIBRARY DESTINATION ${dlls}
# ARCHIVE DESTINATION ${dlls}
# )
endif()

View File

@ -11,11 +11,11 @@
${CMAKE_SOURCE_DIR}/CXX ${CMAKE_SOURCE_DIR}/CXX
) )
add_custom_target ( swig ALL add_custom_command (OUTPUT yap_swig.cpp
DEPENDS ${SWIG_CXX} COMMAND ${SWIG} -java -outdir ${CMAKE_SWIG_OUTDIR} -outcurrentdir -addextern -I${CMAKE_SOURCE_DIR}/CXX ${SWIG_SOURCES} -o yap_swig.cpp
) )
add_custom_command (OUTPUT ${SWIG_CXX} add_custom_target ( swig ALL
COMMAND ${SWIG} -java -outdir ${CMAKE_SWIG_OUTDIR} -c++ -addextern -I${CMAKE_SOURCE_DIR}/CXX -o ${SWIG_CXX}${SWIG_SOURCES} DEPENDS yap_swig.cpp
) )