Example #1
0
def prepare_intel_linux32_env(target, pp=None, openmp=False):
    """ Set up the environment variables for i386 Linux32 compilation from i386 or cross compilation from a x86_64 Linux system"""
    if pp is None:
        pp = preprocessor()

    pp.defines.append('__LINUX__')
    pp.defines.append('__LINUX32__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    env = deepcopy(os.environ)
    env['CC'] = 'gcc'
    env['STRIP'] = 'strip'
    env['CFLAGS'] = ("" if not 'CFLAGS' in env else
                     env['CFLAGS']) + ' -m32 -I%s/include' % target.dist
    env['CPPFLAGS'] = ("" if not 'CPPFLAGS' in env else
                       env['CPPFLAGS']) + ' -m32 -I%s/include' % target.dist
    env['LDFLAGS'] = ("" if not 'LDFLAGS' in env else
                      env['LDFLAGS']) + ' -m32 -L%s/lib' % target.dist
    if openmp:
        env['CFLAGS'] += "-fopenmp"
        env['CPPFLAGS'] += "-fopenmp"
        env['LDFLAGS'] += '-lgomp'
    env['HOST'] = '--host i686-pc-linux-gnu'
    env['WITH_SYSROOT'] = ''
    return env, pp
Example #2
0
def prepare_osx_env(target, pp=None, openmp=False, sdk=None, ostarget=None):
    """ Set up the environment variables for OS X native compilation from a OS X environment, fat builds for i386 and x86_64"""
    global XCODE_ROOT, OSX_SDK, BEST_OSX_SDK

    if pp is None:
        pp = preprocessor()

    if ostarget is None:
        ostarget = '10.6'

    pp.defines.append('__OSX__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    if XCODE_ROOT is None:
        XCODE_ROOT = find_xcode()

    if BEST_OSX_SDK is None:
        BEST_OSX_SDK = find_apple_sdk('macosx')

    if sdk is None:
        sdk = BEST_OSX_SDK

    if OSX_SDK is None:
        OSX_SDK = '%s/Platforms/MacOSX.platform/Developer/SDKs/MacOSX%s.sdk' % (
            XCODE_ROOT, sdk)
        if not isdir(OSX_SDK):
            error('Could not locate OS X SDK at %s' % OSX_SDK)
            exit()

        info('Using OS X SDK %s' % sdk)

    env = deepcopy(os.environ)

    env['ARCHS'] = 'i386 x86_64'
    info("Building for the following architectures: %s" % env['ARCHS'])
    info("Building for OS X >= %s" % ostarget)

    env['CC'] = 'gcc'
    env['STRIP'] = 'strip'
    env['CFLAGS'] = env[
        'CXXFLAGS'] = '-g -O2 -mmacosx-version-min=%s --sysroot=%s -I%s/include' % (
            ostarget, OSX_SDK, target.dist)
    env['LDFLAGS'] = ("" if not 'LDFLAGS' in env else
                      env['LDFLAGS']) + '-L%s/lib' % target.dist
    env['HOST'] = '--host x86_64-apple-darwin'
    env['WITH_SYSROOT'] = '--with-sysroot="%s"' % OSX_SDK
    return env, pp
Example #3
0
def prepare_osx_env(target, pp=None, openmp=False, sdk=None, ostarget=None):
    """ Set up the environment variables for OS X native compilation from a OS X environment, fat builds for i386 and x86_64"""
    global XCODE_ROOT, OSX_SDK, BEST_OSX_SDK

    if pp is None:
        pp = preprocessor()

    if ostarget is None:
        ostarget = '10.6'

    pp.defines.append('__OSX__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    if XCODE_ROOT is None:
        XCODE_ROOT = find_xcode()

    if BEST_OSX_SDK is None:
        BEST_OSX_SDK = find_apple_sdk('macosx')

    if sdk is None:
        sdk = BEST_OSX_SDK

    if OSX_SDK is None:
        OSX_SDK = '%s/Platforms/MacOSX.platform/Developer/SDKs/MacOSX%s.sdk' % (XCODE_ROOT, sdk)
        if not isdir(OSX_SDK):
            error('Could not locate OS X SDK at %s' % OSX_SDK)
            exit()

        info('Using OS X SDK %s' % sdk)



    env = deepcopy(os.environ)

    env['ARCHS'] = 'i386 x86_64'
    info("Building for the following architectures: %s" % env['ARCHS'])
    info("Building for OS X >= %s" % ostarget)

    env['CC'] = 'gcc'
    env['STRIP'] = 'strip'
    env['CFLAGS'] = env['CXXFLAGS'] = '-g -O2 -mmacosx-version-min=%s --sysroot=%s -I%s/include' % (ostarget, OSX_SDK, target.dist)
    env['LDFLAGS'] = ("" if not 'LDFLAGS' in env else env['LDFLAGS']) + '-L%s/lib' % target.dist
    env['HOST'] = '--host x86_64-apple-darwin'
    env['WITH_SYSROOT'] = '--with-sysroot="%s"' % OSX_SDK
    return env, pp
Example #4
0
def prepare_intel_mingw64_env(target, pp=None, openmp=False):
    """ Set up the environment variables for x86_64 Mingw64 cross compilation from OS X x86_64 or Linux x86_64"""
    from schafer import HOSTPYTHON, HOSTPGEN
    if pp is None:
        pp = preprocessor()

    pp.defines.append('__MINGW__')
    pp.defines.append('__MINGW64__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    env = deepcopy(os.environ)
    env['ARCH'] = "win64"
    # Force LIBC functions (otherwise you get undefined SDL_sqrt, SDL_cos, etc
    # Force a dummy haptic and mm joystick (otherwise there a bunch of undefined symbols from SDL_haptic.c and SDL_joystick.c).
    # The cross platform configuration of SDL doesnt work fine at this moment and it doesn't define these variables as it should
    #env['CFLAGS'] = "-DHAVE_LIBC=1 -DSDL_HAPTIC_DUMMY=1 -DSDL_JOYSTICK_WINMM=1"
    env['CFLAGS'] = ("" if not 'CFLAGS' in env else
                     env['CFLAGS']) + '-I%s/include' % target.dist
    env['LDFLAGS'] = ("" if not 'LDFLAGS' in env else
                      env['LDFLAGS']) + '-L%s/lib' % target.dist
    env['CXXFLAGS'] = env['CFLAGS']
    env['CC'] = 'x86_64-w64-mingw32-gcc %s' % (env['CFLAGS'], )
    env['CXX'] = 'x86_64-w64-mingw32-g++ %s' % (env['CXXFLAGS'], )
    env['AR'] = "x86_64-w64-mingw32-ar"
    env['RANLIB'] = "x86_64-w64-mingw32-ranlib"
    env['STRIP'] = "x86_64-w64-mingw32-strip --strip-unneeded"
    env['LD'] = "x86_64-w64-mingw32-ld"
    env['AS'] = "x86_64-w64-mingw32-as"
    env['NM'] = "x86_64-w64-mingw32-nm"
    env['DLLTOOL'] = "x86_64-w64-mingw32-dlltool"
    env['OBJDUMP'] = "x86_64-w64-mingw32-objdump"
    env['RESCOMP'] = "x86_64-w64-mingw32-windres"
    env['MAKE'] = 'make V=0 -k -j%d HOSTPYTHON=%s HOSTPGEN=%s CROSS_COMPILE=mingw64msvc CROSS_COMPILE_TARGET=yes' % (
        multiprocessing.cpu_count(), HOSTPYTHON, HOSTPGEN)
    env['HOST'] = '--host=x86_64-w64-mingw32'
    env['WITH_SYSROOT'] = ''
    return env, pp
Example #5
0
def prepare_intel_linux32_env(target, pp=None, openmp=False):
    """ Set up the environment variables for i386 Linux32 compilation from i386 or cross compilation from a x86_64 Linux system"""
    if pp is None:
        pp = preprocessor()

    pp.defines.append('__LINUX__')
    pp.defines.append('__LINUX32__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    env = deepcopy(os.environ)
    env['CC'] = 'gcc'
    env['STRIP'] = 'strip'
    env['CFLAGS'] = ("" if not 'CFLAGS' in env else env['CFLAGS']) + ' -m32 -I%s/include' % target.dist
    env['CPPFLAGS'] = ("" if not 'CPPFLAGS' in env else env['CPPFLAGS']) + ' -m32 -I%s/include' % target.dist
    env['LDFLAGS'] = ("" if not 'LDFLAGS' in env else env['LDFLAGS']) + ' -m32 -L%s/lib' % target.dist
    if openmp:
        env['CFLAGS'] += "-fopenmp"
        env['CPPFLAGS'] += "-fopenmp"
        env['LDFLAGS'] += '-lgomp'
    env['HOST'] = '--host i686-pc-linux-gnu'
    env['WITH_SYSROOT'] = ''
    return env, pp
Example #6
0
def prepare_intel_mingw64_env(target, pp=None, openmp=False):
    """ Set up the environment variables for x86_64 Mingw64 cross compilation from OS X x86_64 or Linux x86_64"""
    from schafer import HOSTPYTHON, HOSTPGEN
    if pp is None:
        pp = preprocessor()

    pp.defines.append('__MINGW__')
    pp.defines.append('__MINGW64__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')


    env = deepcopy(os.environ)
    env['ARCH'] = "win64"
    # Force LIBC functions (otherwise you get undefined SDL_sqrt, SDL_cos, etc
    # Force a dummy haptic and mm joystick (otherwise there a bunch of undefined symbols from SDL_haptic.c and SDL_joystick.c).
    # The cross platform configuration of SDL doesnt work fine at this moment and it doesn't define these variables as it should
    #env['CFLAGS'] = "-DHAVE_LIBC=1 -DSDL_HAPTIC_DUMMY=1 -DSDL_JOYSTICK_WINMM=1"
    env['CFLAGS'] = ("" if not 'CFLAGS' in env else env['CFLAGS']) + '-I%s/include' % target.dist
    env['LDFLAGS'] = ("" if not 'LDFLAGS' in env else env['LDFLAGS']) + '-L%s/lib' % target.dist
    env['CXXFLAGS'] = env['CFLAGS']
    env['CC'] = 'x86_64-w64-mingw32-gcc %s' % (env['CFLAGS'],)
    env['CXX'] = 'x86_64-w64-mingw32-g++ %s' % (env['CXXFLAGS'],)
    env['AR'] = "x86_64-w64-mingw32-ar"
    env['RANLIB'] = "x86_64-w64-mingw32-ranlib"
    env['STRIP'] = "x86_64-w64-mingw32-strip --strip-unneeded"
    env['LD'] = "x86_64-w64-mingw32-ld"
    env['AS'] = "x86_64-w64-mingw32-as"
    env['NM'] = "x86_64-w64-mingw32-nm"
    env['DLLTOOL'] = "x86_64-w64-mingw32-dlltool"
    env['OBJDUMP'] = "x86_64-w64-mingw32-objdump"
    env['RESCOMP'] = "x86_64-w64-mingw32-windres"
    env['MAKE'] = 'make V=0 -k -j%d HOSTPYTHON=%s HOSTPGEN=%s CROSS_COMPILE=mingw64msvc CROSS_COMPILE_TARGET=yes' % (multiprocessing.cpu_count(), HOSTPYTHON, HOSTPGEN)
    env['HOST'] = '--host=x86_64-w64-mingw32'
    env['WITH_SYSROOT'] = ''
    return env, pp
Example #7
0
def prepare_arm_android_env(target, pp=None, openmp=False, api_level=10, gcc='4.4.3'):
    """ Set up the environment variables for ARM Android cross compilation from a OS X or Linux environment"""
    from schafer import ANDROID_NDK, ANDROID_SDK, HOSTPYTHON, HOSTPGEN
    if pp is None:
        pp = preprocessor()
    pp.defines.append('__ANDROID__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    try:
        api_level = int(api_level)
    except:
        error("Invalid Android API Level, please provide an integer >= 10")
        exit()

    if api_level < 10:
        error("Invalid Android Target API Level Selected (it has to be >=10)")
        exit()

    apitarget = 'android-%d' % api_level

    env = deepcopy(os.environ)

    # Check that the NDK and SDK exist
    if ANDROID_NDK == None:
        error('No Android NDK location provided (use command line parameters or environment variable ANDROID_NDK)')
        exit()
    if ANDROID_SDK == None:
        error('No Android SDK location provided (use command line parameters or environment variable ANDROID_SDK)')
        exit()

    if not isdir(ANDROID_NDK) or not isfile(join(ANDROID_NDK, 'ndk-build')) or not isdir(join(ANDROID_NDK,"toolchains/arm-linux-androideabi-%s/prebuilt/linux-x86/bin" % gcc)):
        error('Can not locate Valid Android NDK at %s, install or update it' % (ANDROID_NDK,))
        exit()
    if ANDROID_SDK == None or not isdir(ANDROID_SDK) or  not isfile(join(ANDROID_SDK, 'tools', 'android')):
        error('Can not locate Android SDK at %s' % ANDROID_SDK)
        exit()

    # Check GCC version selected
    # NDK rev >= 8b has GCC 4.4.3 and 4.6
    if gcc not in ANDROID_VALID_GCC:
        error("Invalid GCC version. Please select one of: %s", ANDROID_VALID_GCC)

    if not isdir(join(ANDROID_NDK, 'toolchains', 'arm-linux-androideabi-'+gcc)):
        error("Your Android NDK does not have a GCC version %s" % gcc)
        exit()
    env['GCC_VERSION'] = gcc

    if 'JAVA_HOME' not in os.environ:
        env['JAVA_HOME'] = "/usr/lib/jvm/java-6-openjdk"

    if not isdir(env['JAVA_HOME']) or  not isfile(join(env['JAVA_HOME'], 'bin', 'java')):
        env['JAVA_HOME'] = "/usr/lib/jvm/java-6-openjdk-amd64"
        if not isdir(env['JAVA_HOME']) or  not isfile(join(env['JAVA_HOME'], 'bin', 'java')):
            error('Can not locate JAVA. Please set the JAVA_HOME environment variable accordingly' % (env['JAVA_HOME'],))
            exit()

    env['PATH'] = "%s/toolchains/arm-linux-androideabi-%s/prebuilt/linux-x86/bin/:%s:%s/tools:/usr/local/bin:/usr/bin:/bin:%s" % (ANDROID_NDK, gcc, ANDROID_NDK, ANDROID_SDK, '') #env['PATH'])
    env['ARCH'] = "armeabi"
    env['SDK'] = ANDROID_SDK
    env['NDK'] = ANDROID_NDK
    env['STL'] = 'gnu'
    env['TARGET'] = apitarget


    #env['ARCH'] = "armeabi-v7a"
    if api_level > 13:
        env['SYSROOT'] = "%s/platforms/android-14/arch-arm" % ANDROID_NDK
    elif api_level > 9:
        env['SYSROOT'] = "%s/platforms/android-9/arch-arm" % ANDROID_NDK
    else:
        error("INVALID API LEVEL")
        exit()

    if not isdir(env['SYSROOT']):
        error("Could not find platform files at %s" % env['SYSROOT'])
        exit()

    env['CFLAGS'] ="-DANDROID -mandroid -fomit-frame-pointer --sysroot %s -I%s/include" % (env['SYSROOT'], target.dist)


    env['HOST'] = '--host arm-eabi'
    if env['ARCH'] == "armeabi-v7a":
        env['CFLAGS']+=" -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb"
        env['HOST'] = '--host armeabi-v7a'
    env['CXXFLAGS'] = env['CFLAGS']
    env['CC'] = 'arm-linux-androideabi-gcc %s' % (env['CFLAGS'],)
    env['CXX'] = 'arm-linux-androideabi-g++ %s' % (env['CXXFLAGS'],)
    env['AR'] = "arm-linux-androideabi-ar"
    env['RANLIB'] = "arm-linux-androideabi-ranlib"
    env['STRIP'] = "arm-linux-androideabi-strip --strip-unneeded"
    env['MAKE'] = 'make V=0 -k -j%d HOSTPYTHON=%s HOSTPGEN=%s CROSS_COMPILE=arm-eabi- CROSS_COMPILE_TARGET=yes' % (multiprocessing.cpu_count(), HOSTPYTHON, HOSTPGEN)

    env['WITH_SYSROOT'] = '--with-sysroot="%s"' % env['SYSROOT']

    # Debugging
#    env['NDK_DEBUG'] = "1"
#    # "-g" for debug info
#    env['CFLAGS'] += " -g -gstabs+"
#    env['CPPFLAGS'] = " -g -gstabs+"

    return env, pp
Example #8
0
def prepare_ios_env(target, pp=None, openmp=False, sdk=None, ostarget=None):
    """ Set up the environment variables for iOS cross compilation from a OS X environment, fat builds for armv6 and armv7"""
    if pp is None:
        pp = preprocessor()

    pp.defines.append('__IOS__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    env = deepcopy(os.environ)
    global XCODE_ROOT, BEST_IOS_SDK, IOS_SDK

    if XCODE_ROOT is None:
        XCODE_ROOT = find_xcode()

    if BEST_IOS_SDK is None:
        BEST_IOS_SDK = find_apple_sdk('iphoneos')

    if sdk is None:
        sdk = BEST_IOS_SDK

    env['DEVROOT'] = join(XCODE_ROOT, 'Platforms/iPhoneOS.platform/Developer')
    if IOS_SDK is None:
        IOS_SDK = env['DEVROOT'] + '/SDKs/iPhoneOS%s.sdk' % sdk
        if not isdir(IOS_SDK):
            error('Could not locate iOS SDK at %s' % IOS_SDK)
            exit()

        info('Using iOS SDK %s' % sdk)

    if float(sdk) >= 6:
        # iOS SDK >= 6 does not have armv6 support nor support for iOS < 4.3
        env['ARCHS'] = 'armv7 armv7s'
        if ostarget is None:
            ostarget = '4.3'
        elif float(ostarget) < 4.3:
            error('The selected SDK version %s does not support iOS %s (use --apple-sdk and --apple-target). If you want to find out how to install older SDKs, this guide may be useful: http://blog.chpwn.com/post/31824877081' % (sdk, ostarget))
            exit()
    else:
        env['ARCHS'] = 'armv6 armv7'
        if ostarget is None:
            ostarget = '3.0'
        elif float(ostarget) < 3:
            error('The selected SDK version %s does not support iOS %s' % (sdk, ostarget))
            exit()

    info("Building for the following architectures: %s" % env['ARCHS'])
    info("Building for iOS >= %s" % ostarget)
    env['IPHONEOS_DEPLOYMENT_TARGET'] = ostarget
    env['SDKROOT'] = IOS_SDK
    env['CFLAGS'] = env['CXXFLAGS'] = "-g -O2 -pipe -no-cpp-precomp -isysroot %s -miphoneos-version-min=%s -I%s/usr/include/ -I%s/include" % (env['SDKROOT'], ostarget, env['SDKROOT'], target.dist)
    env['CXXCPP'] = env['CPP'] = env['DEVROOT'] + "/usr/bin/llvm-cpp-4.2"
    env['CXX'] = env['DEVROOT'] + "/usr/bin/llvm-g++-4.2"
    env['CC'] = env['DEVROOT'] + "/usr/bin/llvm-gcc-4.2"
    env['LD'] = env['DEVROOT'] + "/usr/bin/ld"
    env['AR'] = env['DEVROOT'] + "/usr/bin/ar"
    env['AS'] = env['DEVROOT'] + "/usr/bin/ls"
    env['NM'] = env['DEVROOT'] + "/usr/bin/nm"
    env['RANLIB'] = env['DEVROOT'] + "/usr/bin/ranlib"
    env['STRIP'] = env['DEVROOT'] + "/usr/bin/strip"
    env['LDFLAGS'] = "-L%s/usr/lib/ -isysroot %s -miphoneos-version-min=%s -L%s/lib" % (env['SDKROOT'], env['SDKROOT'], ostarget, target.dist)
    env['HOST'] = '--host arm-apple-darwin'
    env['WITH_SYSROOT'] = '--with-sysroot="%s"' % env['SDKROOT']

    # This seems to be required with iOS SDK > 5.1, I hope it does not affect SDKs <= 5.1
    env['CODESIGN_ALLOCATE'] = join(env['DEVROOT'], 'usr/bin/codesign_allocate')

    return env, pp
Example #9
0
def prepare_arm_android_env(target,
                            pp=None,
                            openmp=False,
                            api_level=10,
                            gcc='4.4.3'):
    """ Set up the environment variables for ARM Android cross compilation from a OS X or Linux environment"""
    from schafer import ANDROID_NDK, ANDROID_SDK, HOSTPYTHON, HOSTPGEN
    if pp is None:
        pp = preprocessor()
    pp.defines.append('__ANDROID__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    try:
        api_level = int(api_level)
    except:
        error("Invalid Android API Level, please provide an integer >= 10")
        exit()

    if api_level < 10:
        error("Invalid Android Target API Level Selected (it has to be >=10)")
        exit()

    apitarget = 'android-%d' % api_level

    env = deepcopy(os.environ)

    # Check that the NDK and SDK exist
    if ANDROID_NDK == None:
        error(
            'No Android NDK location provided (use command line parameters or environment variable ANDROID_NDK)'
        )
        exit()
    if ANDROID_SDK == None:
        error(
            'No Android SDK location provided (use command line parameters or environment variable ANDROID_SDK)'
        )
        exit()

    if not isdir(ANDROID_NDK) or not isfile(
            join(ANDROID_NDK, 'ndk-build')
    ) or not isdir(
            join(
                ANDROID_NDK,
                "toolchains/arm-linux-androideabi-%s/prebuilt/linux-x86/bin" %
                gcc)):
        error('Can not locate Valid Android NDK at %s, install or update it' %
              (ANDROID_NDK, ))
        exit()
    if ANDROID_SDK == None or not isdir(ANDROID_SDK) or not isfile(
            join(ANDROID_SDK, 'tools', 'android')):
        error('Can not locate Android SDK at %s' % ANDROID_SDK)
        exit()

    # Check GCC version selected
    # NDK rev >= 8b has GCC 4.4.3 and 4.6
    if gcc not in ANDROID_VALID_GCC:
        error("Invalid GCC version. Please select one of: %s",
              ANDROID_VALID_GCC)

    if not isdir(
            join(ANDROID_NDK, 'toolchains', 'arm-linux-androideabi-' + gcc)):
        error("Your Android NDK does not have a GCC version %s" % gcc)
        exit()
    env['GCC_VERSION'] = gcc

    if 'JAVA_HOME' not in os.environ:
        env['JAVA_HOME'] = "/usr/lib/jvm/java-6-openjdk"

    if not isdir(env['JAVA_HOME']) or not isfile(
            join(env['JAVA_HOME'], 'bin', 'java')):
        env['JAVA_HOME'] = "/usr/lib/jvm/java-6-openjdk-amd64"
        if not isdir(env['JAVA_HOME']) or not isfile(
                join(env['JAVA_HOME'], 'bin', 'java')):
            error(
                'Can not locate JAVA. Please set the JAVA_HOME environment variable accordingly'
                % (env['JAVA_HOME'], ))
            exit()

    env['PATH'] = "%s/toolchains/arm-linux-androideabi-%s/prebuilt/linux-x86/bin/:%s:%s/tools:/usr/local/bin:/usr/bin:/bin:%s" % (
        ANDROID_NDK, gcc, ANDROID_NDK, ANDROID_SDK, '')  #env['PATH'])
    env['ARCH'] = "armeabi"
    env['SDK'] = ANDROID_SDK
    env['NDK'] = ANDROID_NDK
    env['STL'] = 'gnu'
    env['TARGET'] = apitarget

    #env['ARCH'] = "armeabi-v7a"
    if api_level > 13:
        env['SYSROOT'] = "%s/platforms/android-14/arch-arm" % ANDROID_NDK
    elif api_level > 9:
        env['SYSROOT'] = "%s/platforms/android-9/arch-arm" % ANDROID_NDK
    else:
        error("INVALID API LEVEL")
        exit()

    if not isdir(env['SYSROOT']):
        error("Could not find platform files at %s" % env['SYSROOT'])
        exit()

    env['CFLAGS'] = "-DANDROID -mandroid -fomit-frame-pointer --sysroot %s -I%s/include" % (
        env['SYSROOT'], target.dist)

    env['HOST'] = '--host arm-eabi'
    if env['ARCH'] == "armeabi-v7a":
        env['CFLAGS'] += " -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb"
        env['HOST'] = '--host armeabi-v7a'
    env['CXXFLAGS'] = env['CFLAGS']
    env['CC'] = 'arm-linux-androideabi-gcc %s' % (env['CFLAGS'], )
    env['CXX'] = 'arm-linux-androideabi-g++ %s' % (env['CXXFLAGS'], )
    env['AR'] = "arm-linux-androideabi-ar"
    env['RANLIB'] = "arm-linux-androideabi-ranlib"
    env['STRIP'] = "arm-linux-androideabi-strip --strip-unneeded"
    env['MAKE'] = 'make V=0 -k -j%d HOSTPYTHON=%s HOSTPGEN=%s CROSS_COMPILE=arm-eabi- CROSS_COMPILE_TARGET=yes' % (
        multiprocessing.cpu_count(), HOSTPYTHON, HOSTPGEN)

    env['WITH_SYSROOT'] = '--with-sysroot="%s"' % env['SYSROOT']

    # Debugging
    #    env['NDK_DEBUG'] = "1"
    #    # "-g" for debug info
    #    env['CFLAGS'] += " -g -gstabs+"
    #    env['CPPFLAGS'] = " -g -gstabs+"

    return env, pp
Example #10
0
def prepare_ios_env(target, pp=None, openmp=False, sdk=None, ostarget=None):
    """ Set up the environment variables for iOS cross compilation from a OS X environment, fat builds for armv6 and armv7"""
    if pp is None:
        pp = preprocessor()

    pp.defines.append('__IOS__')
    pp.defines.append('LITTLE_ENDIAN')
    pp.undefines.append('BIG_ENDIAN')

    env = deepcopy(os.environ)
    global XCODE_ROOT, BEST_IOS_SDK, IOS_SDK

    if XCODE_ROOT is None:
        XCODE_ROOT = find_xcode()

    if BEST_IOS_SDK is None:
        BEST_IOS_SDK = find_apple_sdk('iphoneos')

    if sdk is None:
        sdk = BEST_IOS_SDK

    env['DEVROOT'] = join(XCODE_ROOT, 'Platforms/iPhoneOS.platform/Developer')
    if IOS_SDK is None:
        IOS_SDK = env['DEVROOT'] + '/SDKs/iPhoneOS%s.sdk' % sdk
        if not isdir(IOS_SDK):
            error('Could not locate iOS SDK at %s' % IOS_SDK)
            exit()

        info('Using iOS SDK %s' % sdk)

    if float(sdk) >= 6:
        # iOS SDK >= 6 does not have armv6 support nor support for iOS < 4.3
        env['ARCHS'] = 'armv7 armv7s'
        if ostarget is None:
            ostarget = '4.3'
        elif float(ostarget) < 4.3:
            error(
                'The selected SDK version %s does not support iOS %s (use --apple-sdk and --apple-target). If you want to find out how to install older SDKs, this guide may be useful: http://blog.chpwn.com/post/31824877081'
                % (sdk, ostarget))
            exit()
    else:
        env['ARCHS'] = 'armv6 armv7'
        if ostarget is None:
            ostarget = '3.0'
        elif float(ostarget) < 3:
            error('The selected SDK version %s does not support iOS %s' %
                  (sdk, ostarget))
            exit()

    info("Building for the following architectures: %s" % env['ARCHS'])
    info("Building for iOS >= %s" % ostarget)
    env['IPHONEOS_DEPLOYMENT_TARGET'] = ostarget
    env['SDKROOT'] = IOS_SDK
    env['CFLAGS'] = env[
        'CXXFLAGS'] = "-g -O2 -pipe -no-cpp-precomp -isysroot %s -miphoneos-version-min=%s -I%s/usr/include/ -I%s/include" % (
            env['SDKROOT'], ostarget, env['SDKROOT'], target.dist)
    env['CXXCPP'] = env['CPP'] = env['DEVROOT'] + "/usr/bin/llvm-cpp-4.2"
    env['CXX'] = env['DEVROOT'] + "/usr/bin/llvm-g++-4.2"
    env['CC'] = env['DEVROOT'] + "/usr/bin/llvm-gcc-4.2"
    env['LD'] = env['DEVROOT'] + "/usr/bin/ld"
    env['AR'] = env['DEVROOT'] + "/usr/bin/ar"
    env['AS'] = env['DEVROOT'] + "/usr/bin/ls"
    env['NM'] = env['DEVROOT'] + "/usr/bin/nm"
    env['RANLIB'] = env['DEVROOT'] + "/usr/bin/ranlib"
    env['STRIP'] = env['DEVROOT'] + "/usr/bin/strip"
    env['LDFLAGS'] = "-L%s/usr/lib/ -isysroot %s -miphoneos-version-min=%s -L%s/lib" % (
        env['SDKROOT'], env['SDKROOT'], ostarget, target.dist)
    env['HOST'] = '--host arm-apple-darwin'
    env['WITH_SYSROOT'] = '--with-sysroot="%s"' % env['SDKROOT']

    # This seems to be required with iOS SDK > 5.1, I hope it does not affect SDKs <= 5.1
    env['CODESIGN_ALLOCATE'] = join(env['DEVROOT'],
                                    'usr/bin/codesign_allocate')

    return env, pp