+def create_native_env(bb,d):
+ import tarfile, socket, time
+ ice_dir = bb.data.expand('${CROSS_DIR}', d)
+ prefix = bb.data.expand('${HOST_PREFIX}' , d)
+ distro = bb.data.expand('${DISTRO}', d)
+ target_sys = bb.data.expand('${TARGET_SYS}', d)
+ target_prefix = bb.data.expand('${TARGET_PREFIX}', d)
+ float = bb.data.getVar('TARGET_FPU', d) or "hard"
+ name = socket.gethostname()
+
+ archive_name = "local-host-env" + "-" + name
+ tar_file = os.path.join(ice_dir, 'ice', archive_name + '.tar.gz')
+
+ try:
+ os.stat(tar_file)
+ # tar file already exists
+ return tar_file
+ except:
+ try:
+ #os.makedirs(os.path.join(ice_dir))
+ os.makedirs(os.path.join(ice_dir,'ice'))
+ except:
+ # directory already exists, continue
+ pass
+
+ #check if user has specified a specific icecc-create-env script
+ #if not use the OE provided one
+ cr_env_script = bb.data.expand('${ICECC_ENV_EXEC}', d)
+ if cr_env_script == "${ICECC_ENV_EXEC}":
+ cr_env_script = bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
+ result=os.popen("%s %s %s %s %s %s" %(cr_env_script,
+ "--silent",
+ os.popen("%s gcc" % "which").read()[:-1],
+ os.popen("%s g++" % "which").read()[:-1],
+ os.popen("%s as" % "which").read()[:-1],
+ os.path.join(ice_dir,"ice",archive_name) ) )
+ return tar_file
+
+
+def get_cross_kernel_cc(bb,d):
+ kernel_cc = bb.data.expand('${KERNEL_CC}', d)
+ kernel_cc = kernel_cc.replace('ccache', '').strip()
+ kernel_cc = kernel_cc.split(' ')[0]
+ kernel_cc = kernel_cc.strip()
+ return kernel_cc
+
+
+def create_cross_kernel_env(bb,d):
+ import tarfile, socket, time
+ ice_dir = bb.data.expand('${CROSS_DIR}', d)
+ prefix = bb.data.expand('${HOST_PREFIX}' , d)
+ distro = bb.data.expand('${DISTRO}', d)
+ target_sys = bb.data.expand('${TARGET_SYS}', d)
+ target_prefix = bb.data.expand('${TARGET_PREFIX}', d)
+ float = bb.data.getVar('TARGET_FPU', d) or "hard"
+ name = socket.gethostname()
+ kernel_cc = get_cross_kernel_cc(bb, d)
+
+ # Stupid check to determine if we have built a libc and a cross
+ # compiler.
+ try:
+ os.stat(os.path.join(ice_dir, 'bin', kernel_cc))
+ except: # no cross compiler built yet
+ return ""
+
+ VERSION = icc_determine_gcc_version( os.path.join(ice_dir,"bin",kernel_cc) )
+ cross_name = prefix + distro + "-" + target_sys + "-" + float + "-" + VERSION + "-" + name
+ tar_file = os.path.join(ice_dir, 'ice', cross_name + '.tar.gz')
+
+ try:
+ os.stat(tar_file)
+ # tar file already exists
+ return tar_file
+ except:
+ try:
+ os.makedirs(os.path.join(ice_dir,'ice'))
+ except:
+ # directory already exists, continue
+ pass
+
+
+ #check if user has specified a specific icecc-create-env script
+ #if not use the OE provided one
+ cr_env_script = bb.data.getVar('ICECC_ENV_EXEC', d) or bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
+ result=os.popen("%s %s %s %s %s %s" %(cr_env_script,
+ "--silent",
+ os.path.join(ice_dir, 'bin', kernel_cc),
+ os.path.join(ice_dir, 'bin', "%s-g++" % target_sys),
+ os.path.join(ice_dir, 'bin', "%s-as" % target_sys),
+ os.path.join(ice_dir, "ice", cross_name) ) )
+ return tar_file
+
+
+def create_env(bb,d):
+
+ #return create_cross_kernel_env(bb,d)
+
+ if bb.data.inherits_class("native", d):
+ return create_native_env(bb,d)
+ elif bb.data.inherits_class("kernel", d):
+ return create_cross_kernel_env(bb,d)
+ elif bb.data.inherits_class("cross", d):
+ return create_native_env(bb,d)
+ elif bb.data.inherits_class("sdk", d):
+ return create_native_env(bb,d)
+ else:
+ return create_cross_env(bb,d)
+
+