changeset 3:3fd05f082eb5

cross packages
author hanwen <hanwen@xs4all.nl>
date Mon, 21 Nov 2005 21:48:21 +0100
parents e769b4cd47d2
children 3c4b27fcdec0
files driver.py specs/cross.py specs/darwintools.py specs/framework.py specs/gub.py
diffstat 5 files changed, 165 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- a/driver.py	Sun Nov 20 22:06:48 2005 +0100
+++ b/driver.py	Mon Nov 21 21:48:21 2005 +0100
@@ -12,10 +12,11 @@
 
 	
 settings = Settings()
-settings.target_architecture = 'powerpc-apple-darwin' 
+settings.target_architecture = 'powerpc-apple-darwin7' 
+settings.target_gcc_flags = '' 
 settings.topdir = os.getcwd()
 settings.downloaddir = os.getcwd() + '/downloads/'
-
+settings.build_spec = 'i686-linux'
 settings.srcdir = os.path.join (settings.topdir, 'src')
 settings.specdir = settings.topdir + '/specs/'
 settings.targetdir = settings.topdir + '/target/%s/' % settings.target_architecture
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/specs/cross.py	Mon Nov 21 21:48:21 2005 +0100
@@ -0,0 +1,68 @@
+
+
+
+cross_config_cache = """ac_cv_c_bigendian=${ac_cv_c_bigendian=no}
+ac_cv_c_long_size_t=${ac_cv_c_long_size_t=no}
+ac_cv_c_long_time_t=${ac_cv_c_long_time_t=yes}
+ac_cv_sizeof___int64=${ac_cv_sizeof___int64=0}
+ac_cv_sizeof_char=${ac_cv_sizeof_char=1}
+ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p=4}
+ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
+ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
+ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
+ac_cv_sizeof_intmax_t=${ac_cv_sizeof_intmax_t=8}
+ac_cv_sizeof_intptr_t=${ac_cv_sizeof_intptr_t=4}
+ac_cv_sizeof_long=${ac_cv_sizeof_long=4}
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=12}
+ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
+ac_cv_sizeof_ptrdiff_t=${ac_cv_sizeof_ptrdiff_t=4}
+ac_cv_sizeof_short=${ac_cv_sizeof_short=2}
+ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
+ac_cv_sizeof_uintptr_t=${ac_cv_sizeof_uintptr_t=4}
+ac_cv_sizeof_unsigned___int64=${ac_cv_sizeof_unsigned___int64=0}
+ac_cv_sizeof_unsigned_char=${ac_cv_sizeof_unsigned_char=1}
+ac_cv_sizeof_unsigned_int=${ac_cv_sizeof_unsigned_int=4}
+ac_cv_sizeof_unsigned_long=${ac_cv_sizeof_unsigned_long=4}
+ac_cv_sizeof_unsigned_long_long=${ac_cv_sizeof_unsigned_long_long=8}
+ac_cv_sizeof_unsigned_short=${ac_cv_sizeof_unsigned_short=2}
+ac_cv_sizeof_void_p=${ac_cv_sizeof_void_p=4}
+ac_16bit_type=${ac_16bit_type=short}
+ac_32bit_type=${ac_32bit_type=int}
+ac_64bit_type=${ac_64bit_type=none}
+ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls=yes}
+ac_cv_sprintf_count=${ac_cv_sprintf_count=yes}
+ac_cv_spinlocks=${ac_cv_spinlocks=no}
+ac_cv_func_getpgrp_void=${ac_cv_func_getpgrp_void=yes}
+ac_cv_func_setvbuf_reversed=${ac_cv_func_setvbuf_reversed=no}
+# but in mingw only if winsock2.h
+ac_cv_func_select=${ac_cv_func_select=yes}
+ac_cv_search_dlopen=${ac_cv_search_dlopen="none required"}
+ac_exeext=${ac_exeext=}
+ac_cv_exeext=${ac_cv_exeext=}
+
+# libtool searches not only in the cross libpath
+#     /cygwin/usr/lib:/cygwin/usr/lib/w32api:/usr/i686-cygwin/lib
+# but also in /usr/lib.  there it finds libdl.a and adds -ldl
+# to LIBS
+# it seems that libtool is broken wrt cross compilation:
+#    sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
+lt_cv_dlopen=${lt_cv_dlopen="dlopen"}
+lt_cv_dlopen_libs=${lt_cv_dlopen_libs="none required"}
+libltdl_cv_sys_search_path=${libltdl_cv_sys_search_path="'"/lib /usr/lib $cygwin_prefix/lib"'"}
+lt_cv_sys_max_cmd_len=${lt_cv_sys_max_cmd_len=8192}
+ac_cv_lib_dld_shl_load=${ac_cv_lib_dld_shl_load=no}
+ac_cv_lib_dl_dlopen=${ac_cv_lib_dl_dlopen=no}
+ac_cv_c_stack_direction=${ac_cv_c_stack_direction=-1}
+"""
+
+
+cygwin = """ac_cv_func_mkfifo=${ac_cv_func_mkfifo=yes}
+ac_cv_have_dev_ptmx=${ac_cv_have_dev_ptmx=}
+ac_cv_have_dev_ptc=${ac_cv_have_dev_ptc=}
+"""
+
+mingw = """ac_cv_func_mkfifo=${ac_cv_func_mkfifo=no}
+ac_cv_have_dev_ptmx=${ac_cv_have_dev_ptmx=no}
+ac_cv_have_dev_ptc=${ac_cv_have_dev_ptc=no}
+"""
+
--- a/specs/darwintools.py	Sun Nov 20 22:06:48 2005 +0100
+++ b/specs/darwintools.py	Mon Nov 21 21:48:21 2005 +0100
@@ -1,7 +1,7 @@
 import re
 import gub
 
