Fwd: cross compile OpenJDK-9+158 minimal variant failed when link libjvm.so

Zhu Yong zhuyong.me at gmail.com
Thu Mar 2 02:35:45 UTC 2017


If run with -Xint, it works.

I have created simplified FP test by remove all non-related code from
Whetstone test code.
The test code is here:
https://gist.github.com/yongzhy/d65c26d39fe5d549d1b406c7c84eacd4

I am not sure if the test code can help or not. The behaviour is weird  :
- If I print both itime and q, program will run OK
- inside condition block if(q<1.0f), if I use exit code 2,3,4,5, problem
appears, however, if I use exit code >=6, program run OK.

I always get exit code 5, the line q = (double)itime is wrong?

    public static double getTime()
    {
            double q;
            long itime;
            itime = System.currentTimeMillis();
            if(itime<1000000) {
                System.exit(1);
            }
            //System.out.printf("time long value %d\n", itime);
            q = (double) itime;
            if(q < 1.0f) {
                System.exit(5);  // I always get exit code 5
            }
            //System.out.printf("time float value %f\n", q);
            return q / 1000.0;
    }



On Wed, Mar 1, 2017 at 5:31 PM, David Holmes <david.holmes at oracle.com>
wrote:

> On 1/03/2017 6:45 PM, Zhu Yong wrote:
>
>> OK, for the Whetstone Benchmark, I added debug printing and found it's
>> due to function getTime(), it only get good value on 1st call, all
>> following calls get 0s.
>> Debug printing of itime value is correct. So reason should be the return
>> division line. Could it because toolchain's floating point operation???
>> But why server VM Ok?
>>
>
> Server and client implement FP logic differently, and particularly as this
> is soft-fp, they may well not be in sync. Does -Xint work?
>
> Can you isolate to a simple FP test?
>
> David
>
>     public static double getTime()
>>     {
>>             double q;
>>             long itime;
>>             itime = System.currentTimeMillis();
>>             q = (double) itime;
>>             return q / 1000.0;
>>     }
>>
>> On Wed, Mar 1, 2017 at 3:14 PM, David Holmes <david.holmes at oracle.com
>> <mailto:david.holmes at oracle.com>> wrote:
>>
>>     On 1/03/2017 4:26 PM, Zhu Yong wrote:
>>
>>         We use armv7-marvell-linux-gnueabi-softfp toolchain
>>
>>         gcc version 4.6.4 (Marvell GCC release 20150204-c4af733b 64K
>>         MAXPAGESIZE
>>         ALIGN CVE-2015-0235)
>>
>>         Is this toolchain too old? I am asking because I saw other strange
>>         issues as well:
>>
>>
>>     We last used gcc 4.7.2. I can't really say if 4.6.4 is "too old".
>>
>>         I have successfully build server, client and minimal VM, when I
>> run
>>         Dhrystone benchmark file (the same jar file from
>>         http://www.okayan.jp/DhrystoneApplet/
>>         <http://www.okayan.jp/DhrystoneApplet/>), the performance from
>>         server VM
>>         is much better than client and minimal VM.
>>         (minimal: 1629852, client: 1615508, server: 2338871 )
>>
>>
>>     That's expected. The server VM is high performance.
>>
>>         And when run Whetstone Benchmark
>>         from http://www.roylongbottom.org.uk/online/whetjava2.html
>>         <http://www.roylongbottom.org.uk/online/whetjava2.html>, server
>> VM
>>         finished with good result, client and minimal VM not able to
>> finish
>>         (program stuck there forever after print 1st line of output).
>>
>>
>>     That needs investigating. You need to try and generate a stackdump
>>     to see where things are stuck.
>>
>>     David
>>
>>
>>         On Wed, Mar 1, 2017 at 1:56 PM, David Holmes
>>         <david.holmes at oracle.com <mailto:david.holmes at oracle.com>
>>         <mailto:david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com>>> wrote:
>>
>>             On 1/03/2017 3:39 PM, Zhu Yong wrote:
>>
>>                 Thank you for the information, I managed to make minimal
>>         build
>>                 pass now.
>>
>>                 Initially I though JVM_EXCLUDE_FILES need to add
>>         additional 3
>>                 generated
>>                 files (they appeared
>>                 in _BUILD_LIBJVM_objectfilenames.txt) :
>>                 bytecodeInterpreterWithChecks.cpp jvmtiEnter.cpp
>>                 jvmtiEnterTrace.cpp
>>                 But build still fail with same error message.
>>
>>                 Finally I figured out it's due to those 8 doit() functions
>>                 implementation in jvmtiEnvBase.hpp file. After move all
>>         those 8
>>                 doit()
>>                 implementations to jvmtiEnvBase.cpp, build of minimal VM
>>         passed
>>                 without
>>                 any issue.
>>
>>
>>             That seems to be a compiler issue. jvmtiEnvBase.hpp is
>>             unconditionally included in a couple of places because we
>>         have to
>>             have enough of the JVMTI code to say JVMTI is not available.
>>         Those
>>             doit() implementations, though arguably could be conditional
>> on
>>             INCLUDE_JVMTI, are not referenced by any called code and so
>>         should
>>             not linked in. But in your case it seems they are.
>>
>>             What toolchain are you using?
>>
>>             David
>>             -----
>>
>>                 Changes appended
>>                 =============
>>
>>                 ---
>>                  .../src/share/vm/prims/jvmtiEnvBase.cpp            | 74
>>                 ++++++++++++++++++++++
>>                  .../src/share/vm/prims/jvmtiEnvBase.hpp            | 68
>>                 +++-----------------
>>                  2 files changed, 82 insertions(+), 60 deletions(-)
>>                  mode change 100644 => 100755
>>                 hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.cpp
>>                  mode change 100644 => 100755
>>                 hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.hpp
>>
>>                 diff --git
>>                 a/hotspot-9211c2e89c1c/src/sha
>> re/vm/prims/jvmtiEnvBase.cpp
>>                 b/hotspot-9211c2e89c1c/src/sha
>> re/vm/prims/jvmtiEnvBase.cpp
>>                 old mode 100644
>>                 new mode 100755
>>                 index dd241a0..e5832ba
>>                 ---
>>         a/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.cpp
>>                 +++
>>         b/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.cpp
>>                 @@ -1283,6 +1283,80 @@
>>                 VM_GetMultipleStackTraces::allocate_and_fill_stacks(jint
>>                 thread_count) {
>>                           "the last copied frame info must be the last
>>         record");
>>                  }
>>
>>                 +void
>>                 +VM_UpdateForPopTopFrame::doit() {
>>                 +  JavaThread* jt = _state->get_thread();
>>                 +  if (Threads::includes(jt) && !jt->is_exiting() &&
>>                 jt->threadObj() !=
>>                 NULL) {
>>                 +    _state->update_for_pop_top_frame();
>>                 +  } else {
>>                 +    _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 +  }
>>                 +}
>>                 +
>>                 +void
>>                 +VM_SetFramePop::doit() {
>>                 +  JavaThread* jt = _state->get_thread();
>>                 +  if (Threads::includes(jt) && !jt->is_exiting() &&
>>                 jt->threadObj() !=
>>                 NULL) {
>>                 +    int frame_number = _state->count_frames() - _depth;
>>                 +
>>
>>          _state->env_thread_state((JvmtiEnvBase*)_env)->set_frame_
>> pop(frame_number);
>>                 +  } else {
>>                 +    _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 +  }
>>                 +}
>>                 +
>>                 +void
>>                 +VM_GetOwnedMonitorInfo::doit() {
>>                 +  _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 +  if (Threads::includes(_java_thread) &&
>>                 !_java_thread->is_exiting()
>>                 +                                      &&
>>                 _java_thread->threadObj() !=
>>                 NULL) {
>>                 +    _result = ((JvmtiEnvBase
>>                 *)_env)->get_owned_monitors(_calling_thread,
>> _java_thread,
>>                 +
>>                  _owned_monitors_list);
>>                 +  }
>>                 +}
>>                 +
>>                 +void
>>                 +VM_GetObjectMonitorUsage::doit() {
>>                 +  _result = ((JvmtiEnvBase*)
>>                 _env)->get_object_monitor_usage(_calling_thread, _object,
>>                 _info_ptr);
>>                 +}
>>                 +
>>                 +void
>>                 +VM_GetCurrentContendedMonitor::doit() {
>>                 +  _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 +  if (Threads::includes(_java_thread) &&
>>                 !_java_thread->is_exiting() &&
>>                 +      _java_thread->threadObj() != NULL) {
>>                 +    _result = ((JvmtiEnvBase
>>
>>         *)_env)->get_current_contended_monitor(_calling_thread,_
>> java_thread,_owned_monitor_ptr);
>>                 +  }
>>                 +}
>>                 +
>>                 +void
>>                 +VM_GetStackTrace::doit() {
>>                 +  _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 +  if (Threads::includes(_java_thread) &&
>>                 !_java_thread->is_exiting()
>>                 +                                      &&
>>                 _java_thread->threadObj() !=
>>                 NULL) {
>>                 +    _result = ((JvmtiEnvBase
>>         *)_env)->get_stack_trace(_java_thread,
>>                 +
>>         _start_depth,
>>                 _max_count,
>>                 +
>>                 _frame_buffer,
>>                 _count_ptr);
>>                 +  }
>>                 +}
>>                 +
>>                 +void
>>                 +VM_GetFrameCount::doit() {
>>                 +  _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 +  JavaThread* jt = _state->get_thread();
>>                 +  if (Threads::includes(jt) && !jt->is_exiting() &&
>>                 jt->threadObj() !=
>>                 NULL) {
>>                 +    _result =
>>         ((JvmtiEnvBase*)_env)->get_frame_count(_state,
>>                 _count_ptr);
>>                 +  }
>>                 +}
>>                 +
>>                 +void
>>                 +VM_GetFrameLocation::doit() {
>>                 +  _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 +  if (Threads::includes(_java_thread) &&
>>                 !_java_thread->is_exiting() &&
>>                 +      _java_thread->threadObj() != NULL) {
>>                 +    _result =
>>                 ((JvmtiEnvBase*)_env)->get_frame_location(_java_thread,
>>                 _depth,
>>                 +
>>                 _method_ptr,
>>                 _location_ptr);
>>                 +  }
>>                 +}
>>
>>                  void
>>                  VM_GetThreadListStackTraces::doit() {
>>                 diff --git
>>                 a/hotspot-9211c2e89c1c/src/sha
>> re/vm/prims/jvmtiEnvBase.hpp
>>                 b/hotspot-9211c2e89c1c/src/sha
>> re/vm/prims/jvmtiEnvBase.hpp
>>                 old mode 100644
>>                 new mode 100755
>>                 index 04e6869..00b9890
>>                 ---
>>         a/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.hpp
>>                 +++
>>         b/hotspot-9211c2e89c1c/src/share/vm/prims/jvmtiEnvBase.hpp
>>                 @@ -359,14 +359,7 @@ public:
>>                    }
>>                    VMOp_Type type() const { return
>>         VMOp_UpdateForPopTopFrame; }
>>                    jvmtiError result() { return _result; }
>>                 -  void doit() {
>>                 -    JavaThread* jt = _state->get_thread();
>>                 -    if (Threads::includes(jt) && !jt->is_exiting() &&
>>                 jt->threadObj()
>>                 != NULL) {
>>                 -      _state->update_for_pop_top_frame();
>>                 -    } else {
>>                 -      _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 -    }
>>                 -  }
>>                 +  void doit();
>>                  };
>>
>>                  // VM operation to set frame pop.
>>                 @@ -389,15 +382,7 @@ public:
>>                    bool allow_nested_vm_operations() const { return true;
>> }
>>                    VMOp_Type type() const { return VMOp_SetFramePop; }
>>                    jvmtiError result() { return _result; }
>>                 -  void doit() {
>>                 -    JavaThread* jt = _state->get_thread();
>>                 -    if (Threads::includes(jt) && !jt->is_exiting() &&
>>                 jt->threadObj()
>>                 != NULL) {
>>                 -      int frame_number = _state->count_frames() - _depth;
>>                 -
>>
>>          _state->env_thread_state((JvmtiEnvBase*)_env)->set_frame_
>> pop(frame_number);
>>                 -    } else {
>>                 -      _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 -    }
>>                 -  }
>>                 +  void doit();
>>                  };
>>
>>
>>                 @@ -421,14 +406,7 @@ public:
>>                      _result = JVMTI_ERROR_NONE;
>>                    }
>>                    VMOp_Type type() const { return
>>         VMOp_GetOwnedMonitorInfo; }
>>                 -  void doit() {
>>                 -    _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 -    if (Threads::includes(_java_thread) &&
>>                 !_java_thread->is_exiting()
>>                 -                                        &&
>>                 _java_thread->threadObj() !=
>>                 NULL) {
>>                 -      _result = ((JvmtiEnvBase
>>                 *)_env)->get_owned_monitors(_calling_thread,
>> _java_thread,
>>                 -
>>                  _owned_monitors_list);
>>                 -    }
>>                 -  }
>>                 +  void doit();
>>                    jvmtiError result() { return _result; }
>>                  };
>>
>>                 @@ -451,10 +429,7 @@ public:
>>                    }
>>                    VMOp_Type type() const { return
>>         VMOp_GetObjectMonitorUsage; }
>>                    jvmtiError result() { return _result; }
>>                 -  void doit() {
>>                 -    _result = ((JvmtiEnvBase*)
>>                 _env)->get_object_monitor_usage(_calling_thread, _object,
>>                 _info_ptr);
>>                 -  }
>>                 -
>>                 +  void doit();
>>                  };
>>
>>                  // VM operation to get current contended monitor.
>>                 @@ -475,13 +450,7 @@ public:
>>                    }
>>                    VMOp_Type type() const { return
>>                 VMOp_GetCurrentContendedMonitor; }
>>                    jvmtiError result() { return _result; }
>>                 -  void doit() {
>>                 -    _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 -    if (Threads::includes(_java_thread) &&
>>                 !_java_thread->is_exiting() &&
>>                 -        _java_thread->threadObj() != NULL) {
>>                 -      _result = ((JvmtiEnvBase
>>
>>         *)_env)->get_current_contended_monitor(_calling_thread,_
>> java_thread,_owned_monitor_ptr);
>>                 -    }
>>                 -  }
>>                 +  void doit();
>>                  };
>>
>>                  // VM operation to get stack trace at safepoint.
>>                 @@ -508,15 +477,7 @@ public:
>>                    }
>>                    jvmtiError result() { return _result; }
>>                    VMOp_Type type() const { return VMOp_GetStackTrace; }
>>                 -  void doit() {
>>                 -    _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 -    if (Threads::includes(_java_thread) &&
>>                 !_java_thread->is_exiting()
>>                 -                                        &&
>>                 _java_thread->threadObj() !=
>>                 NULL) {
>>                 -      _result = ((JvmtiEnvBase
>>                 *)_env)->get_stack_trace(_java_thread,
>>                 -
>>                 _start_depth,
>>                 _max_count,
>>                 -
>>                 _frame_buffer,
>>                 _count_ptr);
>>                 -    }
>>                 -  }
>>                 +  void doit();
>>                  };
>>
>>                  // forward declaration
>>                 @@ -606,13 +567,7 @@ public:
>>                    }
>>                    VMOp_Type type() const { return VMOp_GetFrameCount; }
>>                    jvmtiError result()    { return _result; }
>>                 -  void doit() {
>>                 -    _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 -    JavaThread* jt = _state->get_thread();
>>                 -    if (Threads::includes(jt) && !jt->is_exiting() &&
>>                 jt->threadObj()
>>                 != NULL) {
>>                 -      _result =
>>         ((JvmtiEnvBase*)_env)->get_frame_count(_state,
>>                 _count_ptr);
>>                 -    }
>>                 -  }
>>                 +  void doit();
>>                  };
>>
>>                  // VM operation to frame location at safepoint.
>>                 @@ -636,14 +591,7 @@ public:
>>                    }
>>                    VMOp_Type type() const { return VMOp_GetFrameLocation;
>> }
>>                    jvmtiError result()    { return _result; }
>>                 -  void doit() {
>>                 -    _result = JVMTI_ERROR_THREAD_NOT_ALIVE;
>>                 -    if (Threads::includes(_java_thread) &&
>>                 !_java_thread->is_exiting() &&
>>                 -        _java_thread->threadObj() != NULL) {
>>                 -      _result =
>>                 ((JvmtiEnvBase*)_env)->get_frame_location(_java_thread,
>>                 _depth,
>>                 -
>>                 _method_ptr,
>>                 _location_ptr);
>>                 -    }
>>                 -  }
>>                 +  void doit();
>>                  };
>>
>>
>>                 --
>>                 2.1.4
>>
>>
>>                 On Tue, Feb 28, 2017 at 6:11 PM, David Holmes
>>                 <david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com> <mailto:david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com>>
>>                 <mailto:david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com>
>>
>>                 <mailto:david.holmes at oracle.com
>>         <mailto:david.holmes at oracle.com>>>> wrote:
>>
>>                     On 28/02/2017 7:35 PM, David Holmes wrote:
>>
>>                         On 28/02/2017 6:51 PM, Zhu Yong wrote:
>>
>>                             Dear All,
>>
>>                             I am testing cross compile OpenJDK-9+158 for
>> our
>>                 embedded
>>                             system using
>>                             buildroot, I can build server and client
>>         variants
>>                             successfully, but the
>>                             output compact1 profile file size is too
>>         big, then I
>>                 tried
>>                             to build
>>                             minimal
>>                             variant, failed when linking libjvm.so.
>>
>>                             I checked
>>
>>
>>         build/linux-arm-normal-minimal-release/hotspot/variant-minimal/
>>                             libjvm/objs/_BUILD_LIBJVM_obje
>> ctfilenames.txt,
>>                 jvmtiEnvBase.o
>>                             and jvmtiEnvThreadState.o are not listed in
>>         the file
>>                 (which
>>                             is required
>>                             from the error message below).
>>
>>
>>                         Right - JVM TI is not part of the Minimal VM. At
>> the
>>                 moment it looks
>>                         like some service has either been enabled when
>>         it should not
>>                         have been,
>>                         or has not been correctly if'def in the source.
>>
>>
>>                     As far as I can see your error messages are
>>         complaining about
>>                     missing functions that are called from the same
>>         sources as the
>>                     functions that are missing! ie.
>>
>>                     undefined reference to
>>
>>         `JvmtiEnvBase::get_current_contended_monitor(JavaThread*,
>>                 JavaThread*,
>>                     _jobject**)'
>>                     /tmp/cc27HS5M.ltrans0.ltrans.o: In function
>>                     `VM_GetOwnedMonitorInfo::doit()
>>
>>                     but VM_GetOwnedMonitorInfo is defined in
>>         jvmtiEnv.cpp which
>>                 should
>>                     be included or excluded the same as jvmtiEnBase.cpp.
>>         Here's the
>>                     logic in the makefile that controls this:
>>
>>                     ifneq ($(call check-jvm-feature, jvmti), true)
>>                       JVM_CFLAGS_FEATURES += -DINCLUDE_JVMTI=0
>>                       JVM_EXCLUDE_FILES += jvmtiGetLoadedClasses.cpp
>>                     jvmtiThreadState.cpp jvmtiExtensions.cpp \
>>                           jvmtiImpl.cpp jvmtiManageCapabilities.cpp
>>                 jvmtiRawMonitor.cpp
>>                     jvmtiUtil.cpp jvmtiTrace.cpp \
>>                           jvmtiCodeBlobEvents.cpp jvmtiEnv.cpp
>>                 jvmtiRedefineClasses.cpp
>>                     jvmtiEnvBase.cpp jvmtiEnvThreadState.cpp \
>>                           jvmtiTagMap.cpp jvmtiEventController.cpp
>>         evmCompat.cpp
>>                     jvmtiEnter.xsl jvmtiExport.cpp \
>>                           jvmtiClassFileReconstituter.cpp
>>                     endif
>>
>>                     Can you run with LOG=trace so that each compiled file
>> is
>>                 listed in
>>                     the build log, then see if there are any jvmti*
>>         files listed
>>                 there.
>>
>>                     Thanks,
>>                     David
>>
>>
>>
>>
>>                         Can you provide the lines from your spec.gmk
>>         that define the
>>                         JVM_FEATURES_* variables please.
>>
>>                         Thanks,
>>                         David
>>                         ------
>>
>>
>>                             === Output from failing command(s) repeated
>>         here ===
>>                             * For target
>>
>>         hotspot_variant-minimal_libjvm_objs_BUILD_LIBJVM_link:
>>                             /tmp/cc27HS5M.ltrans0.ltrans.o: In function
>>                             `VM_GetStackTrace::doit()
>>                             [clone .local.640]':
>>                             cc27HS5M.ltrans0.o:(.text+0xce5e): undefined
>>                 reference to
>>                             `JvmtiEnvBase::get_stack_trace(JavaThread*,
>>         int, int,
>>                             _jvmtiFrameInfo*,
>>                             int*)'
>>                             /tmp/cc27HS5M.ltrans0.ltrans.o: In function
>>                             `VM_GetCurrentContendedMonitor::doit()
>>                             [clone .local.639]':
>>                             cc27HS5M.ltrans0.o:(.text+0xcec2): undefined
>>                 reference to
>>
>>                 `JvmtiEnvBase::get_current_contended_monitor(JavaThread*,
>>                             JavaThread*,
>>                             _jobject**)'
>>                             /tmp/cc27HS5M.ltrans0.ltrans.o: In function
>>                             `VM_GetOwnedMonitorInfo::doit()
>>                             [clone .local.638]':
>>                             cc27HS5M.ltrans0.o:(.text+0xcf26): undefined
>>                 reference to
>>                             `JvmtiEnvBase::get_owned_monit
>> ors(JavaThread*,
>>                 JavaThread*,
>>                             GrowableArray<_
>>                             jvmtiMonitorStackDepthInfo*>*)'
>>                             /tmp/cc27HS5M.ltrans0.ltrans.o: In function
>>                             `VM_GetFrameCount::doit()
>>                             [clone .local.637]':
>>                             cc27HS5M.ltrans0.o:(.text+0xcf8a): undefined
>>                 reference to
>>
>>         `JvmtiEnvBase::get_frame_count(JvmtiThreadState*, int*)'
>>                             /tmp/cc27HS5M.ltrans0.ltrans.o: In function
>>                             `VM_SetFramePop::doit()
>>                             [clone
>>                             .local.636]':
>>                             cc27HS5M.ltrans0.o:(.text+0xcfea): undefined
>>                 reference to
>>                             `JvmtiThreadState::count_frames()'
>>                             cc27HS5M.ltrans0.o:(.text+0xd030): undefined
>>                 reference to
>>                             `JvmtiEnvThreadState::set_frame_pop(int)'
>>                             /tmp/cc27HS5M.ltrans0.ltrans.o: In function
>>                             `VM_GetFrameLocation::doit()
>>                             [clone .local.641]':
>>                                ... (rest of output omitted)
>>
>>
>>                             My configuration:
>>
>>                             --with-jdk-variant=normal \
>>                             --with-jvm-variants=minimal \
>>                             --with-debug-level=release \
>>                             --disable-warnings-as-errors \
>>                             --disable-hotspot-gtest \
>>                             --with-abi-profile=arm-vfp-sflt \
>>                             --openjdk-target=$(GNU_TARGET_NAME) \
>>                             --with-sys-root=$(STAGING_DIR) \
>>                             --with-tools-dir=$(HOST_DIR) \
>>
>>         --with-freetype-include=$(STAGING_DIR)/usr/include \
>>                             --with-freetype-lib=$(STAGING_DIR)/usr/lib \
>>                             --with-freetype=$(STAGING_DIR)/usr/ \
>>                             --with-alsa-include=$(STAGING_DIR)/usr/include
>> \
>>                             --with-alsa-lib=$(STAGING_DIR)/usr/lib \
>>                             --with-alsa=$(STAGING_DIR)/usr/ \
>>                             --with-cups=$(STAGING_DIR)/usr/ \
>>                             --with-x=$(STAGING_DIR)/usr/include \
>>                             --with-extra-ldflags=--sysroot=$(STAGING_DIR)
>> \
>>                             --enable-headless-only \
>>                             --disable-freetype-bundling \
>>                             --enable-unlimited-crypto \
>>                             --with-boot-jdk=/opt/java/jdk1.8.0_102
>>
>>
>>
>>
>>



More information about the build-dev mailing list