From 308bb37564b2e0f58ca937a550106be3d54cc021 Mon Sep 17 00:00:00 2001 From: Sphericalkat Date: Wed, 17 Jul 2024 02:31:13 +0530 Subject: [PATCH] feat: set up build for android Signed-off-by: Sphericalkat --- .gitignore | 1 + Makefile | 3 +++ android.sh | 15 +++++++++++++++ main.go | 56 +++++++++++++++++++++++++++++++++++++++++------------- 4 files changed, 62 insertions(+), 13 deletions(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100755 android.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..30eb32a --- /dev/null +++ b/Makefile @@ -0,0 +1,3 @@ +build: + go build -o target/linux-x86-64/libreadability.so -buildmode=c-shared main.go + strip target/linux-x86-64/libreadability.so diff --git a/android.sh b/android.sh new file mode 100755 index 0000000..7284aa8 --- /dev/null +++ b/android.sh @@ -0,0 +1,15 @@ +#!/usr/bin/sh +export NDK_PATH=/home/sphericalkat/Android/Sdk/ndk/27.0.11902837 +export TARGET=aarch64-linux-android +export API=21 + +export CC=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/$TARGET$API-clang +export STRIP=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip +export CXX=$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/bin/$TARGET$API-clang++ +export CGO_CFLAGS="-I$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include" +export CGO_CPPFLAGS="-I$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include" +export CGO_CXXFLAGS="-I$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include" +export CGO_LDFLAGS="-L$NDK_PATH/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib" + +CGO_ENABLED=1 GOOS=android GOARCH=arm64 go build -o target/android-arm64/libreadability.so -buildmode=c-shared main.go +$STRIP target/android-arm64/libreadability.so \ No newline at end of file diff --git a/main.go b/main.go index 3eeb7b1..7875380 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,8 @@ typedef struct { char* text_content; // text content char* language; char* published_time; + char* err; + int success; } CArticle; */ import "C" @@ -26,10 +28,14 @@ import ( ) //export Parse -func Parse(url string) (result C.CArticle, errorMsg *C.char) { - article, err := readability.FromURL(url, 30*time.Second) +func Parse(url *C.char) (result C.CArticle) { + goURL := C.GoString(url) + article, err := readability.FromURL(goURL, 30*time.Second) if err != nil { - return C.CArticle{}, C.CString(err.Error()) + return C.CArticle{ + err: C.CString(err.Error()), + success: 0, + } } return C.CArticle{ @@ -42,20 +48,44 @@ func Parse(url string) (result C.CArticle, errorMsg *C.char) { favicon_url: C.CString(article.Favicon), content: C.CString(article.Content), text_content: C.CString(article.TextContent), - }, nil + err: nil, + success: 1, + } } //export FreeArticle func FreeArticle(article C.CArticle) { - C.free(unsafe.Pointer(article.title)) - C.free(unsafe.Pointer(article.author)) - C.free(unsafe.Pointer(article.excerpt)) - C.free(unsafe.Pointer(article.site_name)) - C.free(unsafe.Pointer(article.image_url)) - C.free(unsafe.Pointer(article.favicon_url)) - C.free(unsafe.Pointer(article.content)) - C.free(unsafe.Pointer(article.text_content)) + if article.title != nil { + C.free(unsafe.Pointer(article.title)) + } + if article.author != nil { + C.free(unsafe.Pointer(article.author)) + } + if article.excerpt != nil { + C.free(unsafe.Pointer(article.excerpt)) + } + if article.site_name != nil { + C.free(unsafe.Pointer(article.site_name)) + } + if article.image_url != nil { + C.free(unsafe.Pointer(article.image_url)) + } + if article.favicon_url != nil { + C.free(unsafe.Pointer(article.favicon_url)) + } + if article.content != nil { + C.free(unsafe.Pointer(article.content)) + } + if article.text_content != nil { + C.free(unsafe.Pointer(article.text_content)) + } + if article.language != nil { + C.free(unsafe.Pointer(article.language)) + } + if article.published_time != nil { + C.free(unsafe.Pointer(article.published_time)) + } } - func main() { + }