-class  Darwin_sdk (gub.Package):
+class  Darwin_sdk (gub.Cross_package):
 	def file_name (self):
 		return 'darwin-sdk.tar.gz'
 	def __init__ (self, settings):
@@ -20,23 +20,17 @@
 	def install (self):
 		pass
 	
-class Odcc_tools (gub.Package):
+class Odcc_tools (gub.Cross_package):
 	def __init__ (self, settings):
-		gub.Package.__init__ (self, settings)
+		gub.Cross_package.__init__ (self, settings)
 		self.url = 'http://www.opendarwin.org/downloads/odcctools-20051031.tar.bz2'
-
 	def installdir (self):
 		return self.settings.tooldir
 	
-	def configure_command (self):
-		cmd = gub.Package.configure_command (self)
-		cmd += ' --target=%s --with-sysroot=%s ' % (self.settings.target_architecture, self.settings.systemdir)
-		
-		return cmd
 
-class Gcc (gub.Package):
+class Gcc (gub.Cross_package):
 	def __init__ (self, settings):
-		gub.Package.__init__ (self,settings)
+		gub.Cross_package.__init__ (self,settings)
 		self.url = 'ftp://dl.xs4all.nl/pub/mirror/gnu/gcc/gcc-4.0.2/gcc-4.0.2.tar.bz2'
 
 	def patch (self):
@@ -46,20 +40,18 @@
 		# backup file.
 		open (fn + "~", 'w').write (str)
 		
-		str = re.sub ('/usr/bin/libtool', '%s/bin/powerpc-apple-darwin-libtool' % self.settings.tooldir, str)
+		str = re.sub ('/usr/bin/libtool', '%s/bin/powerpc-apple-darwin7-libtool' % self.settings.tooldir, str)
 		open (fn,'w').write (str)
 		
 	def configure_command (self):
