Esempio n. 1
0
def main(installPrefix, binaryDestDir, shareDestDir, docDestDir, binaryBuildPath, targetPlatform, verboseStr, cbiosStr):
    customVars = extractMakeVariables("build/custom.mk")

    try:
        verbose = parseBool(verboseStr)
        cbios = parseBool(cbiosStr)
        symlinkForBinary = parseBool(customVars["SYMLINK_FOR_BINARY"])
    except ValueError, ex:
        print >> sys.stderr, "Invalid argument:", ex
        sys.exit(2)
Esempio n. 2
0
def main(installPrefix, binaryDestDir, shareDestDir, docDestDir,
         binaryBuildPath, targetPlatform, verboseStr, cbiosStr):
    customVars = extractMakeVariables('build/custom.mk')

    try:
        verbose = parseBool(verboseStr)
        cbios = parseBool(cbiosStr)
        symlinkForBinary = parseBool(customVars['SYMLINK_FOR_BINARY'])
    except ValueError, ex:
        print >> sys.stderr, 'Invalid argument:', ex
        sys.exit(2)
Esempio n. 3
0
def main(
	installPrefix, binaryDestDir, shareDestDir, docDestDir,
	binaryBuildPath, targetPlatform, verboseStr, cbiosStr
	):
	customVars = extractMakeVariables('build/custom.mk')

	try:
		verbose = parseBool(verboseStr)
		cbios = parseBool(cbiosStr)
		symlinkForBinary = parseBool(customVars['SYMLINK_FOR_BINARY'])
	except ValueError as ex:
		print('Invalid argument:', ex, file=sys.stderr)
		sys.exit(2)

	if installPrefix and not installPrefix.endswith('/'):
		# Just in case the destination directories are not absolute.
		installPrefix += '/'

	if verbose:
		print('Installing openMSX:')

	try:
		installAll(
			installPrefix, binaryDestDir, shareDestDir, docDestDir,
			binaryBuildPath, targetPlatform, cbios, symlinkForBinary
			)
	except OSError as ex:
		print('Installation failed:', ex, file=sys.stderr)
		sys.exit(1)

	if verbose:
		print('Installation complete... have fun!')
		print((
			'Notice: if you want to emulate real MSX systems and not only the '
			'free C-BIOS machines, put the system ROMs in one of the following '
			'directories: %s/systemroms or '
			'~/.openMSX/share/systemroms\n'
			'If you want openMSX to find MSX software referred to from replays '
			'or savestates you get from your friends, copy that MSX software to '
			'%s/software or '
			'~/.openMSX/share/software'
			) % (shareDestDir, shareDestDir))
