#4819: [PATCH] undefined symbols; mixed architecture build
---------------------------------+------------------------------------------
Reporter: altaic | Owner:
Type: bug | Status: new
Priority: normal | Component: Build System
Version: 7.1 | Keywords:
Testcase: | Blockedby:
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: Building GHC failed
---------------------------------+------------------------------------------
'''Machine:'''
{{{
Processor: 3.06 GHz Intel Core 2 Duo
Architecture: x86/x86_64
OS: Mac OS X 10.6.5
}}}
'''Bootstrap GHC Info:'''
{{{
ghc --info
[("Project name","The Glorious Glasgow Haskell Compilation System")
,("Project version","7.0.0.20100924")
,("Booter version","6.12.3")
,("Stage","2")
,("Build platform","i386-apple-darwin")
,("Host platform","i386-apple-darwin")
,("Target platform","i386-apple-darwin")
,("Have interpreter","YES")
,("Object splitting","NO")
,("Have native code generator","YES")
,("Have llvm code generator","YES")
,("Use archives for ghci","True")
,("Support SMP","YES")
,("Unregisterised","NO")
,("Tables next to code","YES")
,("RTS ways","l debug thr thr_debug thr_l thr_p dyn debug_dyn thr_dyn
thr_debug_dyn")
,("Leading underscore","YES")
,("Debug on","False")
,("LibDir","/Library/Frameworks/GHC.framework/Versions/700/usr/lib/ghc-7.0.0.20100924")
,("Global Package
DB","/Library/Frameworks/GHC.framework/Versions/700/usr/lib/ghc-7.0.0.20100924/package.conf.d")
]
}}}
'''Configure Info:'''
{{{
$./configure --build=x86_64-apple-darwin --host=x86_64-apple-darwin
--target=x86_64-apple-darwin
...
Configure completed successfully.
Building GHC version : 7.1.20101203
Build platform : x86_64-apple-darwin
Host platform : x86_64-apple-darwin
Target platform : x86_64-apple-darwin
Bootstrapping using : /usr/bin/ghc
which is version : 7.0.0.20100924
Using GCC : /usr/bin/gcc
which is version : 4.2.1
ld : /usr/bin/ld
Happy : /usr/local/bin/happy (1.18.5)
Alex : /usr/local/bin/alex (2.3.3)
Python : /usr/bin/python
Perl : /usr/bin/perl
dblatex : /usr/local/bin/dblatex
xsltproc : /usr/bin/xsltproc
HsColour : /Users/x/.cabal/bin/HsColour
Building DocBook HTML documentation : YES
Building DocBook PS documentation : YES
Building DocBook PDF documentation : YES
}}}
'''Error:'''
{{{
"/usr/bin/ghc" -H32m -O -package-conf libraries/bootstrapping.conf
-i -iutils/unlit/. -iutils/unlit/dist/build
-iutils/unlit/dist/build/autogen -Iutils/unlit/dist/build
-Iutils/unlit/dist/build/autogen -no-user-package-conf -rtsopts
-c utils/unlit/unlit.c -o utils/unlit/dist/build/unlit.o
"inplace/bin/mkdirhier" utils/unlit/dist/build/tmp//.
"/usr/bin/gcc" -o utils/unlit/dist/build/tmp/unlit -m64 -isysroot
/Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 -fno-stack-
protector utils/unlit/dist/build/unlit.o
ld: warning: in utils/unlit/dist/build/unlit.o, file was built for i386
which is not the architecture being linked (x86_64)
Undefined symbols:
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[1]: *** [utils/unlit/dist/build/tmp/unlit] Error 1
make: *** [all] Error 2
}}}
'''Hypothesis:''' The bootstrap ghc (previous one I had installed on the
machine) was built for the i386 architecture and generates only i386
binaries/objects. By telling configure "--build=x86_64-apple-darwin", it
assumes not only that the machine arch is x86_64 (which is true and is
what I'd intended), but also that the bootstrap ghc targets x86_64 (which
is false and I hadn't realized). This sort of problem seems to stem from
the advent of multi-architecture machines, which has blurred the lines of
native-compilation and cross-compilation.
'''Temporary Workaround:''' Have configure verify that the bootstrap ghc's
arch (from `ghc --info`) matches the specified build arch, and spit out a
sensible error if not. Here's a patch:
{{{
--- old-ghc/configure.ac 2010-12-06 01:35:13.000000000 -0500
+++ new-ghc/configure.ac 2010-12-06 01:35:13.000000000 -0500
@@ -227,6 +227,13 @@
GHC_CONVERT_OS([$build_os], [BuildOS])
fi
+# Verify that the installed (bootstrap) GHC is capable of generating code
for the requested build platform.
+if test "$build" != "$bootstrap_target"
+then
+ echo "The bootstrap GHC ($bootstrap_target) cannot generate code for
the given build platform ($build)"
+ exit 1
+fi
+
if test "$host_alias" = ""
then
if test "${WithGhc}" != ""
}}}
'''Permanent Resolution:''' Allow ghc to directly target multiple
platforms.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/4819>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs