summaryrefslogtreecommitdiff
path: root/android/Bootstrap/Makefile.shared
blob: 74121e6f03b4fa5fd3ad24b0faca0dac9c4ac54d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#
# Common Makefile pieces for building Java / Android apps.
#

#
# BOOTSTRAPDIR needs to be set to this directory before starting this
#

# Probably would be best to just stop fooling around with the possibilities to
# set various stuff with the -env command line parameters (and environment
# variables?) and in a plethora of rc files, and hardcode construction of
# *all* required pathnames based on the app installation location for Android
# (and iOS), etc. We don't really win anything by having so many layers of
# configurability on platforms like Android and iOS where apps based on LO
# code are very much self-contained pre-packaged thingies.

JNILIBSDIR=$(BUILDDIR)/android/jniLibs
SODEST=$(JNILIBSDIR)/$(ANDROID_APP_ABI)
OBJLOCAL=$(BUILDDIR)/android/obj/local/$(ANDROID_APP_ABI)

#
# Helpful rules ...
#

local.properties: $(BUILDDIR)/config_host.mk
	echo ndk.dir=$(ANDROID_NDK_DIR) >local.properties
	echo sdk.dir=$(ANDROID_SDK_DIR) >>local.properties

#
# Build / link the single .so for this app
#

ALL_STATIC_LIBS := $(shell $(SRCDIR)/bin/lo-all-static-libs)

LIBS = \
  -Wl,--start-group \
  $(ALL_STATIC_LIBS) \
  -Wl,--end-group

NSSLIBS = freebl3 \
	nspr4 \
	nss3 \
	nssckbi \
	nssdbm3 \
	nssutil3 \
	plc4 \
	plds4 \
	smime3 \
	softokn3 \
	sqlite3 \
	ssl3 \

WHOLELIBS = \
  -Wl,--whole-archive \
  $(addprefix -l,$(strip \
	$(if $(ENABLE_JAVA),juh) \
  )) \
  -Wl,--no-whole-archive


$(OBJLOCAL)/liblo-native-code.so : native-code.cxx $(ALL_STATIC_LIBS)
	@echo "Linking $@"
	mkdir -p $(OBJLOCAL)
	$(CXX) -fuse-ld=gold -Wl,--build-id=sha1 -Wl,--gc-sections -Wl,--version-script=../Bootstrap/version.map -Wl,--no-keep-files-mapped -Wl,--no-undefined -DANDROID -DDISABLE_DYNLOADING -shared -Wl,-soname,liblo-native-code.so -o $(OBJLOCAL)/liblo-native-code.so -I$(BUILDDIR)/config_host -I$(SRCDIR)/include native-code.cxx -L$(INSTDIR)/$(LIBO_LIB_FOLDER) $(WHOLELIBS) $(LIBS) -lc++_static -lc++abi $(if $(filter-out arm64-v8a x86_64,$(ANDROID_APP_ABI)),-landroid_support) $(if $(filter armeabi-v7a,$(ANDROID_APP_ABI)),-lunwind) $(addprefix -l,$(NSSLIBS)) -lGLESv2 -landroid -ljnigraphics -llog -lz

$(SODEST)/liblo-native-code.so : $(OBJLOCAL)/liblo-native-code.so
	mkdir -p $(SODEST)
	$(STRIP) -o $(SODEST)/liblo-native-code.so $(OBJLOCAL)/liblo-native-code.so
	#to keep some symbols, eg.: $(STRIP) -o $(SODEST)/liblo-native-code.so $(OBJLOCAL)/liblo-native-code.so -w -K 'Java*'

$(SODEST)/nss-libraries : 
	mkdir -p $(SODEST)
	$(foreach lib,$(NSSLIBS),$(STRIP) -o $(SODEST)/lib$(lib).so $(INSTDIR)/$(LIBO_LIB_FOLDER)/lib$(lib).so;)

$(SODEST)/libc++_shared.so : $(ANDROID_NDK_DIR)/sources/cxx-stl/llvm-libc++/libs/$(ANDROID_APP_ABI)/libc++_shared.so
	mkdir -p $(SODEST)
	cp $< $@

link-so: $(SODEST)/liblo-native-code.so $(SODEST)/nss-libraries $(SODEST)/libc++_shared.so

# If you reinstall an app several times *on the emulator*, even if you
# uninstall it between, disk space seems to leak that won't get recycled until
# you stop and start... No idea if this holds for a device, too. (And you
# can't "stop" a device anyway.)

stop-start-cycle:
	$(ANDROID_SDK_DIR)/platform-tools/adb shell stop && $(ANDROID_SDK_DIR)/platform-tools/adb shell start && sleep 10

# build-host specific stuff (build paths and the like) to keep build.gradle static
liboSettings.gradle: $(BUILDDIR)/config_build.mk $(BUILDDIR)/config_host.mk
	@echo "creating $@"
	( \
		echo "// created by Makefile.shared - your changes will be overridden" \
		&& echo "ext {" \
		&& echo "    liboSrcRoot         = '$(SRC_ROOT)'" \
		&& echo "    liboJniLibsdir      = '$(JNILIBSDIR)'" \
		&& echo "    liboWorkdir         = '$(WORKDIR)'" \
		&& echo "    liboInstdir         = '$(INSTDIR)'" \
		&& echo "    liboEtcFolder       = '$(LIBO_ETC_FOLDER)'" \
		&& echo "    liboUreMiscFolder   = '$(LIBO_URE_MISC_FOLDER)'" \
		&& echo "    liboSharedResFolder = '$(LIBO_SHARE_RESOURCE_FOLDER)'" \
		&& echo "    liboUREJavaFolder   = '$(LIBO_URE_SHARE_JAVA_FOLDER)'" \
		&& echo "    liboShareJavaFolder = '$(LIBO_SHARE_JAVA_FOLDER)'" \
		&& echo "    liboExampleDocument = '$(if $(exampleDocument),$(exampleDocument),$(SRC_ROOT)/android/default-document/example.odt)'" \
		&& echo "    liboVersionMajor    = '$(LIBO_VERSION_MAJOR)'" \
		&& echo "    liboVersionMinor    = '$(LIBO_VERSION_MINOR)'" \
		&& echo "    liboGitFullCommit   = '$(shell cd $(SRCDIR) && git log -1 --format=%H)'" \
		&& echo "}" \
		&& echo "android.defaultConfig {" \
		&& echo "    applicationId '$(ANDROID_PACKAGE_NAME)'" \
		&& echo "    archivesBaseName = 'LibreOfficeViewer'" \
		&& echo "    versionCode project.hasProperty('cmdVersionCode') ? cmdVersionCode.toInteger() : $(if $(versionCode),$(versionCode),1)" \
		&& echo "    versionName '$(LIBO_VERSION_MAJOR).$(LIBO_VERSION_MINOR).$(LIBO_VERSION_MICRO).$(LIBO_VERSION_PATCH)$(LIBO_VERSION_SUFFIX)$(LIBO_VERSION_SUFFIX_SUFFIX)/$(shell cd $(SRCDIR) && git log -1 --format=%h)/$(OOO_VENDOR)'" \
		&& echo "}" \
	) > $@