Esempio n. 4
0
def iterProbeResults(probeVars, configuration, logPath):
    '''Present probe results, so user can decide whether to start the build,
	or to change system configuration and rerun "configure".
	'''
    desiredComponents = set(configuration.iterDesiredComponents())
    requiredComponents = set(configuration.iterRequiredComponents())
    buildableComponents = set(configuration.iterBuildableComponents(probeVars))
    packages = sorted(
        (getPackage(makeName)
         for makeName in requiredLibrariesFor(desiredComponents)),
        key=lambda package: package.niceName.lower())
    customVars = extractMakeVariables('build/custom.mk')

    yield ''
    if not parseBool(probeVars['COMPILER']):
        yield 'No working C++ compiler was found.'
        yield "Please install a C++ compiler, such as GCC's g++."
        yield 'If you have a C++ compiler installed and openMSX did not ' \
         'detect it, please set the environment variable CXX to the name ' \
         'of your C++ compiler.'
        yield 'After you have corrected the situation, rerun "configure".'
        yield ''
    else:
        # Compute how wide the first column should be.
        def iterNiceNames():
            for package in packages:
                yield package.niceName
            for component in iterComponents():
                yield component.niceName

        maxLen = max(len(niceName) for niceName in iterNiceNames())
        formatStr = '  %-' + str(maxLen + 3) + 's %s'

        yield 'Found libraries:'
        for package in packages:
            makeName = package.getMakeName()
            if probeVars['HAVE_%s_LIB' % makeName]:
                found = 'version %s' % probeVars['VERSION_%s' % makeName]
            elif probeVars['HAVE_%s_H' % makeName]:
                # Dependency resolution of a typical distro will not allow
                # this situation. Most likely we got the link flags wrong.
                found = 'headers found, link test failed'
            else:
                found = 'no'
            yield formatStr % (package.niceName + ':', found)
        yield ''

        yield 'Components overview:'
        for component in iterComponents():
            if component in desiredComponents:
                status = 'yes' if component in buildableComponents else 'no'
            else:
                status = 'disabled'
            yield formatStr % (component.niceName + ':', status)
        yield ''

        yield 'Customisable options:'
        yield formatStr % ('Install to', customVars['INSTALL_BASE'])
        yield '  (you can edit these in build/custom.mk)'
        yield ''

        if buildableComponents == desiredComponents:
            yield 'All required and optional components can be built.'
        elif requiredComponents.issubset(buildableComponents):
            yield 'If you are satisfied with the probe results, ' \
             'run "make" to start the build.'
            yield 'Otherwise, install some libraries and headers ' \
             'and rerun "configure".'
        else:
            yield 'Please install missing libraries and headers ' \
             'and rerun "configure".'
        yield ''
        yield 'If the detected libraries differ from what you think ' \
         'is installed on this system, please check the log file: %s' \
         % logPath
        yield ''
Esempio n. 5
0
def iterBuildInfoHeader(targetPlatform, cpuName, flavour, installShareDir):
    platformVars = extractMakeVariables(
        joinpath(dirname(__file__), 'platform-%s.mk' % targetPlatform),
        dict.fromkeys(('COMPILE_FLAGS', 'LINK_FLAGS', 'LDFLAGS',
                       'TARGET_FLAGS', 'OPENMSX_TARGET_CPU'), ''))
    setWindowIcon = parseBool(platformVars.get('SET_WINDOW_ICON', 'true'))

    targetCPU = getCPU(cpuName)

    # TODO: Add support for device-specific configuration.
    platformDingux = targetPlatform == 'dingux'
    platformPandora = targetPlatform == 'pandora'
    platformAndroid = targetPlatform == 'android'

    # Defaults.
    have16BPP = True
    have32BPP = True
    minScaleFactor = 1
    maxScaleFactor = 4

    # Platform overrides.
    if platformDingux:
        maxScaleFactor = 1
    elif platformAndroid:
        # At the moment, libsdl android crashes when trying to dynamically change the scale factor
        # TODO: debug why it crashes and then change the maxScaleFactor parameter here
        # so that people with a powerfull enough android device can use a higher scale factor
        have32BPP = False
        minScaleFactor = 2
        maxScaleFactor = 2
    elif platformPandora:
        have32BPP = False
        maxScaleFactor = 3

    yield '// Automatically generated by build process.'
    yield ''
    yield '#ifndef BUILD_INFO_HH'
    yield '#define BUILD_INFO_HH'
    yield ''
    # Use a macro i.s.o. a boolean to prevent compilation errors on inline asm.
    # Assembly doesn't appear to work with MINGW64... TODO: find out why
    yield '#ifdef __MINGW64__'
    yield '#define ASM_X86 0'
    yield '#define ASM_X86 0'
    yield '#define ASM_X86_32 0'
    yield '#define ASM_X86_64 0'
    yield '#else'
    # A compiler will typically only understand the instruction set that it
    # generates code for.
    yield '#define ASM_X86 %d' % (targetCPU is X86 or targetCPU is X86_64)
    yield '#define ASM_X86_32 %d' % (targetCPU is X86)
    yield '#define ASM_X86_64 %d' % (targetCPU is X86_64)
    yield '#endif'
    # Use a macro iso integer because we really need to exclude code sections
    # based on this.
    yield '#define PLATFORM_DINGUX %d' % platformDingux
    yield '#define PLATFORM_ANDROID %d' % platformAndroid
    yield '#define HAVE_16BPP %d' % have16BPP
    yield '#define HAVE_32BPP %d' % have32BPP
    yield '#define MIN_SCALE_FACTOR %d' % minScaleFactor
    yield '#define MAX_SCALE_FACTOR %d' % maxScaleFactor
    yield ''
    yield 'namespace openmsx {'
    yield ''
    # Note: Don't call it "BIG_ENDIAN", because some system header may #define
    #       that.
    yield 'static const bool OPENMSX_BIGENDIAN = %s;' \
     % str(targetCPU.bigEndian).lower()
    yield 'static const bool OPENMSX_UNALIGNED_MEMORY_ACCESS = %s;' \
     % str(targetCPU.unalignedMemoryAccess).lower()
    yield 'static const bool OPENMSX_SET_WINDOW_ICON = %s;' \
     % str(setWindowIcon).lower()
    yield 'static const char* const DATADIR = "%s";' % installShareDir
    yield 'static const char* const BUILD_FLAVOUR = "%s";' % flavour
    yield 'static const char* const TARGET_PLATFORM = "%s";' % targetPlatform
    yield ''
    yield '} // namespace openmsx'
    yield ''
    yield '#endif // BUILD_INFO_HH'
