Kaydet (Commit) 5510127e authored tarafından Tor Lillqvist's avatar Tor Lillqvist

Android code refactorig and hacking

Sorry for the large unstructured commit. But hey, the Android code is
experimental so far.

Extract the native lo-bootstrap code into a fairly normal library
built in sal. (Previously it was the JNI part of the "Bootstrap" app.)
Just linkink normally to liblo-bootstrap from C++ code that uses it
works fine, no need to do a dlsym lookup.

Bootstrap is still a subclass of NativeActivity and can thus still be
used as an "app" (to start unit tests, or whatever), but can also be
used from some other app's Java code to just get access to the
lo-bootstrap native methods.

Introduce a new top-level "module", android, for Bootstrap and the
experiments with DocumentLoader.

Note that the experimental DocumentLoader app still crashes. It can't
create the com.sun.star.frame.Desktop instance.

I spent lots of time debugging in the painfully inadequate
ndk-gdb. (Even the newer gdb build from the "mingw-and-ndk" project is
quite crappy in many ways.) I should really experiment with
corresponding code on a normal platform first before even trying on
Android. Basically, I think that if I just can get the concept of Java
code that instantiates and uses LO components *in-process* working on
a normal desktop platform, it should work on Android, too.
üst a7fe1a0a
...@@ -17,13 +17,9 @@ endef ...@@ -17,13 +17,9 @@ endef
# The default target just builds. # The default target just builds.
# lo-bootstrap.jar is used from other LO apps than the test ones we
# include in the .apk here.
all: build-ant lo-bootstrap.jar all: build-ant lo-bootstrap.jar
build-ndk: copy-stuff:
ndk-build V=1
# #
# Copy shared libraries we need to libs/armeabi-v7a so that ant will # Copy shared libraries we need to libs/armeabi-v7a so that ant will
# include them in the .apk. # include them in the .apk.
...@@ -31,16 +27,21 @@ build-ndk: ...@@ -31,16 +27,21 @@ build-ndk:
# Copy them to obj/local/armeabi-v7a, too, where gdb will look for # Copy them to obj/local/armeabi-v7a, too, where gdb will look for
# them. # them.
# #
# First the cppunittester "program" from here, which as all "program" mkdir -p $(SODEST) $(OBJLOCAL)
#
# First the most important one, liblo-bootstrap.so
$(call COPY,$(OUTDIR)/lib/liblo-bootstrap.so)
#
# Then the cppunittester "program". As all "program"
# files we build for Android actually is a shared object. # files we build for Android actually is a shared object.
$(call COPY,../../$(INPATH)/bin/cppunittester,libcppunittester.so) $(call COPY,$(OUTDIR)/bin/cppunit/cppunittester,libcppunittester.so)
# #
# The cppunit library # The cppunit library
$(call COPY,$(OUTDIR)/lib/libcppunit-1.12.so) $(call COPY,$(OUTDIR)/lib/libcppunit-1.12.so)
# #
# cppunit "plug-ins", first ones from sal # cppunit "plug-ins", first ones from sal
# #
$(call COPY,../../$(INPATH)/lib/*.so) $(call COPY,../../sal/$(INPATH)/lib/*.so)
# #
# and ones from other modules. Note that depending on when you try # and ones from other modules. Note that depending on when you try
# this, these might not have been built yet. # this, these might not have been built yet.
...@@ -101,26 +102,28 @@ build-ndk: ...@@ -101,26 +102,28 @@ build-ndk:
sed -e 's!uri="./!uri="$(APP_DATA_PATH)/lib/!g' <$(SRC_ROOT)/testtools/$(INPATH)/lib/$${F}.rdb >assets/lib/$${F}.rdb; \ sed -e 's!uri="./!uri="$(APP_DATA_PATH)/lib/!g' <$(SRC_ROOT)/testtools/$(INPATH)/lib/$${F}.rdb >assets/lib/$${F}.rdb; \
done done
build-ant: build-ndk build-ant: copy-stuff
unset JAVA_HOME && ant debug unset JAVA_HOME && ant debug
install: build-ndk lo-bootstrap.jar: build-ant
cd bin/classes && jar cvf ../../lo-bootstrap.jar fi/iki/tml org/libreoffice/android/Bootstrap.class
install: copy-stuff lo-bootstrap.jar
cp lo-bootstrap.jar $(OUTDIR)bin
unset JAVA_HOME && ant debug install unset JAVA_HOME && ant debug install
@echo @echo
@echo 'Run it with something like what "make run" does (see Makefile)' @echo 'Run it with something like what "make run" does (see Makefile)'
@echo @echo
lo-bootstrap.jar: build-ant run:
cd bin/classes && jar cvf ../../lo-bootstrap.jar fi/iki/tml org/libreoffice/android/Bootstrap.class
run: install
# Note: these are just examples. # Note: these are just examples.
# #
adb shell am start -n org.libreoffice.android/.Bootstrap -e lo-main-library libcppunittester -e lo-main-cmdline "$(APP_DATA_PATH)/lib/libqa_sal_types.so" adb shell am start -n org.libreoffice.android/.Bootstrap -e lo-main-library libcppunittester -e lo-main-cmdline "$(APP_DATA_PATH)/lib/libqa_sal_types.so"
# #
sleep 10
adb shell am start -n org.libreoffice.android/.Bootstrap -e lo-main-library libcppunittester -e lo-main-cmdline "$(APP_DATA_PATH)/lib/libtest_i18npool_test_breakiterator.so --protector libunoexceptionprotector.so unoexceptionprotector '-env:UNO_TYPES=file:///assets/bin/udkapi.rdb file:///assets/bin/types.rdb' '-env:UNO_SERVICES=file:///assets/xml/ure/services.rdb file:///assets/ComponentTarget/i18npool/util/i18npool.component' -env:LO_LIB_DIR=file://$(APP_DATA_PATH)/lib" adb shell am start -n org.libreoffice.android/.Bootstrap -e lo-main-library libcppunittester -e lo-main-cmdline "$(APP_DATA_PATH)/lib/libtest_i18npool_test_breakiterator.so --protector libunoexceptionprotector.so unoexceptionprotector '-env:UNO_TYPES=file:///assets/bin/udkapi.rdb file:///assets/bin/types.rdb' '-env:UNO_SERVICES=file:///assets/xml/ure/services.rdb file:///assets/ComponentTarget/i18npool/util/i18npool.component' -env:LO_LIB_DIR=file://$(APP_DATA_PATH)/lib"
# #
adb shell am start -n org.libreoffice.android/.Bootstrap -e lo-main-library libunoexe -e lo-main-cmdline "-ro /assets/lib/uno_services.rdb -ro /assets/lib/uno_types.rdb -s com.sun.star.test.bridge.BridgeTest -- com.sun.star.test.bridge.CppTestObject" -e lo-main-delay 2 # adb shell am start -n org.libreoffice.android/.Bootstrap -e lo-main-library libunoexe -e lo-main-cmdline "-ro /assets/lib/uno_services.rdb -ro /assets/lib/uno_types.rdb -s com.sun.star.test.bridge.BridgeTest -- com.sun.star.test.bridge.CppTestObject" -e lo-main-delay 2
clean: clean:
rm -rf bin assets rm -rf bin assets
...@@ -72,6 +72,9 @@ public class Bootstrap extends NativeActivity ...@@ -72,6 +72,9 @@ public class Bootstrap extends NativeActivity
// Wrapper for system() // Wrapper for system()
public static native void system(String cmdline); public static native void system(String cmdline);
// Wrapper for putenv()
public static native void putenv(String string);
public static void setup(Activity activity) public static void setup(Activity activity)
{ {
String dataDir = null; String dataDir = null;
......
NDK_HOME:=$(shell type -p ndk-build)
NDK_HOME:=$(shell dirname $(NDK_HOME))
SODEST=libs/armeabi-v7a
OBJLOCAL=obj/local/armeabi-v7a
define COPYSO
cp $(1) $(SODEST)$(if $(2),/$(2)) && \
arm-linux-androideabi-strip --strip-debug $(SODEST)$(if $(2),/$(2),/$(notdir $(1))) && \
cp $(1) $(OBJLOCAL)$(if $(2),/$(2))
endef
define COPYJAR
cp $(1) libs
endef
# The default target just builds.
all: build-ant
copy-stuff:
# First always clean
rm -rf libs $(OBJLOCAL)
mkdir -p $(SODEST) $(OBJLOCAL)
#
# Copy jar files we need, and even construct one.
#
for F in $(strip \
java_uno \
juh \
jurt \
ridl \
unoloader \
); do \
$(call COPYJAR,$(OUTDIR)/bin/$${F}.jar); \
done
#
# lo-bootstrap.jar from ../../Bootstrap
#
cp ../../Bootstrap/lo-bootstrap.jar libs
#
# com.sun.star.frame.XComponentLoader is not in any jar
#
cd libs && \
LD_LIBRARY_PATH=$(OUTDIR_FOR_BUILD)/lib \
DYLD_LIBRARY_PATH=$(OUTDIR_FOR_BUILD)/lib \
$(OUTDIR_FOR_BUILD)/bin/javamaker -BUCR -nD \
$(OUTDIR)/bin/udkapi.rdb $(OUTDIR)/bin/offapi.rdb \
-Tcom.sun.star.frame.XComponentLoader && \
jar cvf more.jar com
#
# Copy shared libraries (including UNO components) we need to
# libs/armeabi-v7a so that ant will include them in the .apk.
#
# Copy them to obj/local/armeabi-v7a, too, where gdb will look for
# them.
#
for F in $(strip \
comphelpgcc3 \
gcc3_uno \
i18nisolang1gcc3 \
i18nutilgcc3 \
icudatalo \
icui18nlo \
icuuclo \
java_uno \
juh \
juhx \
jvmaccessgcc3 \
lo-bootstrap \
localedata_en \
localedata_others \
reg \
sal_textenc \
store \
ucbhelper4gcc3 \
uno_cppu \
uno_sal \
uno_salhelpergcc3 \
uno_cppuhelpergcc3 \
xml2 \
xmlreader \
bootstrap.uno \
i18npool.uno \
); do \
$(call COPYSO,$(OUTDIR)/lib/lib$${F}.so); \
done
#
# Then the shared GNU C++ library
$(call COPYSO,$(NDK_HOME)/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a/libgnustl_shared.so)
#
# Then other "assets". Let the directory structure under assets mimic
# that under solver for now.
mkdir -p assets/bin assets/lib assets/xml/ure assets/ComponentTarget/i18npool/util
cp $(OUTDIR)/bin/udkapi.rdb assets/bin
cp $(OUTDIR)/bin/types.rdb assets/bin
cp $(OUTDIR)/bin/uno.ini assets
cp $(OUTDIR)/xml/ure/services.rdb assets/xml/ure
cp $(SRC_ROOT)/odk/examples/java/DocumentHandling/test/test1.odt assets
cp $(WORKDIR)/ComponentTarget/i18npool/util/i18npool.component assets/ComponentTarget/i18npool/util
#
# Then gdbserver and gdb.setup so that we can debug with ndk-gdb.
#
cp $(NDK_HOME)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver $(SODEST)
echo set solib-search-path ./obj/local/armeabi-v7a >$(SODEST)/gdb.setup
build-ant: copy-stuff
unset JAVA_HOME && ant debug
install: copy-stuff
unset JAVA_HOME && ant debug install
@echo
@echo 'Run it with something like what "make run" does (see Makefile)'
@echo
run: install
adb shell am start -n org.libreoffice.android.examples/.DocumentLoader -e input /assets/test1.odt
clean:
rm -rf bin assets
...@@ -30,13 +30,7 @@ package org.libreoffice.android.examples; ...@@ -30,13 +30,7 @@ package org.libreoffice.android.examples;
import android.app.Activity; import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.view.KeyEvent; import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.UnoRuntime;
...@@ -45,6 +39,8 @@ import org.libreoffice.android.Bootstrap; ...@@ -45,6 +39,8 @@ import org.libreoffice.android.Bootstrap;
public class DocumentLoader public class DocumentLoader
extends Activity { extends Activity {
private static String TAG = "DocumentLoader";
@Override @Override
public void onCreate(Bundle savedInstanceState) public void onCreate(Bundle savedInstanceState)
{ {
...@@ -52,29 +48,49 @@ public class DocumentLoader ...@@ -52,29 +48,49 @@ public class DocumentLoader
try { try {
Thread.sleep(20000);
Bootstrap.setup(this); Bootstrap.setup(this);
Bootstrap.dlopen("libjuh.so"); Bootstrap.dlopen("libjuh.so");
// Load more shlibs here explicitly in advance because
// that makes debugging work better, sigh
Bootstrap.dlopen("libuno_cppu.so");
Bootstrap.dlopen("libuno_salhelpergcc3.so");
Bootstrap.dlopen("libuno_cppuhelpergcc3.so");
Bootstrap.dlopen("libbootstrap.uno.so");
Bootstrap.dlopen("libgcc3_uno.so");
Bootstrap.dlopen("libjava_uno.so");
Bootstrap.putenv("UNO_TYPES=file:///assets/bin/udkapi.rdb file:///assets/bin/types.rdb");
Bootstrap.putenv("UNO_SERVICES=file:///assets/xml/ure/services.rdb");
// Bootstrap.putenv("INIFILENAME=vnd.sun.star.pathname:/assets/uno.ini");
com.sun.star.uno.XComponentContext xContext = null; com.sun.star.uno.XComponentContext xContext = null;
xContext = com.sun.star.comp.helper.Bootstrap.defaultBootstrap_InitialComponentContext(); xContext = com.sun.star.comp.helper.Bootstrap.defaultBootstrap_InitialComponentContext();
Log.i(TAG, "xContext is" + (xContext!=null ? " not" : "") + " null");
com.sun.star.lang.XMultiComponentFactory xMCF = com.sun.star.lang.XMultiComponentFactory xMCF =
xContext.getServiceManager(); xContext.getServiceManager();
Object oDesktop = xMCF.createInstanceWithContext( Object oDesktop = xMCF.createInstanceWithContext(
"com.sun.star.frame.Desktop", xContext); "com.sun.star.frame.Desktop", xContext);
Log.i(TAG, "oDesktop is" + (oDesktop!=null ? " not" : "") + " null");
com.sun.star.frame.XComponentLoader xCompLoader = com.sun.star.frame.XComponentLoader xCompLoader =
(com.sun.star.frame.XComponentLoader) (com.sun.star.frame.XComponentLoader)
UnoRuntime.queryInterface( UnoRuntime.queryInterface(
com.sun.star.frame.XComponentLoader.class, oDesktop); com.sun.star.frame.XComponentLoader.class, oDesktop);
// Getting the given starting directory Log.i(TAG, "xCompLoader is" + (xCompLoader!=null ? " not" : "") + " null");
String sUrl = "file:///assets/inputfile.doc";
String input = getIntent().getStringExtra("input");
if (input == null)
input = "/assets/test1.odt";
String sUrl = "file://" + input;
// Loading the wanted document // Loading the wanted document
com.sun.star.beans.PropertyValue propertyValues[] = com.sun.star.beans.PropertyValue propertyValues[] =
......
...@@ -69,6 +69,9 @@ SHL1STDLIBS= \ ...@@ -69,6 +69,9 @@ SHL1STDLIBS= \
$(SALHELPERLIB) \ $(SALHELPERLIB) \
$(SALLIB) $(SALLIB)
.IF "$(OS)" == "ANDROID"
SHL1STDLIBS+=-llo-bootstrap
.ENDIF
.IF "$(GUI)" == "WNT" .IF "$(GUI)" == "WNT"
.IF "$(COM)"!="GCC" .IF "$(COM)"!="GCC"
......
...@@ -64,6 +64,10 @@ ...@@ -64,6 +64,10 @@
#include "vendorlist.hxx" #include "vendorlist.hxx"
#include "diagnostics.h" #include "diagnostics.h"
#ifdef ANDROID
#include <lo-bootstrap.h>
#endif
#if defined HAVE_VALGRIND_H #if defined HAVE_VALGRIND_H
#include <valgrind.h> #include <valgrind.h>
#else #else
...@@ -758,10 +762,8 @@ javaPluginError jfw_plugin_startJavaVirtualMachine( ...@@ -758,10 +762,8 @@ javaPluginError jfw_plugin_startJavaVirtualMachine(
(void) cOptions; (void) cOptions;
// On Android we always have a Java VM as we only expect this code // On Android we always have a Java VM as we only expect this code
// to be run in an Android app anyway. // to be run in an Android app anyway.
struct JNIInvokeInterface* * (*lo_get_javavm)(void) = (struct JNIInvokeInterface* * (*)(void)) dlsym(RTLD_DEFAULT, "lo_get_javavm"); *ppVm = lo_get_javavm();
fprintf(stderr, "Got lo_get_javavm = %p", lo_get_javavm); fprintf(stderr, "lo_get_javavm returns %p", *ppVm);
*ppVm = (JavaVM *) (*lo_get_javavm)();
fprintf(stderr, "lo_get_javavm returns %p", (*lo_get_javavm)());
#endif #endif
return errcode; return errcode;
......
...@@ -434,6 +434,22 @@ Java_org_libreoffice_android_Bootstrap_system(JNIEnv* env, ...@@ -434,6 +434,22 @@ Java_org_libreoffice_android_Bootstrap_system(JNIEnv* env,
(*env)->ReleaseStringUTFChars(env, cmdline, s); (*env)->ReleaseStringUTFChars(env, cmdline, s);
} }
// public static native void putenv(String string);
void
Java_org_libreoffice_android_Bootstrap_putenv(JNIEnv* env,
jobject clazz,
jstring string)
{
const jbyte *s = (*env)->GetStringUTFChars(env, string, NULL);
LOGI("putenv(%s)", s);
putenv(s);
(*env)->ReleaseStringUTFChars(env, string, s);
}
char ** char **
lo_dlneeds(const char *library) lo_dlneeds(const char *library)
{ {
......
# Version: MPL 1.1 / GPLv3+ / LGPLv3+
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License or as specified alternatively below. You may obtain a copy of
# the License at http:#www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# Major Contributor(s):
# Copyright (C) 2011 Tor Lillqvist <tml@iki.fi> (initial developer)
# Copyright (C) 2011 SUSE Linux http://suse.com (initial developer's employer)
#
# Zip parsing code lifted from Mozilla's other-licenses/android/APKOpen.cpp,
# by Michael Wu <mwu@mozilla.com>.
#
# All Rights Reserved.
#
# For minor contributions see the git repository.
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 3 or later (the "GPLv3+"), or
# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
# instead of those above.
PRJ = ..
PRJNAME = sal
TARGET = lo-bootstrap
# Too many warnings from android_native_app_glue.[ch]
EXTERNAL_WARNINGS_NOT_ERRORS = TRUE
.INCLUDE : settings.mk
.IF "$(OS)" != "ANDROID"
ALL:
@: do nothing
.ENDIF
SHL1TARGET = $(TARGET)
SHL1OBJS = \
$(SLO)$/lo-bootstrap.obj
# We don't want to link liblo-bootstrap.so against
# libgnustl_shared.so. The Android dynamic linker won't find it
# anyway. One very point of liblo-bootstrap is its wrapper for
# dlopen() that searches also in the app's lib folder for needed
# shared libraries. So just re-define STDSHLCUIMT.
STDSHLCUIMT := -llog -landroid
# Also don't pointless
.INCLUDE : target.mk
...@@ -56,6 +56,10 @@ ...@@ -56,6 +56,10 @@
#endif /* MACOSX */ #endif /* MACOSX */
#ifdef ANDROID
#include <lo-bootstrap.h>
#endif
#ifdef DEBUG_OSL_FILE #ifdef DEBUG_OSL_FILE
# define OSL_FILE_TRACE osl_trace # define OSL_FILE_TRACE osl_trace
# define PERROR( a, b ) perror( a ); fprintf( stderr, b ) # define PERROR( a, b ) perror( a ); fprintf( stderr, b )
...@@ -917,8 +921,7 @@ SAL_CALL osl_openFile( rtl_uString* ustrFileURL, oslFileHandle* pHandle, sal_uIn ...@@ -917,8 +921,7 @@ SAL_CALL osl_openFile( rtl_uString* ustrFileURL, oslFileHandle* pHandle, sal_uIn
{ {
void *address; void *address;
size_t size; size_t size;
void *(*lo_apkentry)(const char *, size_t *) = (void *(*)(const char *, size_t *)) dlsym(RTLD_DEFAULT, "lo_apkentry"); address = lo_apkentry(buffer, &size);
address = (*lo_apkentry)(buffer, &size);
return osl_openMemoryAsFile(address, size, pHandle); return osl_openMemoryAsFile(address, size, pHandle);
} }
#endif #endif
......
...@@ -43,6 +43,10 @@ ...@@ -43,6 +43,10 @@
#include <sys/ldr.h> #include <sys/ldr.h>
#endif #endif
#ifdef ANDROID
#include <lo-bootstrap.h>
#endif
/* implemented in file.c */ /* implemented in file.c */
extern int UnicodeToText(char *, size_t, const sal_Unicode *, sal_Int32); extern int UnicodeToText(char *, size_t, const sal_Unicode *, sal_Int32);
...@@ -96,8 +100,7 @@ static sal_Bool getModulePathFromAddress(void * address, rtl_String ** path) { ...@@ -96,8 +100,7 @@ static sal_Bool getModulePathFromAddress(void * address, rtl_String ** path) {
Dl_info dl_info; Dl_info dl_info;
#ifdef ANDROID #ifdef ANDROID
int (*lo_dladdr)(void *, Dl_info *) = dlsym(RTLD_DEFAULT, "lo_dladdr"); result = lo_dladdr(address, &dl_info);
result = (*lo_dladdr)(address, &dl_info);
#else #else
result = dladdr(address, &dl_info); result = dladdr(address, &dl_info);
#endif #endif
......
...@@ -59,6 +59,10 @@ ...@@ -59,6 +59,10 @@
#include "uunxapi.h" #include "uunxapi.h"
#ifdef ANDROID
#include <lo-bootstrap.h>
#endif
/*************************************** /***************************************
osl_bootstrap_getExecutableFile_Impl(). osl_bootstrap_getExecutableFile_Impl().
...@@ -129,11 +133,25 @@ oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl ( ...@@ -129,11 +133,25 @@ oslProcessError SAL_CALL osl_bootstrap_getExecutableFile_Impl (
oslProcessError result = osl_Process_E_NotFound; oslProcessError result = osl_Process_E_NotFound;
#ifdef ANDROID #ifdef ANDROID
/* On Android we want the address of the "lo_main()" function, as /* On Android we in theory want the address of the "lo_main()"
* that is what corresponds to "main()" in LibreOffice programs on * function, as that is what corresponds to "main()" in
* normal desktop OSes. * LibreOffice programs on normal desktop OSes.
*
* But that is true only for apps with a "native activity", using
* <sal/main.h> and the org.libreoffice.android.Bootstrap
* mechanism. For more normal (?) Android apps that just use
* LibreOffice libraries (components) where the main program is in
* Java, that just use LibreOffice libraries, there is no
* lo_main(). (Note that we don't know for sure yet how
* complicated it might be to write such Android apps...)
*
* Maybe best to just pick some function in liblo-bootstrap.so
* which also such Java apps *must* load as the very first
* LibreOffice native library. We store all LibreOffice native
* shared libraries an app uses in the same folder anyway, so it
* doesn't really matter.
*/ */
void * addr = dlsym (RTLD_DEFAULT, "lo_main"); void * addr = (void *) &lo_dlopen;
#else #else
/* Determine address of "main()" function. */ /* Determine address of "main()" function. */
void * addr = dlsym (RTLD_DEFAULT, "main"); void * addr = dlsym (RTLD_DEFAULT, "main");
......
...@@ -3,13 +3,14 @@ sa sal usr1 - all sa_mkout NULL ...@@ -3,13 +3,14 @@ sa sal usr1 - all sa_mkout NULL
sa sal\inc nmake - all sa_inc NULL sa sal\inc nmake - all sa_inc NULL
sa sal\typesconfig nmake - all sa_tc sa_inc NULL sa sal\typesconfig nmake - all sa_tc sa_inc NULL
sa sal\cpprt nmake - u sa_cpprt sa_util sa_inc NULL sa sal\cpprt nmake - u sa_cpprt sa_util sa_inc NULL
sa sal\android nmake - u sa_android NULL
sa sal\rtl\source nmake - all sa_rtl sa_tc.u sa_inc NULL sa sal\rtl\source nmake - all sa_rtl sa_tc.u sa_inc NULL
sa sal\textenc nmake - all sa_textenc sa_tc.u sa_inc NULL sa sal\textenc nmake - all sa_textenc sa_tc.u sa_inc NULL
sa sal\systools\win32\uwinapi nmake - n sa_uwinapi sa_inc NULL sa sal\systools\win32\uwinapi nmake - n sa_uwinapi sa_inc NULL
sa sal\systools\win32\onlineupdate nmake - n sa_onlineupdate sa_uwinapi.n sa_inc NULL sa sal\systools\win32\onlineupdate nmake - n sa_onlineupdate sa_uwinapi.n sa_inc NULL
sa sal\osl\w32 nmake - n sa_osln sa_inc NULL sa sal\osl\w32 nmake - n sa_osln sa_inc NULL
sa sal\qa nmake - all sa_qa sa_util NULL sa sal\qa nmake - all sa_qa sa_util NULL
sa sal\osl\unx nmake - u sa_oslu sa_tc.u sa_inc NULL sa sal\osl\unx nmake - u sa_oslu sa_android.u sa_tc.u sa_inc NULL
sa sal\osl\all nmake - all sa_oslall sa_tc.u sa_inc NULL sa sal\osl\all nmake - all sa_oslall sa_tc.u sa_inc NULL
sa sal\util nmake - all sa_util sa_tc.u sa_oslall sa_uwinapi.n sa_onlineupdate.n sa_osln.n sa_oslu.u sa_rtl sa_textenc NULL sa sal\util nmake - all sa_util sa_tc.u sa_oslall sa_uwinapi.n sa_onlineupdate.n sa_osln.n sa_oslu.u sa_rtl sa_textenc NULL
sa sal\util\sal_textenc nmake - all sa_util_saltextenc sa_util NULL sa sal\util\sal_textenc nmake - all sa_util_saltextenc sa_util NULL
......
...@@ -31,6 +31,8 @@ symlink: %_DEST%\lib\libuno_sal.dylib.3 %_DEST%\lib\libuno_sal.dylib ...@@ -31,6 +31,8 @@ symlink: %_DEST%\lib\libuno_sal.dylib.3 %_DEST%\lib\libuno_sal.dylib
..\%__SRC%\lib\*.sl %_DEST%\lib\*.sl ..\%__SRC%\lib\*.sl %_DEST%\lib\*.sl
..\%__SRC%\lib\*.a %_DEST%\lib\*.a ..\%__SRC%\lib\*.a %_DEST%\lib\*.a
..\%__SRC%\lib\liblo-bootstrap.so %_DEST%\lib\liblo-bootstrap.so
..\%__SRC%\slb\sal.lib %_DEST%\lib\xsal.lib ..\%__SRC%\slb\sal.lib %_DEST%\lib\xsal.lib
..\%__SRC%\bin\*.dll %_DEST%\bin\*.dll ..\%__SRC%\bin\*.dll %_DEST%\bin\*.dll
......
...@@ -113,6 +113,10 @@ SHL1STDLIBS+= -z allextract -staticlib=Crun -z defaultextract ...@@ -113,6 +113,10 @@ SHL1STDLIBS+= -z allextract -staticlib=Crun -z defaultextract
SHL1STDLIBS+=-framework CoreFoundation -framework Carbon SHL1STDLIBS+=-framework CoreFoundation -framework Carbon
.ENDIF .ENDIF
.IF "$(OS)" == "ANDROID"
SHL1STDLIBS+=-llo-bootstrap
.ENDIF
SHL1LIBS+=$(SLB)$/$(TARGET).lib SHL1LIBS+=$(SLB)$/$(TARGET).lib
.IF "$(linkinc)" != "" .IF "$(linkinc)" != ""
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment