harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Regis <xu.re...@gmail.com>
Subject Re: harmony vm as a lib
Date Mon, 30 Nov 2009 01:51:15 GMT
Tim Prepscius wrote:
> Thanks for all of the input.  I really appreciate it.
> 
> I guess I'll post progress to this thread, so that if someone else
> wishes to do something similar, my successes and failures will be
> available as some kind of road map.
> 
> If you see me doing something which is an incredibly stupid thing to
> do, if I only knew this other way which is simple and nice..  Let me
> know!
> 
> Here is the current state of things.
> 
> 1) I have gotten stuff.
> 
> 1.5) the msvc solutions are not up to date.  oh well.
> 
> 2) The full classlib doesn't fully build cause it needs atl* ... but
> I've read online, this is because of swing.. don't need swing.
> somehow not sure how to just tell it not to build this part

try -Dexclude.module=swing,awt

> 
> 2.5) The vm, amazingly, builds. :-)
> 
> 3) I've figured out the any xml build files enough to be able to
> change things to static libraries, and exclude the /OPT:REF options
> (which I don't want)
> 
> 4) I've gotten the ICU lib, and have changed things to compile as
> static LIBs.. Except for that one dll, where the programmer *really*
> wanted to use makefiles.. ...   sigh.  And of course his makefile is
> non-standard as they all are.  So will take a while to figure out what
> to change.
> 
> 4.5) I have zlib from the main game-project compiling as static lib
> 
> 5) I've changed the JNIEXPORT define to not do the dllexport... I
> think I'll need to do this with all of the other libraries as well.
> Wish they all used some underlying REALLY_DO_DLLEXPORT define or
> something, but oh well.
> 
> 6) I've created a msvc solution that includes all of the newly created
> static libs.  And a simple .cpp file which   calls the
> JNI_CreateJavaVM.  Amazingly things link, and run.  However, dieing on
> errors of course when it tries to load dll libraries.
> 
> Next step seems to me to be modifying the dll loading function
> "process_properties_dlls" into a "process_properties_statics."  Don't
> know what will be necessary for this:
> 
> ------------------------------------------------------------------
> I like to make batch files which can replicate work.. For an accurate
> record, and cause I need to eventually build lots of different places.
> 
> Here they are:
> -------------------------------------------------------------------
> C:\source3>type setup.bat
> call "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86
> set ANT_HOME=C:\ant
> set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_17
> set PATH=%PATH%;%ANT_HOME%\bin;c:\cygwin\bin
> set ANT_OPTS=-Xms256m -Xmx512m
> 
> rem ###############################################################################
> 
> if exist %ANT_HOME%\lib\ecj-* goto ECJ_OK
> echo Things won't work without ECJ, get 3.4.2 from
> http://download.eclipse.org/eclipse/downloads/ and put it in
> %ANT_HOME%\lib
> goto END
> :ECJ_OK
> 
> if exist %windir%\system32\msvcr71* goto MSVC71_OK
> echo Somehow, they really really want msvcr71.dll, msvcp71.dll, you
> can google and download it.. stick it in %windir%\system32
> goto END
> :MSVC71_OK
> 
> rem #################################################################################
> 
> 
> :END
> 
> C:\source3>type build1.bat
> call setup.bat
> 
> svn co http://svn.apache.org/repos/asf/harmony/enhanced/trunk harmony
> 
> cd harmony
> cmd /C ant populate-src
> cd ..
> 
> 
> C:\source3>type build2.bat
> cd harmony
> cd working_classlib
> 
> cmd /C ant fetch-depends
> cmd /C ant
> 
> cd ..
> cd ..
> 
> C:\source3>type build3.bat
> cd harmony
> cd working_vm
> 
> rmdir /s /q build\windows_x86_msvc_debug
> rmdir /s /q build\windows_x86_msvc_release
> 
> cmd /C ant -Dexclude.module=swing
> cmd /C ant -Dexclude.module=swing -Dhy.cfg=release
> 
> cd ..
> cd ..
> 
> --------------------------------
> 
> Diff of files as of now:
> 
> Index: harmony/working_vm/vm/include/jni_types.h
> ===================================================================
> --- harmony/working_vm/vm/include/jni_types.h	(revision 883577)
> +++ harmony/working_vm/vm/include/jni_types.h	(working copy)
> @@ -49,8 +49,10 @@
>   */
>  #if defined (_WIN32) || defined (__WIN32__) || defined (WIN32)
> 
> -#define JNIEXPORT __declspec(dllexport)
> -#define JNIIMPORT __declspec(dllimport)
> +//#define JNIEXPORT __declspec(dllexport)
> +//#define JNIIMPORT __declspec(dllimport)
> +#define JNIEXPORT
> +#define JNIIMPORT
>  #define JNICALL __stdcall
> 
>  typedef signed __int64 jlong;
> Index: harmony/working_vm/vm/vmcore/src/init/vm_init.cpp
> ===================================================================
> --- harmony/working_vm/vm/vmcore/src/init/vm_init.cpp	(revision 883577)
> +++ harmony/working_vm/vm/vmcore/src/init/vm_init.cpp	(working copy)
> @@ -174,6 +174,11 @@
>  #define GC_DLL (vm_env->compress_references ? GC_DLL_COMP : GC_DLL_UNCOMP)
>  #endif
> 
> +static jint process_properties_dlls_statics (Global_Env *vm_env)
> +{
> +    jint status;
> +	return status;
> +}
> 
>  /**
>   * Loads DLLs.
> Index: harmony/working_vm/make/vm/em.xml
> ===================================================================
> --- harmony/working_vm/make/vm/em.xml	(revision 883577)
> +++ harmony/working_vm/make/vm/em.xml	(working copy)
> @@ -23,7 +23,7 @@
> 
>      <target name="build" depends="-common-vm">
>          <init-native/>
> -        <make-native libname="em" type="shared">
> +        <make-native libname="em" type="static">
>          <compiler id="cpp.compiler" extends="common.cpp.compiler">
>              <includepath>
>                  <dirset dir="${vm.home}">
> Index: harmony/working_vm/make/vm/gc_gen.xml
> ===================================================================
> --- harmony/working_vm/make/vm/gc_gen.xml	(revision 883577)
> +++ harmony/working_vm/make/vm/gc_gen.xml	(working copy)
> @@ -114,7 +114,7 @@
>          <compile-cc>
>              <compiler refid="cpp.compiler"/>
>          </compile-cc>
> -        <link-lib name="gc_gen_uncomp" type="shared">
> +        <link-lib name="gc_gen_uncomp" type="static">
>              <linker refid="linker"/>
>          </link-lib>
>     </target>
> @@ -127,7 +127,7 @@
>              <compiler refid="cpp.compiler"/>
>              <defineset define="COMPRESS_REFERENCE" />
>          </compile-cc>
> -        <link-lib name="gc_gen" type="shared">
> +        <link-lib name="gc_gen" type="static">
>              <linker refid="linker"/>
>          </link-lib>
>     </target>
> Index: harmony/working_vm/make/vm/interpreter.xml
> ===================================================================
> --- harmony/working_vm/make/vm/interpreter.xml	(revision 883577)
> +++ harmony/working_vm/make/vm/interpreter.xml	(working copy)
> @@ -78,7 +78,7 @@
>          </compiler>
>          </compile-cc>
> 
> -        <link-lib name="interpreter" type="shared">
> +        <link-lib name="interpreter" type="static">
>              <linker id="linker" extends="common.linker">
>                  <linkerarg
> value="--version-script=${vm.home}/interpreter/build/interpreter.exp"
> if="is.unix"/>
>                  <libset libs="harmonyvm,hythr" dir="${drlvm.shlib.dir}" />
> Index: harmony/working_vm/make/vm/vmcore.xml
> ===================================================================
> --- harmony/working_vm/make/vm/vmcore.xml	(revision 883577)
> +++ harmony/working_vm/make/vm/vmcore.xml	(working copy)
> @@ -215,7 +215,7 @@
>          </compiler>
>          </compile-cc>
> 
> -        <link-lib name="harmonyvm" type="shared">
> +        <link-lib name="harmonyvm" type="static">
>              <linker id="linker" extends="common.linker">
>                  <libset libs="port,encoder,verifier,apr-1"
>                      dir="${drlvm.lib.dir}" />
> @@ -224,8 +224,8 @@
>                  <libset libs="zdll" dir="${drlvm.lib.dir}" if="is.windows"/>
>                  <libset libs="ch" dir="${drlvm.shlib.dir}" />
> 
> -                <linkerarg
> value="/DEF:${vm.home}/vmcore/src/harmonyvm64.def"
> if="is.windows.x86_64"/>
> -                <linkerarg
> value="/DEF:${vm.home}/vmcore/src/harmonyvm.def" if="is.windows.x86"/>
> +<!--`                <linkerarg
> value="/DEF:${vm.home}/vmcore/src/harmonyvm64.def"
> if="is.windows.x86_64"/>
> +                <linkerarg
> value="/DEF:${vm.home}/vmcore/src/harmonyvm.def" if="is.windows.x86"/>
> -->
>                  <linkerarg
> value="--version-script=${vm.home}/vmcore/build/vmcore.exp"
> if="is.unix"/>
> 
>                  <syslibset type="shared"
> libs="m,dl,stdc++,z,xml2,pthread,gcc_s,rt" if="is.linux"/>
> Index: harmony/working_vm/make/vm/vmi.xml
> ===================================================================
> --- harmony/working_vm/make/vm/vmi.xml	(revision 883577)
> +++ harmony/working_vm/make/vm/vmi.xml	(working copy)
> @@ -23,7 +23,7 @@
> 
>      <target name="build" depends="-common-vm">
>          <init-native/>
> -        <make-native libname="vmi" type="shared">
> +        <make-native libname="vmi" type="static">
>              <compiler id="cpp.compiler" extends="common.cpp.compiler">
>                  <includepath>
>                      <pathelement location="${drlvm.include.dir}" />
> Index: harmony/working_vm/make/vm/hythr.xml
> ===================================================================
> --- harmony/working_vm/make/vm/hythr.xml	(revision 883577)
> +++ harmony/working_vm/make/vm/hythr.xml	(working copy)
> @@ -24,7 +24,7 @@
>      <target name="build" depends="-common-vm">
>          <init-native/>
> 
> -        <make-native libname="hythr" type="shared">
> +        <make-native libname="hythr" type="static">
>          <compiler id="c.compiler" extends="common.c.compiler">
>              <includepath>
>                <pathelement location="${drlvm.include.dir}" />
> @@ -46,7 +46,7 @@
>              <libset libs="port,apr-1"
>                      dir="${drlvm.lib.dir}" />
> 
> -            <linkerarg value="/DEF:${vm.home}/thread/src/hythr.def"
> if="is.windows"/>
> +<!--            <linkerarg
> value="/DEF:${vm.home}/thread/src/hythr.def" if="is.windows"/> -->
> 
>              <syslibset type="shared" libs="stdc++,rt,pthread" if="is.linux"/>
>              <syslibset type="shared" libs="stdc++,pthread" if="is.freebsd"/>
> Index: harmony/working_vm/make/vm/jitrino.xml
> ===================================================================
> --- harmony/working_vm/make/vm/jitrino.xml	(revision 883577)
> +++ harmony/working_vm/make/vm/jitrino.xml	(working copy)
> @@ -83,10 +83,10 @@
>                  <defineset define="JIT_LOGS,JIT_STATS" if="is.cfg.debug" />
>              </compiler>
>          </compile-cc>
> -        <link-lib name="jitrino" type="shared">
> +        <link-lib name="jitrino" type="static">
>              <linker id="jitrino.linker" extends="common.linker">
>                  <libset libs="harmonyvm,encoder,hythr"
> dir="${drlvm.lib.dir}" if="is.windows"/>
> -                <linkerarg value="/OPT:REF" if="is.windows"/>
> +<!--                <linkerarg value="/OPT:REF" if="is.windows"/> -->
> 
>                  <syslibset type="shared" libs="m" if="is.unix"/>
>                  <syslibset type="shared" libs="dl" if="is.linux"/>
> Index: harmony/working_vm/make/vm/port_ch.xml
> ===================================================================
> --- harmony/working_vm/make/vm/port_ch.xml	(revision 883577)
> +++ harmony/working_vm/make/vm/port_ch.xml	(working copy)
> @@ -122,7 +122,7 @@
>              </compiler>
>          </compile-cc>
> 
> -        <link-lib name="ch" type="shared">
> +        <link-lib name="ch" type="static">
>              <linker id="linker" extends="common.linker">
>                  <libset libs="encoder" dir="${drlvm.lib.dir}" />
> 
> Index: harmony/working_vm/make/build-native.xml
> ===================================================================
> --- harmony/working_vm/make/build-native.xml	(revision 883577)
> +++ harmony/working_vm/make/build-native.xml	(working copy)
> @@ -151,7 +151,7 @@
>                  <condition property="component.need.pdb">
>                      <and>
>                          <isset property="is.windows"/>
> -                        <equals arg1="@{type}" arg2="shared"/>
> +                        <equals arg1="@{type}" arg2="static"/>
>                      </and>
>                  </condition>
> 
> 
> On 11/22/09, Alexei Fedotov <alexei.fedotov@gmail.com> wrote:
>> Tim,
>> As for your willingness to create a lib, VM is a lib already [1], an
>> is successfully used in browser plug-ins.
>>
>> [1] http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/invocation.html
>>
>> On Mon, Nov 23, 2009 at 11:54 AM, Xiao-Feng Li <xiaofeng.li@gmail.com>
>> wrote:
>>> To reduce Harmony VM (DRLVM) is possible - and not very difficult. JIT
>>> and GC are modules that you can easily replace with very simple ones.
>>> Other modules can be largely reduced as well if you do not need them,
>>> e.g., threading, verifier, profiler, etc. I don't know your
>>> performance target, but my personal preference usually is to keep a
>>> simple JIT for the execution engine rather than the interpreter.
>>>
>>> Thanks,
>>> xiaofeng
>>>
>>> On Mon, Nov 23, 2009 at 10:52 AM, Tim Prepscius <timprepscius@gmail.com>
>>> wrote:
>>>> Greetings,
>>>>
>>>> I have been searching for a non-gpl replacement for sun's java for
>>>> quite a while now.  I can't believe I didn't see your project until
>>>> this month.  Let me tell you, when I saw your code I almost cried.
>>>> (haha, well, maybe not cried)
>>>>
>>>> It's really, really nice.  And I have not run yet into a hundred line
>>>> #define (as in "dalvik") yet.
>>>> Anyhow.
>>>>
>>>>
>>>> This is what I'd like to do.  I'm wondering whether anyone would
>>>> comment on accomplishing this, if it is possible.
>>>> Who knows, maybe somebody else has fiddled around with this.
>>>>
>>>> What I'm looking for:
>>>>
>>>> 1.  I'm really not looking for java.  I'm looking for a
>>>> micro-edition-ish java to embed in a video game engine.
>>>>
>>>> 2.  Don't need JIT, don't need two garbage collectors - 1 will do,
>>>> don't need the JVM to be accessible to the outside world. Don't need
>>>> almost *all* of the class libraries.  Don't need sockets (except for
>>>> debugging).  Don't actually need threads (I disable their creation via
>>>> the security manager anyway), but I suppose this is necessary for GC &
>>>> Debug.
>>>>
>>>> 3. Need JNI, which I see you have.
>>>>
>>>> So what I'm thinking I'd like to do:
>>>>
>>>>
>>>> Optimally I'd like to create a lib out of harmony-vm.  Statically link
>>>> with my application.  Create a single jar with all of my necessary
>>>> classes, cutting out all of the java extra stuff (everything pretty
>>>> much)
>>>>
>>>> If creating a lib creates problems for JNI (what problems I don't
>>>> know), I'd like to combine all of your dlls into one massive dll.
>>>> Then I was thinking, that after getting this done, I'd start cutting
>>>> out modules.  And try to reduce everything to under 1 meg.
>>>>
>>>> --
>>>>
>>>> Is this crazy?
>>>>
>>>> Thanks in advance,
>>>>
>>>> -tim
>>>>
>>>
>>>
>>> --
>>> http://people.apache.org/~xli
>>>
>>
>>
>> --
>> With best regards / с наилучшими пожеланиями,
>> Alexei Fedotov / Алексей Федотов,
>> http://www.telecom-express.ru/
>> http://harmony.apache.org/
>> http://www.expressaas.com/
>> http://openmeetings.googlecode.com/
>>
> 


-- 
Best Regards,
Regis.

Mime
View raw message