Esempio n. 6
0
def iterBuildInfoHeader(targetPlatform, cpuName, flavour, installShareDir):
	platformVars = extractMakeVariables(
		'build/platform-%s.mk' % targetPlatform,
		dict.fromkeys(
			('COMPILE_FLAGS', 'LINK_FLAGS', 'TARGET_FLAGS',
				'ANDROID_LDFLAGS', 'ANDROID_CXXFLAGS',
				'OPENMSX_TARGET_CPU'),
			''
			)
		)
	setWindowIcon = parseBool(platformVars.get('SET_WINDOW_ICON', 'true'))

	targetCPU = getCPU(cpuName)

	# TODO: Add support for device-specific configuration.
	platformDingux = targetPlatform == 'dingux'
	platformMaemo5 = targetPlatform == 'maemo5'
	platformPandora = targetPlatform == 'pandora'
	platformAndroid = targetPlatform == 'android'

	# Defaults.
	have16BPP = True
	have32BPP = True
	minScaleFactor = 1
	maxScaleFactor = 4

	# Platform overrides.
	if platformDingux:
		maxScaleFactor = 1
	elif platformAndroid:
		# At the moment, libsdl android crashes when trying to dynamically change the scale factor
		# TODO: debug why it crashes and then change the maxScaleFactor parameter here
		# so that people with a powerfull enough android device can use a higher scale factor
		have32BPP = False
		maxScaleFactor = 1
	elif platformMaemo5:
		# TODO: These are in fact N900 specific settings, but we have no
		#       support yet for device specific configuration and the N900
		#       is the most popular Maemo device currently.
		have32BPP = False
		maxScaleFactor = 2
	elif platformPandora:
		have32BPP = False
		maxScaleFactor = 3

	yield '// Automatically generated by build process.'
	yield ''
	yield '#ifndef BUILD_INFO_HH'
	yield '#define BUILD_INFO_HH'
	yield ''
	# Use a macro i.s.o. a boolean to prevent compilation errors on inline asm.
	# Assembly doesn't appear to work with MINGW64... TODO: find out why
	yield '#ifdef __MINGW64__'
	yield '#define ASM_X86 0'
	yield '#define ASM_X86 0'
	yield '#define ASM_X86_32 0'
	yield '#define ASM_X86_64 0'
	yield '#else'
	# A compiler will typically only understand the instruction set that it
	# generates code for.
	yield '#define ASM_X86 %d' % (targetCPU is X86 or targetCPU is X86_64)
	yield '#define ASM_X86_32 %d' % (targetCPU is X86)
	yield '#define ASM_X86_64 %d' % (targetCPU is X86_64)
	yield '#endif'
	# Use a macro iso integer because we really need to exclude code sections
	# based on this.
	yield '#define PLATFORM_DINGUX %d' % platformDingux
	yield '#define PLATFORM_MAEMO5 %d' % platformMaemo5
	yield '#define PLATFORM_ANDROID %d' % platformAndroid
	yield '#define HAVE_16BPP %d' % have16BPP
	yield '#define HAVE_32BPP %d' % have32BPP
	yield '#define MIN_SCALE_FACTOR %d' % minScaleFactor
	yield '#define MAX_SCALE_FACTOR %d' % maxScaleFactor
	yield ''
	yield 'namespace openmsx {'
	yield ''
	# Note: Don't call it "BIG_ENDIAN", because some system header may #define
	#       that.
	yield 'static const bool OPENMSX_BIGENDIAN = %s;' \
		% str(targetCPU.bigEndian).lower()
	yield 'static const bool OPENMSX_UNALIGNED_MEMORY_ACCESS = %s;' \
		% str(targetCPU.unalignedMemoryAccess).lower()
	yield 'static const bool OPENMSX_SET_WINDOW_ICON = %s;' \
		% str(setWindowIcon).lower()
	yield 'static const char* const DATADIR = "%s";' % installShareDir
	yield 'static const char* const BUILD_FLAVOUR = "%s";' % flavour
	yield 'static const char* const TARGET_PLATFORM = "%s";' % targetPlatform
	yield ''
	yield '} // namespace openmsx'
	yield ''
	yield '#endif // BUILD_INFO_HH'
