[Player-dev] Emsoft - Doing Freescale port needs help

[Player-dev] Emsoft - Doing Freescale port needs help

Bill Chan billc at emsoftltd.com
Fri Mar 4 03:07:41 PST 2005


Thanks Greg and Ryan,

I've attached my pf/cf's for your reference.

I got the following for nm:
[billc at billc helix]$ nm -u common/system/dbg/syslib.a  | c++filt | grep 
GetCurrentThread
HXUnixThread::GetCurrentThreadID()

Then I used a temporary fix to the problem, in drv/rvdll.c, I commented 
the body of RV_Debug_Message so GetCurrentThread is not executed. 

I am now encountering another problem.  Under rv89combo_c/cdeclib all 
sources are c files except rv89thread.cpp.  Therefore I need to change 
this to c.  Is there a better way to get around this?

Bill

Greg Wright wrote:

> Ryan Gammon wrote:
>
>> Hmm...
>> $ nm -u common/system/dbg/syslib.a  | c++filt | grep GetCurrentThread
>>         U HXUnixThread::GetCurrentThreadID()
>>         U HXUnixThread::GetCurrentThreadID()
>
>
> that would mean that none of the sub-class files are getting
> compiled in like pthreadthreads.cpp. If the .pcf files
> are not getting executed during umake that might happen:
>
> freebsd.pcf:   project.AddSources("platform/unix/pthreadthreads.cpp",
> hp-uxB.pcf:    project.AddSources("platform/unix/pthreadthreads.cpp",
> linux2.pcf:    project.AddSources("platform/unix/pthreadthreads.cpp",
> mac-unix.pcf:  project.AddSources("platform/unix/pthreadthreads.cpp",
> netbsd.pcf:    project.AddSources("platform/unix/pthreadthreads.cpp",
> openbsd.pcf:   project.AddSources("platform/unix/pthreadthreads.cpp",
>
> the subclass thread files is where HXUnixThread::GetCurrentThreadID gets
> defined, not in UnixThreads.cpp. pthreadthreads.cpp for example:
>
>    ULONG32 HXUnixThread::GetCurrentThreadID()
>    {
>        return pthread_self();
>    }
>
>
> --greg.
>
>
>>
>> Do you have _UNIX_THREADS_SUPPORTED defined somewhere?
>>
>> I forget where we're at in terms of .cf/.pf files, but I see it, for 
>> example, in linux-2.2-libc6-iwmmxt-xscale.cf:
>>
>> project.AddDefines("_UNIX_THREADS_SUPPORTED")
>>
>> The define itself should show up in 
>> common/system/dbg/common_system_ribodefs.h
>>
>> If you could post your .cf & .pf files to 
>> ribosome-dev at helixcommunity.org, it might help folks follow along.
>>
>> Bill Chan wrote:
>>
>>> Hi Ryan,
>>>
>>> I am trying to build splay with the C version codec. Following the 
>>> FAQ, I've added project.AddDefines('HELIX_FEATURE_ANSIC_RV89COMBO') 
>>> in build/umakepf/helix-client-all-defines.pf
>>>
>>> The build is OK without errors, and splay can play rv20 files, but 
>>> when rv30 files are run the following relocation error occurred:
>>>
>>>
>>> Ryan Gammon wrote:Simpleplayer is looking for the client core at 
>>> ../../../debug//clntcore.so
>>> Common DLL path DT_Common=../../../debug/
>>> Plugin path DT_Plugins=../../../debug/
>>> Codec path DT_Codecs=../../../debug/
>>> Can't open file: /home/billc/.helix/HelixShared_0_0.
>>> opening file:///home/billc/rv/yszp-59.rm on player 0
>>> Class = TrueColor, Depth = 16
>>> Device Configured:
>>> Sample Rate: 44100
>>> Sample Width: 16
>>> Num channels: 2
>>> Block size: 17600
>>> Device buffer size: 65536
>>> Supports GETOSPACE: 1
>>> Supports GETODELAY: 0
>>> ./splay: relocation error: ../../../debug/drvc.so: undefined symbol: 
>>> GetCurrentThreadId
>>>
>>> Is there anything else that I've left out?
>>>
>>> Thanks,
>>> Bill
>>>
>>>> sam wrote:
>>>>
>>>>> Do you have any suggestion on profiling those shared codec 
>>>>> libraries? Or I must build splay statically for profiling?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> I haven't had much luck with gprof in general. See:
>>>> http://www.kegel.com/gprof.html
>>>> ... for the general state of gprof.
>>>>
>>>> In terms of free software, Valgrind is worth checking out as a 
>>>> profiler, it's what I use:
>>>> http://valgrind.kde.org/
>>>>
>>>> kcachegrind is a front end:
>>>> http://kcachegrind.sourceforge.net/cgi-bin/show.cgi
>>>>
>>>> qprof might be worth a look too:
>>>> http://www.hpl.hp.com/research/linux/qprof/
>>>>
>>>
>>>
>>
>>
>
-------------- next part --------------
# 
# ***** BEGIN LICENSE BLOCK *****
# Source last modified: $Id: helix-client-all-defines.pf,v 1.27 2004/09/24 00:16:21 milko Exp $
# 
# Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
# 
# The contents of this file, and the files included with this file,
# are subject to the current version of the RealNetworks Public
# Source License (the "RPSL") available at
# http://www.helixcommunity.org/content/rpsl unless you have licensed
# the file under the current version of the RealNetworks Community
# Source License (the "RCSL") available at
# http://www.helixcommunity.org/content/rcsl, in which case the RCSL
# will apply. You may also obtain the license terms directly from
# RealNetworks.  You may not use this file except in compliance with
# the RPSL or, if you have a valid RCSL with RealNetworks applicable
# to this file, the RCSL.  Please see the applicable RPSL or RCSL for
# the rights, obligations and limitations governing use of the
# contents of the file.
# 
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL") in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your version of
# this file only under the terms of the GPL, and not to allow others
# to use your version of this file under the terms of either the RPSL
# or RCSL, indicate your decision by deleting the provisions above
# and replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient may
# use your version of this file under the terms of any one of the
# RPSL, the RCSL or the GPL.
# 
# This file is part of the Helix DNA Technology. RealNetworks is the
# developer of the Original Code and owns the copyrights in the
# portions it created.
# 
# This file, and the files included with this file, is distributed
# and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
# KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
# ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
# ENJOYMENT OR NON-INFRINGEMENT.
# 
# Technology Compatibility Kit Test Suite(s) Location:
#    http://www.helixcommunity.org/content/tck
# 
# Contributor(s):
# 
# ***** END LICENSE BLOCK *****
# 
#
# All possible features turned on for client builds.
#



exec_profile_file("helix-client-core-basic.pfi")
exec_profile_file("helix-client-core-advanced.pfi")
exec_profile_file("helix-client-core-local.pfi")
exec_profile_file("helix-client-core-net.pfi")
exec_profile_file("helix-client-core-net-advanced.pfi")
exec_profile_file("helix-client-core-audio.pfi")
exec_profile_file("helix-client-core-audio-advanced.pfi")
exec_profile_file("helix-client-core-video.pfi")
exec_profile_file("helix-client-realmedia-ff-basic.pfi")
exec_profile_file("helix-client-realmedia-ff-advanced.pfi")
exec_profile_file("helix-client-ra-basic.pfi")
exec_profile_file("helix-client-ra-advanced.pfi")
exec_profile_file("helix-client-rv.pfi")
exec_profile_file("helix-client-rv-advanced.pfi")
exec_profile_file("helix-client-smil.pfi")
exec_profile_file("helix-client-image.pfi")
exec_profile_file("helix-client-3gpp-advanced.pfi")
exec_profile_file("helix-client-mp3.pfi")
exec_profile_file("helix-client-mp4.pfi")
exec_profile_file("helix-client-pcm.pfi")



#project.AddDefines('HELIX_FEATURE_NEWAUDIOSTREAM')
project.AddDefines('HELIX_FEATURE_ANSIC_RV89COMBO')
-------------- next part --------------
# 
# ***** BEGIN LICENSE BLOCK *****
# Source last modified: $Id: linux-2.2-libc6-gcc32-i586.cf,v 1.11 2004/07/07 22:00:05 hubbe Exp $
# 
# Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
# 
# The contents of this file, and the files included with this file,
# are subject to the current version of the RealNetworks Public
# Source License (the "RPSL") available at
# http://www.helixcommunity.org/content/rpsl unless you have licensed
# the file under the current version of the RealNetworks Community
# Source License (the "RCSL") available at
# http://www.helixcommunity.org/content/rcsl, in which case the RCSL
# will apply. You may also obtain the license terms directly from
# RealNetworks.  You may not use this file except in compliance with
# the RPSL or, if you have a valid RCSL with RealNetworks applicable
# to this file, the RCSL.  Please see the applicable RPSL or RCSL for
# the rights, obligations and limitations governing use of the
# contents of the file.
# 
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL") in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your version of
# this file only under the terms of the GPL, and not to allow others
# to use your version of this file under the terms of either the RPSL
# or RCSL, indicate your decision by deleting the provisions above
# and replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient may
# use your version of this file under the terms of any one of the
# RPSL, the RCSL or the GPL.
# 
# This file is part of the Helix DNA Technology. RealNetworks is the
# developer of the Original Code and owns the copyrights in the
# portions it created.
# 
# This file, and the files included with this file, is distributed
# and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
# KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
# ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
# ENJOYMENT OR NON-INFRINGEMENT.
# 
# Technology Compatibility Kit Test Suite(s) Location:
#    http://www.helixcommunity.org/content/tck
# 
# Contributor(s):
# 
# ***** END LICENSE BLOCK *****
# 
"""Linux 2.x using GCC 3.2 libc6 (glibc2) on pentium+ ."""

exec_config_file('linux-2.2-libc6-gcc32.cf')

## list of PCF files to run
platform.pcf_prefix_list = ["unix", "linux2", "linux-2.2-libc6-gcc32-i586"]


platform.cxx.args["default"] = platform.cxx.args["default"] + " " + \
    "-march=pentium -mcpu=pentium  " 
platform.cc.args["default"] = platform.cc.args["default"] + " " + \
    "-march=pentium -mcpu=pentium  " 

-------------- next part --------------
# 
# ***** BEGIN LICENSE BLOCK *****
# Source last modified: $Id: linux-2.2-libc6-gcc32.cf,v 1.2 2004/07/07 22:00:05 hubbe Exp $
# 
# Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
# 
# The contents of this file, and the files included with this file,
# are subject to the current version of the RealNetworks Public
# Source License (the "RPSL") available at
# http://www.helixcommunity.org/content/rpsl unless you have licensed
# the file under the current version of the RealNetworks Community
# Source License (the "RCSL") available at
# http://www.helixcommunity.org/content/rcsl, in which case the RCSL
# will apply. You may also obtain the license terms directly from
# RealNetworks.  You may not use this file except in compliance with
# the RPSL or, if you have a valid RCSL with RealNetworks applicable
# to this file, the RCSL.  Please see the applicable RPSL or RCSL for
# the rights, obligations and limitations governing use of the
# contents of the file.
# 
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL") in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your version of
# this file only under the terms of the GPL, and not to allow others
# to use your version of this file under the terms of either the RPSL
# or RCSL, indicate your decision by deleting the provisions above
# and replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient may
# use your version of this file under the terms of any one of the
# RPSL, the RCSL or the GPL.
# 
# This file is part of the Helix DNA Technology. RealNetworks is the
# developer of the Original Code and owns the copyrights in the
# portions it created.
# 
# This file, and the files included with this file, is distributed
# and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
# KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
# ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
# ENJOYMENT OR NON-INFRINGEMENT.
# 
# Technology Compatibility Kit Test Suite(s) Location:
#    http://www.helixcommunity.org/content/tck
# 
# Contributor(s):
# 
# ***** END LICENSE BLOCK *****
# 
"""Linux 2.x using GCC 3.2 libc6 (glibc2)."""

exec_config_file('linux-common.cf')

## list of PCF files to run
platform.pcf_prefix_list = ["unix", "linux2", "linux-2.2-libc6-gcc32"]

## platform defines 
project.AddDefines("_LITTLE_ENDIAN")

## Turn on Threaded Network IO 
project.AddDefines("_UNIX_THREADED_NETWORK_IO")

## This define used on platforms that have native recursive mutexes.
project.AddDefines("_TIMEDWAITS_RECURSIVE_MUTEXES")

## This turns on the non portable ( _NP) thread directives.
project.AddDefines("_GNU_SOURCE")

## Turn on threads for all areas.
project.AddDefines("THREADS_SUPPORTED")

## This define enables compiling of the UnixThreads file.
## It means that that platform has a working threads lib
## that does everything we need.
project.AddDefines("_UNIX_THREADS_SUPPORTED")

## Turn off exceptions, rtti and turn on pentium ops.   Set warning options.
platform.cxx.args["default"] = platform.cxx.args["default"] + " " + \
    "-Wall -Wreturn-type -fno-exceptions " + \
    "--permissive -fno-rtti -Wno-ctor-dtor-privacy"

platform.cc.args["default"] = platform.cc.args["default"] + " " + \
    "-Wall -Wreturn-type -fno-exceptions"

## For now we will link everything against libstdc++ for the
## new/delete operators.  gcc 2.95 didn't need it, but it looks like
## gcc 3.2 needs it; at least sometimes.
project.AddSystemLibraries("stdc++")

class LinuxLinker(Linker2):
    def __init__(self):
        Linker2.__init__(self)
        self.linker=platform.cc.cmd
        self.extra_arguments=[]

    def add_argument(self, arg):
        self.extra_arguments.append(arg)
    
    def link_paths(self):
        return string.join(platform.system_paths +
                           project.system_paths)

    def link_script_path(self):
        return "%s.exp" % (project.TargetName())

    def armerge_lib_path(self):
        libname = "%s_libs.%s" % (project.target_name, platform.library_suffix)
        return os.path.join(project.output_dir, libname)
    
    def armerge_tmp_path(self):
        return os.path.join(project.object_dir, "lib")

    def write_link_script(self, path):
        ## if there are no exported functions, die here
        if len(project.exported_func) == 0:
            umake_lib.fatal("dll target without exported functions") 
        
        ## create a gcc link script
        fil = open(path, "w")
        fil.write("VERSION\n")
        fil.write("{\n")
        fil.write("  G2 {\n")
        fil.write("    global:\n")

        for export in project.exported_func:
            fil.write("      %s;\n" % (export))

        fil.write("    local:\n")
        fil.write("      *;\n")
        fil.write("  };\n")
        fil.write("}\n")
        fil.close()

    def LinkLIB(self, target_path, objects):
        cmd_list = []
        
        cmd = "%s %s %s" % (make_lib.cmd, target_path, objects)
        cmd_list.append(cmd)

        cmd = "ranlib %s" % (target_path)
        cmd_list.append(cmd)

        return cmd_list

    def CleanLIB(self, target_path):
        return [target_path]

    def LinkDLL(self, target_path, objects, static_libs, dynamic_libs):
        cmd_list = []

        armerge_cmd = os.path.join(BUILD_ROOT, "bin", "armerge")
        tmp_path = self.armerge_tmp_path()
        libpath = self.armerge_lib_path()
        cmd = "%s -d %s %s %s" % (armerge_cmd, tmp_path, libpath, static_libs)
        cmd_list.append(cmd)

        lspath = self.link_script_path()
        self.write_link_script(lspath)
        if project.exported_func:
            undefinedSymbols="-u "+string.join(project.exported_func," -u ")
        else:
            undefinedSymbols=""

        cmd = "%s -shared %s -o %s %s %s %s %s %s %s " % (
            self.linker,
            lspath, target_path,
            undefinedSymbols,
            objects, libpath,
            self.link_paths(),
            string.join(self.extra_arguments),
            dynamic_libs)
        cmd_list.append(cmd)

        cmd = 'rm "%s"' % (libpath)
        cmd_list.append(cmd)

        return cmd_list

    def CleanDLL(self, target_path):
        list = []
        list.append(target_path)
        list.append(self.armerge_tmp_path())
        list.append(self.armerge_lib_path())
        return list

    def LinkEXE(self, target_path, objects, static_libs, dynamic_libs):
        cmd_list = []

        armerge_cmd = os.path.join(BUILD_ROOT, "bin", "armerge")
        tmp_path = self.armerge_tmp_path()
        libpath = self.armerge_lib_path()
        cmd = "%s -d %s %s %s" % (armerge_cmd, tmp_path, libpath, static_libs)
        cmd_list.append(cmd)

        cmd = "%s -o %s %s %s %s %s %s" % (
            self.linker,
            target_path, objects, libpath,
            self.link_paths(),
            string.join(self.extra_arguments),
            dynamic_libs)
        cmd_list.append(cmd)

        cmd = 'rm "%s"' % (libpath)
        cmd_list.append(cmd)

        return cmd_list
    
    def CleanEXE(self, target_path):
        list = []
        list.append(target_path)
        list.append(self.armerge_tmp_path())
        list.append(self.armerge_lib_path())
        return list
    
    def make_lib_static(self, lib):
        return "-Wl,-Bstatic %s -Wl,-Bdynamic" % lib
    
platform.link = LinuxLinker()




def verify_gcc_callback():
    ccver=get_compiler_version(cc)
    cxxver=get_compiler_version(cxx)
    w=[]
    if ccver[:2] != "3.":
        w.append("gcc version is %s, not 3.* as expected." % ccver)

    if cxxver[:2] != "3.":
        w.append("g++ version is %s, not 3.* as expected." % cxxver)


    if w:
        print " **WARNING**"
        for m in w:
            print m
        print
        print "Compilation will continue in 10 seconds"
        import time
        time.sleep(10)
        
AddIdentifyCallback(verify_gcc_callback)
-------------- next part --------------
# 
# ***** BEGIN LICENSE BLOCK *****
# Source last modified: $Id: linux2.pcf,v 1.3.42.3 2004/07/09 01:44:03 hubbe Exp $
# 
# Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
# 
# The contents of this file, and the files included with this file,
# are subject to the current version of the RealNetworks Public
# Source License (the "RPSL") available at
# http://www.helixcommunity.org/content/rpsl unless you have licensed
# the file under the current version of the RealNetworks Community
# Source License (the "RCSL") available at
# http://www.helixcommunity.org/content/rcsl, in which case the RCSL
# will apply. You may also obtain the license terms directly from
# RealNetworks.  You may not use this file except in compliance with
# the RPSL or, if you have a valid RCSL with RealNetworks applicable
# to this file, the RCSL.  Please see the applicable RPSL or RCSL for
# the rights, obligations and limitations governing use of the
# contents of the file.
# 
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL") in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your version of
# this file only under the terms of the GPL, and not to allow others
# to use your version of this file under the terms of either the RPSL
# or RCSL, indicate your decision by deleting the provisions above
# and replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient may
# use your version of this file under the terms of any one of the
# RPSL, the RCSL or the GPL.
# 
# This file is part of the Helix DNA Technology. RealNetworks is the
# developer of the Original Code and owns the copyrights in the
# portions it created.
# 
# This file, and the files included with this file, is distributed
# and made available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY
# KIND, EITHER EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS
# ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
# ENJOYMENT OR NON-INFRINGEMENT.
# 
# Technology Compatibility Kit Test Suite(s) Location:
#    http://www.helixcommunity.org/content/tck
# 
# Contributor(s):
# 
# ***** END LICENSE BLOCK *****
# 

project.AddSources("platform/unix/pthreadthreads.cpp",
                   "platform/unix/UnixThreads.cpp")

if not project.BuildOption('nodll'):
    project.AddSources("platform/unix/linux_dll.cpp")

project.AddIncludes("pub/platform/unix")


More information about the Player-dev mailing list
 

Site Map   |   Terms of Use   |   Privacy Policy   |   Contact Us

Copyright © 1995-2007 RealNetworks, Inc. All rights reserved. RealNetworks and Helix are trademarks of RealNetworks.
All other trademarks or registered trademarks are the property of their respective holders.