Page 1 of 1

Building Harbour for Android from OSX

PostPosted: Fri Mar 08, 2019 12:00 am
by Antonio Linares
go_android.sh
Code: Select all  Expand view
export HB_PLATFORM=android
export HB_COMPILER=clang
export HB_CCPREFIX=/Users/anto/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/
export HB_INSTALL_PREFIX=/Users/anto/harbour
export HB_HOST_BIN=/Users/anto/harbour/bin/darwin/clang

export QT_PATH=/Users/anto/Qt/5.12.1/android_armv7
export HB_WITH_QT=$QT_PATH/include
export HB_QTPATH=$QT_PATH/bin

export HB_USER_CFLAGS="-D__ANDROID_API__=16 -target armv7-none-linux-androideabi -gcc-toolchain /Users/anto/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/arm-linux-androideabi/bin/ar$"
export HB_USER_DFLAGS=
export HB_USER_LDFLAGS=

make clean
make

# /Users/anto/harbour/bin/hbmk2 qtcontribs.hbp


clang.mk
Code: Select all  Expand view
ifeq ($(HB_BUILD_MODE),cpp)
   ifneq ($(findstring clang$(subst x, ,x)version$(subst x, ,x)1,$(shell clang --version)),)
      HB_BUILD_MODE := c
   endif
endif

ifeq ($(HB_BUILD_MODE),cpp)
   HB_CMP := clang++
else
   HB_CMP := /bin/armv7a-linux-androideabi28-clang
endif

OBJ_EXT := .o
LIB_PREF := lib
LIB_EXT := .a

HB_DYN_COPT := -DHB_DYNLIB -fPIC

CC := $(HB_CCACHE) $(HB_CCPREFIX)$(HB_CMP)$(HB_CCSUFFIX)
ifneq ($(filter --analyze, $(HB_USER_CFLAGS)),)
   CC_IN :=
else
   CC_IN := -c
endif
CC_OUT := -o

CFLAGS += -I. -I$(HB_HOST_INC)

ifneq ($(HB_BUILD_WARN),no)
   CFLAGS += -W -Wall
else
   CFLAGS += -Wmissing-braces -Wreturn-type -Wformat
   ifneq ($(HB_BUILD_MODE),cpp)
      CFLAGS += -Wimplicit-int -Wimplicit-function-declaration
   endif
endif

ifneq ($(HB_BUILD_OPTIM),no)
   CFLAGS += -O3
endif

ifeq ($(HB_BUILD_DEBUG),yes)
   CFLAGS += -g
endif

LD := $(CC)
LD_OUT := -o

LIBPATHS := $(foreach dir,$(LIB_DIR) $(SYSLIBPATHS),-L$(dir))
LDLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib))

LDFLAGS += $(LIBPATHS)

AR := $(HB_CCPREFIX)/arm-linux-androideabi/bin/ar
AR_RULE = ( $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) $(ARSTRIP) ) || ( $(RM) $(LIB_DIR)/$@ && $(FALSE) )

DY := $(CC)
DFLAGS += -shared $(LIBPATHS)
DY_OUT := -o$(subst x,x, )
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS),-l$(lib))

DY_RULE = $(DY) $(DFLAGS) -Wl,-soname,$(DYN_NAME_CPT) $(HB_USER_DFLAGS) $(DY_OUT)$(DYN_DIR)/$@ $^ $(DLIBS) $(DYSTRIP) && $(LN) $(@F) $(DYN_FILE_NVR) && $(LN) $(@F) $(DYN_FILE_CPT)

include $(TOP)$(ROOT)config/rules.mk

Re: Building Harbour for Android from OSX

PostPosted: Fri Mar 08, 2019 10:47 am
by Antonio Linares
Building qtcontribs for Android from OSX:

https://groups.google.com/forum/#!topic/qtcontribs/7pIc-AaHzEA

As QT Creator changes as Android Studio, etc. change too, the best way to find the right flags is to create a project with QT Creator and review the used flags in the generated Makefile

Also I have found that building Harbour on Android itself (using termux) is simpler (can't build qtcontribs there, thats the disadvantage)

Re: Building Harbour for Android from OSX

PostPosted: Fri Mar 08, 2019 11:23 pm
by Antonio Linares
There were some errors in my previous post. This one is ok:

https://groups.google.com/d/msg/qtcontribs/7pIc-AaHzEA/EMoyHzJ5CAAJ

You may download the Harbour and qtcontribs libraries for Android already built from here:
https://github.com/FiveTechSoft/harbour_and_xharbour_builds/blob/master/harbour_and_qtcontribs_android_20190308.zip