Esempio n. 7
0
def iterProbeResults(probeVars, configuration, logPath):
	'''Present probe results, so user can decide whether to start the build,
	or to change system configuration and rerun "configure".
	'''
	desiredComponents = set(configuration.iterDesiredComponents())
	requiredComponents = set(configuration.iterRequiredComponents())
	buildableComponents = set(configuration.iterBuildableComponents(probeVars))
	packages = sorted(
		(	getPackage(makeName)
			for makeName in requiredLibrariesFor(desiredComponents)
			),
		key = lambda package: package.niceName.lower()
		)
	customVars = extractMakeVariables('build/custom.mk')

	yield ''
	if not parseBool(probeVars['COMPILER']):
		yield 'No working C++ compiler was found.'
		yield "Please install a C++ compiler, such as GCC's g++."
		yield 'If you have a C++ compiler installed and openMSX did not ' \
			'detect it, please set the environment variable CXX to the name ' \
			'of your C++ compiler.'
		yield 'After you have corrected the situation, rerun "configure".'
		yield ''
	else:
		# Compute how wide the first column should be.
		def iterNiceNames():
			for package in packages:
				yield package.niceName
			for component in iterComponents():
				yield component.niceName
		maxLen = max(len(niceName) for niceName in iterNiceNames())
		formatStr = '  %-' + str(maxLen + 3) + 's %s'

		yield 'Found libraries:'
		for package in packages:
			makeName = package.getMakeName()
			if probeVars['HAVE_%s_LIB' % makeName]:
				found = 'version %s' % probeVars['VERSION_%s' % makeName]
			elif probeVars['HAVE_%s_H' % makeName]:
				# Dependency resolution of a typical distro will not allow
				# this situation. Most likely we got the link flags wrong.
				found = 'headers found, link test failed'
			else:
				found = 'no'
			yield formatStr % (package.niceName + ':', found)
		yield ''

		yield 'Components overview:'
		for component in iterComponents():
			if component in desiredComponents:
				status = 'yes' if component in buildableComponents else 'no'
			else:
				status = 'disabled'
			yield formatStr % (component.niceName + ':', status)
		yield ''

		yield 'Customisable options:'
		yield formatStr % ('Install to', customVars['INSTALL_BASE'])
		yield '  (you can edit these in build/custom.mk)'
		yield ''

		if buildableComponents == desiredComponents:
			yield 'All required and optional components can be built.'
		elif requiredComponents.issubset(buildableComponents):
			yield 'If you are satisfied with the probe results, ' \
				'run "make" to start the build.'
			yield 'Otherwise, install some libraries and headers ' \
				'and rerun "configure".'
		else:
			yield 'Please install missing libraries and headers ' \
				'and rerun "configure".'
		yield ''
		yield 'If the detected libraries differ from what you think ' \
			'is installed on this system, please check the log file: %s' \
			% logPath
		yield ''
