Merge branch 'master' of github.com:daid/SkeinPyPy

master
Daid 2012-02-22 19:20:02 +01:00
commit 32d8fb4377
5 changed files with 69 additions and 0 deletions

View File

@ -579,6 +579,14 @@ class SkeinforgeRepository:
self.executeTitle = 'Skeinforge a file...'
def getPyPyExe(self):
if platform.system() == "Windows":
checkSSE2exe = os.path.dirname(os.path.abspath(__file__)) + "/checkSSE2.exe"
if os.path.exists(checkSSE2exe):
if subprocess.call(checkSSE2exe) != 0:
print "*****************************************************"
print "* Your CPU is lacking SSE2 support, cannot use PyPy *"
print "*****************************************************"
return False
if platform.system() == "Windows":
pypyExe = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../pypy/pypy.exe"));
else:

View File

@ -6,6 +6,14 @@ from skeinforge_application.skeinforge_utilities import skeinforge_craft
def getPyPyExe():
"Return the path to the pypy executable if we can find it. Else return False"
if platform.system() == "Windows":
checkSSE2exe = os.path.dirname(os.path.abspath(__file__)) + "/checkSSE2.exe"
if os.path.exists(checkSSE2exe):
if subprocess.call(checkSSE2exe) != 0:
print "*****************************************************"
print "* Your CPU is lacking SSE2 support, cannot use PyPy *"
print "*****************************************************"
return False
if platform.system() == "Windows":
pypyExe = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../pypy/pypy.exe"));
else:

View File

@ -1,5 +1,8 @@
#!/bin/bash
# This script is to build the SkeinPyPy package for Windows/Linux and OSx
# This script should run under Linux and OSx, as well as Windows with Cygwin.
#############################
# CONFIGURATION
#############################
@ -96,6 +99,16 @@ if [ $BUILD_TARGET = "win32" ]; then
mv PURELIB/serial ${TARGET_DIR}/python/Lib
rm -rf \$_OUTDIR
rm -rf PURELIB
#Clean up portable python a bit, to keep the package size down.
rm -rf ${TARGET_DIR}/python/PyScripter.*
rm -rf ${TARGET_DIR}/python/Doc
rm -rf ${TARGET_DIR}/python/locale
#rm -rf ${TARGET_DIR}/python/tcl
rm -rf ${TARGET_DIR}/python/Lib/test
rm -rf ${TARGET_DIR}/python/Lib/distutils
rm -rf ${TARGET_DIR}/python/Lib/site-packages/wx-2.8-msw-unicode/wx/tools
rm -rf ${TARGET_DIR}/python/Lib/site-packages/wx-2.8-msw-unicode/wx/locale
fi
#Extract pypy
@ -106,10 +119,22 @@ else
cd ${TARGET_DIR}; $TAR -xjf ../pypy-${PYPY_VERSION}-${BUILD_TARGET}.tar.bz2; cd ..
mv ${TARGET_DIR}/pypy-${PYPY_VERSION} ${TARGET_DIR}/pypy
fi
#Cleanup pypy
rm -rf ${TARGET_DIR}/pypy/lib-python/2.7/test
#add Skeinforge
cp -a SkeinPyPy ${TARGET_DIR}/SkeinPyPy
#Add the SSE2 check if we can build it, else we skip it.
# If we don't have it SkeinPyPy will still function. But crash on machines that don't have SSE2
if [ $BUILD_TARGET = "win32" ]; then
WINCC=`whereis i386-mingw32-gcc`
if [ "$WINCC" != "" ]; then
make -C checkSSE2 CC=${WINCC} TARGET=checkSSE2.exe
cp checkSSE2/checkSSE2.exe ${TARGET_DIR}/SkeinPyPy
fi
fi
#add printrun
mv Printrun ${TARGET_DIR}/Printrun
@ -122,6 +147,7 @@ cp README ${TARGET_DIR}/README.txt
#package the result
if (( ${ARCHIVE_FOR_DISTRIBUTION} )); then
if [ $BUILD_TARGET = "win32" ]; then
rm ${TARGET_DIR}.zip
cd ${TARGET_DIR}
7z a ../${TARGET_DIR}.zip *
cd ..

6
checkSSE2/Makefile Normal file
View File

@ -0,0 +1,6 @@
CC ?= gcc
TARGET ?= checkSSE2
$(TARGET): main.c
$(CC) -o $(TARGET) main.c -Os

21
checkSSE2/main.c Normal file
View File

@ -0,0 +1,21 @@
#include <stdlib.h>
#include <stdio.h>
//Read CPU flags, and return 0 if we support SSE2, else return 1
//See: http://en.wikipedia.org/wiki/CPUID#EAX.3D1:_Processor_Info_and_Feature_Bits
int main(int argc, char** argv)
{
int features;
//Read the CPU features.
asm("mov $1, %%eax\n"
"cpuid\n"
"mov %%edx, %0"
: "=r"(features) : : "%eax", "%edx", "%ecx");
//Check bit 26, this indicates SSE2 support
if (features & (1 << 26))
return 0;
return 1;
}