{"id":26032696,"url":"https://github.com/apache/harmony-drlvm","last_synced_at":"2025-04-10T00:41:54.527Z","repository":{"id":573445,"uuid":"205420","full_name":"apache/harmony-drlvm","owner":"apache","description":"Mirror of Apache Harmony DRLVM","archived":false,"fork":false,"pushed_at":"2010-03-21T06:40:13.000Z","size":12420,"stargazers_count":14,"open_issues_count":0,"forks_count":9,"subscribers_count":5,"default_branch":"trunk","last_synced_at":"2025-04-03T04:16:56.322Z","etag":null,"topics":["harmony"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"jteeuwen/go-pkg-rss","license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apache.png","metadata":{"files":{"readme":"README.txt","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-05-20T02:01:55.000Z","updated_at":"2024-05-28T06:25:11.000Z","dependencies_parsed_at":"2022-07-08T02:05:05.608Z","dependency_job_id":null,"html_url":"https://github.com/apache/harmony-drlvm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fharmony-drlvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fharmony-drlvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fharmony-drlvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apache%2Fharmony-drlvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apache","download_url":"https://codeload.github.com/apache/harmony-drlvm/tar.gz/refs/heads/trunk","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247909203,"owners_count":21016479,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["harmony"],"created_at":"2025-03-06T22:46:56.504Z","updated_at":"2025-04-10T00:41:54.486Z","avatar_url":"https://github.com/apache.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"======================================\n         Apache Harmony DRLVM\n======================================\n\nDRLVM is one of the virtual machines of the Apache Harmony project. \nIt contains: \n \n    - VM (VM Core)\n    - GC\n    - JIT\n    - Bytecode Verifier \n    - Class Libraries (Kernel Classes only)\n    - OS Layer\n\nSee http://wiki.apache.org/harmony for a definition of these components.\n\nThe currently supported configurations are Windows* x86, x86_64 and Linux* x86, x86_64, ia64.\n\n  \n1. DRLVM SOURCE TREE CONTENTS\n-----------------------------\n \nThis source tree consists of the source files, the building scripts,\nand the tests source files for integrity testing of the DRLVM.\n\nThe structure is as follows: \n\n \u003cEXTRACT_DIR\u003e\n        |\n        +---make           - Files required to build the contribution\n        |      \n        \\---vm             - VM source files\n            |\n            +- doc         - DRLVM Developer's Guide and Getting Started guide\n            |\n            +- em          - Execution Manager component responsible for dynamic optimization\n            |\n            +- gc_cc       - Stop-the-world adaptive copying/slide compacting garbage\n            |                collector with dynamic algorithm switching\n            |\n            +- gc_gen      - Generational garbage collector\n            |\n            +- include     - Set of header files containing external specification\n            |                and inter-component interfaces\n            |\n            +- interpreter - Interpreter component\n            |\n            +- jitrino     - Just-in-time Compiler component\n            |\n            +- port        - OS and platform porting layer component which, together with\n            |                APR, provides an unified interface to low-level system routines \n            |                across different platforms\n            |\n            +- tests       - Tests source files\n            |\n            +- thread      - Thread manager (TM) library aimed to provide threading capabilities \n            |                for Java virtual machines\n            |\n            +- vmcore      - Core component responsible for class loading and resolution,\n            |                kernel classes, JNI and JVMTI support, stack support, threading\n            |                support, exception handling, verifier, and a set of other services\n            |                and utilities\n            |\n            +- vmi         - Component responsible for compatibility with the Harmony class\n            |                libraries \n            |\n            \\- vmstart     - Partial implementation of the component manager for handling \n                             VM components as pluggable modules \n \n \n2. TOOLS AND ENVIRONMENT VARIABLES REQUIRED FOR THE BUILD\n---------------------------------------------------------\nIn order to build the source code, it is necessary to configure the following tools \nin the user environment. That is, the working environment should be such that the PATH \nenvironment variable contains all of the directories where the executables of\nthe tools listed below are located and that all of those executables can be \nsuccessfully invoked from the command line. On Windows, this typically implies\nthat the build is started from Visual Studio Command Prompt console window.\n\n\n* C++ compiler - on Windows, the Microsoft(R) 32-bit C/C++ Compiler and on\n               Linux, the GNU project C/C++ Compiler.\n\n* Java compiler - By default, the build scripts are setup to use the Eclipse\n                  compiler (ECJ). The ECJ needs to be in the Ant class path\n                  to execute correctly.\n                  \n* Apache Ant - A Java based build tool. See http://ant.apache.org/.\n               It's suggested that the ANT_OPTS environment variable be set\n               to a value of \"-Xms256M -Xmx512M\" while running the build scripts\n               for Harmony.\n\n* Doxygen - the open source documentation system for a variety of programming \n            languages including C, C++ and Java.\n            See http://www.doxygen.org\n            \n\nThe top-level Ant script \u003cEXTRACT_DIR\u003e/build.xml has a default target \nwhich builds both the Java source and C++ source files. It is expected\ntherefore that, at a minimum, a C++ compiler and a Java compiler be available.\nDoxygen is only necessary if generation of HTML documentation from the\nsource code is to be carried out by invoking Ant with the \"doc\" target on\nthe \u003cEXTRACT_DIR\u003e/build.xml script. As a convenience, pre-generated\nHTML files are already stored in subversion.\n\n2.1 DRLVM DEPENDENCIES\n----------------------\nThe DRLVM depends on common_resources module of Apache Harmony for managing \nexternal dependencies. Further, it needs either HDK or Harmony class library \nto build against and comprise a complete workable JRE.\nYou can separately obtain those modules, refer to Getting Started page on \nApache Harmony site [http://harmony.apache.org/quickhelp_contributors.html].\n \nAlso, there are external resources required for building DRLVM: \nzlib, apr-1.3.8, log4cxx, cpptasks-1.b04, etc. \nThis list can change as DRLVM is being developed, so the best way to resolve \nexternal dependencies is to let the build download them:\n$ ant fetch-depends\n\nBy default DRLVM assumes federated build layout, as described on the \naforementioned Getting Started page. That is, common_resources and classlib \nmodules reside in the same parent directory as DRLVM's \u003cEXTRACT_DIR\u003e, \nw/o extra \"trunk\" levels inside. \nYou may override default locations via the following build arguments:\n-Dcommon.resources.loc=\u003ccommon_resources-location\u003e\n-Dhy.hdk=\u003cunpacked-HDK-location\u003e\n-Dexternal.dep.CLASSLIB.loc=\u003cclasslib-location\u003e\nFor example, run this command to check if all build prerequisites are met:\n$ ant -Dcommon.resources.loc=\u003cpath\u003e -Dhy.hdk=\u003cpath\u003e check-depends\n\n3. BUILDING VM\n--------------\n\nThe simplest way to get started is to change directory into \u003cEXTRACT_DIR\u003e and\nthen type \"ant\" to run Apache Ant against the default target of the build.xml\nfile. Provided that the required compilers are available and configured properly, \nAnt will proceed to compile all the DRLVM source code.\nBuild mode (release/debug) is controlled with \"hy.cfg\" property, default is debug.\nE.g. type to build in release mode:\n$ ant -Dhy.cfg=release\n\nThe build produces a set of .jar files, native libraries, and\nsupport files that constitute the executable JRE. Also, it imports required\nsupplementary binaries from the pre-built classlib. The complete workable JRE \nis placed in the following directory tree structure:\n\n./build/${OS}_${CPU_arch}_${CXX}_${BUILD_CFG}\n       \\---deploy\n             |\n             \\---jdk\n                  |\n                  \\---jre\n                  |     |\n                  |     +---bin           \u003c- classlibrary native code \u0026 launcher\n                  |     |   |\n                  |     |   +---default   \u003c- DRLVM binaries\n                  |     |\n                  |     \\---lib\n                  |         |\n                  |         +---boot      \u003c- common JARs for bootclasspath\n                  |         | \n                  |         +---ext       \u003c- extensions directory\n                  |         |\n                  |         \\---security\n                  |\n                  +---include             \u003c- JNI \u0026 JVMTI headers\n\n              \nYou can now run DRLVM on the command line or under Eclipse*. For details on \nhow to run the VM under Eclipse*, see Getting Started with DRLVM, \n[http://harmony.apache.org/subcomponents/drlvm/getting_started.html].  \n\n 3.1 Build the selected components. \n     \nIf you're developing only particular component of DRLVM, it is possible to \noptimize recompilation time and re-build just that component invoking \nparticular ant script. For example, do clean rebuild of GCv5:\n$ ant -f make/vm/gc_gen.xml clean build\nAnother example, perform incremental build of Jitrino:\n$ ant -f make/vm/jitrino.xml\n\nHowever this way works only if you did not modify any of component's dependencies. \nE.g. if you modified encoder or vmcore while developing Jitrino, you'd want to rebuild \nJitrino and everything it depends upon:\n$ ant jitrino\n\n4. RUNNING DRLVM WITH EXTERNAL CLASS LIBRARIES\n----------------------------------------------\n \nTo run DRLVM with third-party external class libraries, do the following:\n\n1. Check that these class libraries comply with the kernel classes interface \n   and the VMI interfaces, see the description in the directory\n   \u003cEXTRACT_DIR\u003e/Harmony/vm/vmcore/src/kernel_classes. \n\n2. Add external native dynamic libraries (*.dll or *.so files) to the system path or copy \n   the files into the \u003cEXTRACT_DIR\u003e/deploy/jre/bin directory. \n\n3. Add external library class directories or .jar files into the -Xbootclasspath option. \n\nExample:\n$ java -Xbootclasspath/p:c:\\external_library\\lib\\classes.jar MyApp\n \n\n5. BUILDING AND RUNNING TESTS\n-----------------------------\n\nDRLVM provides a fair amount of functional and unit tests, you can build and run \nthem all with the following command:\n$ ant smoke.test kernel.test cunit.test jvmti.test reg.test hut.test ehwa.test \nThe test binaries and run results are placed in \"tests\" directory tree\nnearby \"deploy\" one:\n./build/${OS}_${CPU_arch}_${CXX}_${BUILD_CFG}/tests\n\nFor convenience, build also provides aggregative test targets, which run most of the \ntests with a single command:\n$ ant test\n$ ant test2\n\nCommon flags supported by all test suites:\n* test.mode - list of predefined VM modes to test (see make/test.properties). \n              \"jit,opt,int\" by default. Does not affect HUT, cunit and reg tests \n* test.case - name of a single specific test to run\n* test.jvm.exe - location of external JVM to be tested \n \n\n6. TROUBLESHOOTING\n-------------------\n \nFor build troubleshooting information, refer to the Wiki page: \nhttp://wiki.apache.org/harmony/DrlvmBuildTroubleshooting\n\n\n7. TODO\n--------\n\nFor information on TODO issues, refer to the Wiki page:\nhttp://wiki.apache.org/harmony/TODO_List_for_DRLVM  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fharmony-drlvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapache%2Fharmony-drlvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapache%2Fharmony-drlvm/lists"}