Esempio n. 8
0
def iterBuildInfoHeader(targetPlatform, cpuName, flavour, installShareDir):
    platformVars = extractMakeVariables(
        'build/platform-%s.mk' % targetPlatform,
        dict.fromkeys(('COMPILE_FLAGS', 'LINK_FLAGS', 'TARGET_FLAGS',
                       'COMPILE_ENV', 'LINK_ENV'), ''))
    setWindowIcon = parseBool(platformVars.get('SET_WINDOW_ICON', 'true'))

    targetCPU = getCPU(cpuName)

    # TODO: Add support for device-specific configuration.
    platformDingux = targetPlatform == 'dingux'
    platformGP2X = False
    platformMaemo5 = targetPlatform == 'maemo5'
    platformPandora = targetPlatform == 'pandora'

    # Defaults.
    have16BPP = True
    have32BPP = True
    minScaleFactor = 1
    maxScaleFactor = 4

    # Platform overrides.
    if platformDingux or platformGP2X:
        have32BPP = False
        maxScaleFactor = 1
    elif platformMaemo5:
        # TODO: These are in fact N900 specific settings, but we have no
        #       support yet for device specific configuration and the N900
        #       is the most popular Maemo device currently.
        have32BPP = False
        maxScaleFactor = 2
    elif platformPandora:
        have32BPP = False
        maxScaleFactor = 3

    yield '// Automatically generated by build process.'
    yield ''
    yield '#ifndef BUILD_INFO_HH'
    yield '#define BUILD_INFO_HH'
    yield ''
    yield '#include <string>'
    yield ''
    # Use a macro i.s.o. a boolean to prevent compilation errors on inline asm.
    # A compiler will typically only understand the instruction set that it
    # generates code for.
    yield '#define ASM_X86 %d' % (targetCPU is X86 or targetCPU is X86_64)
    yield '#define ASM_X86_32 %d' % (targetCPU is X86)
    yield '#define ASM_X86_64 %d' % (targetCPU is X86_64)
    # Use a macro iso integer because we really need to exclude code sections
    # based on this.
    yield '#define PLATFORM_DINGUX %d' % platformDingux
    yield '#define PLATFORM_GP2X %d' % platformGP2X
    yield '#define PLATFORM_MAEMO5 %d' % platformMaemo5
    yield '#define HAVE_16BPP %d' % have16BPP
    yield '#define HAVE_32BPP %d' % have32BPP
    yield '#define MIN_SCALE_FACTOR %d' % minScaleFactor
    yield '#define MAX_SCALE_FACTOR %d' % maxScaleFactor
    yield ''
    yield 'namespace openmsx {'
    yield ''
    # Note: Don't call it "BIG_ENDIAN", because some system header may #define
    #       that.
    yield 'static const bool OPENMSX_BIGENDIAN = %s;' \
     % str(targetCPU.bigEndian).lower()
    yield 'static const bool OPENMSX_UNALIGNED_MEMORY_ACCESS = %s;' \
     % str(targetCPU.unalignedMemoryAccess).lower()
    yield 'static const bool OPENMSX_SET_WINDOW_ICON = %s;' \
     % str(setWindowIcon).lower()
    yield 'static const std::string DATADIR = "%s";' % installShareDir
    yield 'static const std::string BUILD_FLAVOUR = "%s";' % flavour
    yield ''
    yield '} // namespace openmsx'
    yield ''
    yield '#endif // BUILD_INFO_HH'