-		cmd = gub.Package.configure_command (self)
+		cmd = gub.Cross_package.configure_command (self)
 		cmd += ''' --prefix=%(tooldir)s \
 --program-prefix=%(target_architecture)s- \
---target=%(target_architecture)s \
---with-as=%(tooldir)s/bin/powerpc-apple-darwin-as  \
---with-ld=%(tooldir)s/bin/powerpc-apple-darwin-ld  \
---with-sysroot=%(systemdir)s --enable-static --enable-shared  \
---enable-languages=c ''' % self.settings.__dict__
-
-		# let's skip c++ for the moment.
+--with-as=%(tooldir)s/bin/powerpc-apple-darwin7-as  \
+--with-ld=%(tooldir)s/bin/powerpc-apple-darwin7-ld  \
+ --enable-static --enable-shared  \
+--enable-libstdcxx-debug \
+--enable-languages=c,c++ ''' % self.settings.__dict__
 		return cmd
 
 		
--- a/specs/framework.py	Sun Nov 20 22:06:48 2005 +0100
+++ b/specs/framework.py	Mon Nov 21 21:48:21 2005 +0100
@@ -2,11 +2,20 @@
 import re
 import gub
 
-class  Gettext (gub.Package):
+class  Gettext (gub.Target_package):
 	def __init__ (self, settings):
 		gub.Package.__init__ (self, settings)
 		self.url = 'ftp://dl.xs4all.nl/pub/mirror/gnu/gettext/gettext-0.14.tar.gz'
 
+	def configure_cache_overrides (self, str):
+		str = re.sub ('ac_cv_func_select=yes','ac_cv_func_select=no', str)
+		return str
+	
+	def configure_command (self):
+		cmd = gub.Target_package.configure_command (self)
+		cmd += ' --disable-csharp '
+		return cmd
+	
 	def install_dir (self):
 		return self.settings.installdir
 	
--- a/specs/gub.py	Sun Nov 20 22:06:48 2005 +0100
+++ b/specs/gub.py	Mon Nov 21 21:48:21 2005 +0100
@@ -1,26 +1,38 @@
 import os
 import sys
 import re
+import subprocess
+import cross
 
-def system (cmd, ignore_error = False):
+def system (cmd, ignore_error = False, env = {}):
+	call_env = os.environ.copy()
+	call_env.update (env)
+
+	for (k,v) in env.items():
+		sys.stderr.write ('%s=%s\n' % (k,v))
+
 	sys.stderr.write ('invoking %s\n' % cmd)
-	stat = os.system (cmd)
+
+	proc = subprocess.Popen (cmd, shell=True, env = call_env)
+	stat = proc.wait ()
+	
 	if stat and not ignore_error:
 		sys.stderr.write ('fail\n')
 		sys.exit (1)
 
 	return 0 
 
-
-
 class Package:
 	def __init__ (self, settings):
 		self.settings = settings
 	
+	def system (self, cmd, env = {}):
+		system (cmd, ignore_error = False, env = env)
+		
 	def download (self):
 		dir = self.settings.downloaddir
 		if not os.path.exists (dir + '/' + self.file_name ()): 
-			system ('cd %s ; wget %s ' % (dir, self.url))
+			self.system ('cd %s ; wget %s ' % (dir, self.url))
 
 	def unpack_destination (self):
 		return self.settings.srcdir
@@ -60,7 +72,7 @@
 			% (self.srcdir (), self.installdir ()))
 
 	def configure (self):
-		system ("mkdir -p %s;  cd %s && %s" % (self.builddir(),
+		self.system ("mkdir -p %s;  cd %s && %s" % (self.builddir(),
 						       self.builddir(),
 						       self.configure_command ()))
 
@@ -68,13 +80,13 @@
 		return 'make install'
 	
 	def install (self):
-		system ("cd %s && %s" % (self.builddir (), self.install_command ())) 
+		self.system ("cd %s && %s" % (self.builddir (), self.install_command ())) 
 
 	def compile_command (self):
 		return 'make'
 
 	def compile (self):
-		system ("cd %s && %s" % (self.builddir(), self.compile_command ()))
+		self.system ("cd %s && %s" % (self.builddir(), self.compile_command ()))
 
 	def patch (self):
 		pass
@@ -91,6 +103,57 @@
 			cmd = '-xzf '
 
 		cmd = "tar %s %s -C %s " % (cmd, file, self.unpack_destination ())
-		system (cmd) 
+		self.system (cmd) 
+
+
+class Cross_package (Package):
+	def configure_command (self):
+		cmd = Package.configure_command (self)
+		cmd += ' --target=%s --with-sysroot=%s ' % (self.settings.target_architecture, self.settings.systemdir)
+		return cmd
+		
 
 	
+class Target_package (Package):
+	def configure_command (self):
+		flags = '--config-cache --enable-shared --disable-static --build=%(build_spec)s --host=%(target_architecture)s --target=%(target_architecture)s --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --includedir=/nonexistent/include --libexecdir=/usr/sbin'
+		flags = flags % self.settings.__dict__
+
+		return '%s/configure %s' % (self.srcdir(), flags)
+
+	def configure_cache_overrides (self,str):
+		 return str
+	 
+	def configure (self):
+		self.system ("mkdir -p %s")
+		cache_fn = self.builddir () +'/config.cache'
+		cache = open (cache_fn, 'w')
+		str = cross.cross_config_cache + cross.cygwin
+		str = self.configure_cache_overrides (str)
+		cache.write (str)
+		cache.close ()
+
+		os.chmod (cache_fn, 0755)
+		Package.configure (self)
+
+	def system (self, cmd):
+	
+		dict = {'CXX':'%(target_architecture)s-g++ %(target_gcc_flags)s',
+		 'CXX_FOR_TARGET':'%(target_architecture)s-g++ %(target_gcc_flags)s',
+		 'CC':'%(target_architecture)sgcc %(target_gcc_flags)s',
+		 'CC_FOR_TARGET': '%(target_architecture)sgcc %(target_gcc_flags)s',
+		 'RANLIB': '%(target_architecture)s-ranlib',
+		 'RANLIB_FOR_TARGET': '%(target_architecture)s-ranlib',
+		 'DLLWRAP' : '%(target_architecture)s-dllwrap',
+		 'AR': '%(target_architecture)s-ar',
+		 'NM': '%(target_architecture)s-nm'}
+		
+		for (k,v) in dict.items():
+			v = v % self.settings.__dict__
+			dict[k] = v
+			
+		return Package.system (self, cmd, env = dict)
+		
+
+		
+