Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
jberryman
GHC
Commits
9142c238
Commit
9142c238
authored
Nov 27, 2010
by
Ian Lynagh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Always enable the archive-loading code
If the GHCi .o lib doesn't exist, load the .a instead
parent
71d0e9a0
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
47 additions
and
64 deletions
+47
-64
compiler/ghc.mk
compiler/ghc.mk
+13
-11
compiler/ghci/Linker.lhs
compiler/ghci/Linker.lhs
+14
-27
compiler/main/DynFlags.hs
compiler/main/DynFlags.hs
+0
-1
mk/config.mk.in
mk/config.mk.in
+0
-6
rts/Linker.c
rts/Linker.c
+9
-11
rts/ghc.mk
rts/ghc.mk
+0
-4
rules/build-package-data.mk
rules/build-package-data.mk
+1
-1
rules/build-package-way.mk
rules/build-package-way.mk
+6
-2
utils/ghc-cabal/ghc-cabal.hs
utils/ghc-cabal/ghc-cabal.hs
+4
-1
No files found.
compiler/ghc.mk
View file @
9142c238
...
...
@@ -135,12 +135,6 @@ ifeq "$(RelocatableBuild)" "YES"
@
echo
'cRelocatableBuild = True'
>>
$@
else
@
echo
'cRelocatableBuild = False'
>>
$@
endif
@
echo
'cUseArchivesForGhci :: Bool'
>>
$@
ifeq
"$(UseArchivesForGhci)" "YES"
@
echo
'cUseArchivesForGhci = True'
>>
$@
else
@
echo
'cUseArchivesForGhci = False'
>>
$@
endif
@
echo
'cLibFFI :: Bool'
>>
$@
ifeq
"$(UseLibFFIForAdjustors)" "YES"
...
...
@@ -363,10 +357,9 @@ compiler_CONFIGURE_OPTS += --ghc-option=-DNO_REGS
endif
# If we're profiling GHC then we want lots of SCCs, so -auto-all
# We also don't want to waste time building the non-profiling library,
# either normally or for ghci. Unfortunately this means that we have to
# tell ghc-pkg --force as it gets upset when libHSghc-6.9.a doesn't
# exist.
# We also don't want to waste time building the non-profiling library.
# Unfortunately this means that we have to tell ghc-pkg --force as it
# gets upset when libHSghc-6.9.a doesn't exist.
ifeq
"$(GhcProfiled)" "YES"
compiler_stage2_CONFIGURE_OPTS
+=
--ghc-option
=
-auto-all
# We seem to still build the vanilla libraries even if we say
...
...
@@ -375,7 +368,6 @@ compiler_stage2_CONFIGURE_OPTS += --ghc-option=-auto-all
# their absence when we register the package. So for now, we just
# leave the vanilla libraries enabled.
# compiler_stage2_CONFIGURE_OPTS += --disable-library-vanilla
compiler_stage2_CONFIGURE_OPTS
+=
--disable-library-for-ghci
compiler_stage2_CONFIGURE_OPTS
+=
--ghc-pkg-option
=
--force
endif
...
...
@@ -472,6 +464,16 @@ $(eval $(call build-package,compiler,stage1,0))
$(eval
$(call
build-package,compiler,stage2,1))
$(eval
$(call
build-package,compiler,stage3,2))
# after build-package, because that adds --enable-library-for-ghci
# to compiler_stage*_CONFIGURE_OPTS:
# We don't build the GHCi library for the ghc package. We can load it
# the .a file instead, and as object splitting isn't on for the ghc
# package this isn't much slower.However, not building the package saves
# a significant chunk of disk space.
compiler_stage1_CONFIGURE_OPTS
+=
--disable-library-for-ghci
compiler_stage2_CONFIGURE_OPTS
+=
--disable-library-for-ghci
compiler_stage3_CONFIGURE_OPTS
+=
--disable-library-for-ghci
# after build-package, because that sets compiler_stage1_HC_OPTS:
compiler_stage1_HC_OPTS
+=
$(GhcStage1HcOpts)
compiler_stage2_HC_OPTS
+=
$(GhcStage2HcOpts)
...
...
compiler/ghci/Linker.lhs
View file @
9142c238
...
...
@@ -1107,40 +1107,27 @@ locateOneObj :: [FilePath] -> String -> IO LibrarySpec
locateOneObj dirs lib
| not isDynamicGhcLib
-- When the GHC package was not compiled as dynamic library
-- (=DYNAMIC not set), we search for .o libraries.
= do mb_libSpec <- if cUseArchivesForGhci
then do mb_arch_path <- findFile mk_arch_path dirs
case mb_arch_path of
Just arch_path ->
return (Just (Archive arch_path))
Nothing ->
return Nothing
else do mb_obj_path <- findFile mk_obj_path dirs
case mb_obj_path of
Just obj_path ->
return (Just (Object obj_path))
Nothing ->
return Nothing
case mb_libSpec of
Just ls -> return ls
Nothing -> return (DLL lib)
-- (=DYNAMIC not set), we search for .o libraries or, if they
-- don't exist, .a libraries.
= findObject `orElse` findArchive `orElse` assumeDll
| otherwise
-- When the GHC package was compiled as dynamic library (=DYNAMIC set),
-- we search for .so libraries first.
= do { mb_lib_path <- findFile mk_dyn_lib_path dirs
; case mb_lib_path of
Just _ -> return (DLL dyn_lib_name)
Nothing ->
do { mb_obj_path <- findFile mk_obj_path dirs
; case mb_obj_path of
Just obj_path -> return (Object obj_path)
Nothing -> return (DLL lib) }} -- We assume
= findDll `orElse` findObject `orElse` findArchive `orElse` assumeDll
where
mk_obj_path dir = dir </> (lib <.> "o")
mk_arch_path dir = dir </> ("lib" ++ lib <.> "a")
dyn_lib_name = lib ++ "-ghc" ++ cProjectVersion
mk_dyn_lib_path dir = dir </> mkSOName dyn_lib_name
findObject = liftM (fmap Object) $ findFile mk_obj_path dirs
findArchive = liftM (fmap Archive) $ findFile mk_arch_path dirs
findDll = liftM (fmap DLL) $ findFile mk_dyn_lib_path dirs
assumeDll = return (DLL lib)
infixr `orElse`
f `orElse` g = do m <- f
case m of
Just x -> return x
Nothing -> g
-- ----------------------------------------------------------------------------
-- Loading a dyanmic library (dlopen()-ish on Unix, LoadLibrary-ish on Win32)
...
...
compiler/main/DynFlags.hs
View file @
9142c238
...
...
@@ -2285,7 +2285,6 @@ compilerInfo = [("Project name", String cProjectName),
(
"Object splitting"
,
String
cSplitObjs
),
(
"Have native code generator"
,
String
cGhcWithNativeCodeGen
),
(
"Have llvm code generator"
,
String
cGhcWithLlvmCodeGen
),
(
"Use archives for ghci"
,
String
(
show
cUseArchivesForGhci
)),
(
"Support SMP"
,
String
cGhcWithSMP
),
(
"Unregisterised"
,
String
cGhcUnregisterised
),
(
"Tables next to code"
,
String
cGhcEnableTablesNextToCode
),
...
...
mk/config.mk.in
View file @
9142c238
...
...
@@ -190,12 +190,6 @@ else
UseLibFFIForAdjustors
=
YES
endif
ifeq
"$(findstring $(HostOS_CPP), darwin)" ""
UseArchivesForGhci
=
NO
else
UseArchivesForGhci
=
YES
endif
# On Windows we normally want to make a relocatable bindist, to we
# ignore flags like libdir
ifeq
"$(Windows)" "YES"
...
...
rts/Linker.c
View file @
9142c238
...
...
@@ -1670,7 +1670,6 @@ mkOc( char *path, char *image, int imageSize,
return
oc
;
}
#if defined(USE_ARCHIVES_FOR_GHCI)
HsInt
loadArchive
(
char
*
path
)
{
...
...
@@ -1765,11 +1764,16 @@ loadArchive( char *path )
/* We can't mmap from the archive directly, as object
files need to be 8-byte aligned but files in .ar
archives are 2-byte aligned, and if we malloc the
memory then we can be given memory above 2^32, so we
mmap some anonymous memory and use that. We could
do better here. */
archives are 2-byte aligned. When possible we use mmap
to get some anonymous memory, as on 64-bit platforms if
we use malloc then we can be given memory above 2^32.
In the mmap case we're probably wasting lots of space;
we could do better. */
#ifdef USE_MMAP
image
=
mmapForLinker
(
imageSize
,
MAP_ANONYMOUS
,
-
1
);
#else
image
=
stgMallocBytes
(
imageSize
,
"loadArchive(image)"
);
#endif
n
=
fread
(
image
,
1
,
imageSize
,
f
);
if
(
n
!=
imageSize
)
barf
(
"loadObj: error whilst reading `%s'"
,
path
);
...
...
@@ -1817,12 +1821,6 @@ loadArchive( char *path )
stgFree
(
file
);
return
1
;
}
#else
HsInt
GNU_ATTRIBUTE
(
__noreturn__
)
loadArchive
(
char
*
path
STG_UNUSED
)
{
barf
(
"loadArchive: not enabled"
);
}
#endif
/* -----------------------------------------------------------------------------
* Load an obj (populate the global symbol table, but don't resolve yet)
...
...
rts/ghc.mk
View file @
9142c238
...
...
@@ -246,10 +246,6 @@ ifeq "$(UseLibFFIForAdjustors)" "YES"
rts_CC_OPTS
+=
-DUSE_LIBFFI_FOR_ADJUSTORS
endif
ifeq
"$(UseArchivesForGhci)" "YES"
rts_CC_OPTS
+=
-DUSE_ARCHIVES_FOR_GHCI
endif
# Mac OS X: make sure we compile for the right OS version
rts_CC_OPTS
+=
$(MACOSX_DEPLOYMENT_CC_OPTS)
rts_HC_OPTS
+=
$(
addprefix
-optc
,
$(MACOSX_DEPLOYMENT_CC_OPTS)
)
...
...
rules/build-package-data.mk
View file @
9142c238
...
...
@@ -25,7 +25,7 @@ ifeq "$$(filter dyn,$$(GhcLibWays))" "dyn"
$1_$2_CONFIGURE_OPTS
+=
--enable-shared
endif
ifeq
"$$(GhcWithInterpreter)
$$(UseArchivesForGhci)
" "YES
NO
"
ifeq
"$$(GhcWithInterpreter)" "YES"
$1_$2_CONFIGURE_OPTS
+=
--enable-library-for-ghci
else
$1_$2_CONFIGURE_OPTS
+=
--disable-library-for-ghci
...
...
rules/build-package-way.mk
View file @
9142c238
...
...
@@ -102,19 +102,23 @@ endif
# Build the GHCi library
ifeq
"$3" "v"
$1_$2_GHCI_LIB
=
$1
/
$2
/build/HS
$$
(
$1_PACKAGE
)
-
$$
(
$1_$2_VERSION
)
.
$$
(
$3_osuf
)
ifeq
"$$($1_$2_BUILD_GHCI_LIB)" "YES"
# Don't put bootstrapping packages in the bindist
ifneq
"$4" "0"
ifeq
"$$(UseArchivesForGhci)" "NO"
BINDIST_LIBS
+=
$$
(
$1_$2_GHCI_LIB
)
endif
endif
$$($1_$2_GHCI_LIB)
:
$$($1_$2_$3_HS_OBJS) $$($1_$2_$3_CMM_OBJS) $$($1_$2_$3_C_OBJS) $$($1_$2_$3_S_OBJS) $$($1_$2_EXTRA_OBJS)
"
$
$(LD)
"
-r
-o
$$
@
$
$(EXTRA_LD_OPTS)
$$
(
$1_$2_$3_HS_OBJS
)
$$
(
$1_$2_$3_CMM_OBJS
)
$$
(
$1_$2_$3_C_OBJS
)
$$
(
$1_$2_$3_S_OBJS
)
`
$$
(
$1_$2_$3_MKSTUBOBJS
)
`
$$
(
$1_$2_EXTRA_OBJS
)
ifeq
"$$(UseArchivesForGhci)" "NO"
ifeq
"$$($1_$2_BUILD_GHCI_LIB)" "YES"
# Don't bother making ghci libs for bootstrapping packages
ifneq
"$4" "0"
# $$(info Here $1 $2 $$($1_$2_BUILD_GHCI_LIB) Q1)
$(call
all-target,$1_$2,$$($1_$2_GHCI_LIB))
endif
endif
endif
endef
utils/ghc-cabal/ghc-cabal.hs
View file @
9142c238
...
...
@@ -372,7 +372,8 @@ generate config_args distdir directory
variablePrefix
++
"_DEP_CC_OPTS = "
++
unwords
(
forDeps
Installed
.
ccOptions
),
variablePrefix
++
"_DEP_LIB_DIRS = "
++
unwords
(
wrap
$
forDeps
Installed
.
libraryDirs
),
variablePrefix
++
"_DEP_EXTRA_LIBS = "
++
unwords
(
forDeps
Installed
.
extraLibraries
),
variablePrefix
++
"_DEP_LD_OPTS = "
++
unwords
(
forDeps
Installed
.
ldOptions
)]
variablePrefix
++
"_DEP_LD_OPTS = "
++
unwords
(
forDeps
Installed
.
ldOptions
),
variablePrefix
++
"_BUILD_GHCI_LIB = "
++
boolToYesNo
(
withGHCiLib
lbi
)]
writeFile
(
distdir
++
"/package-data.mk"
)
$
unlines
xs
writeFile
(
distdir
++
"/haddock-prologue.txt"
)
$
if
null
(
description
pd
)
then
synopsis
pd
...
...
@@ -380,3 +381,5 @@ generate config_args distdir directory
where
escape
=
foldr
(
\
c
xs
->
if
c
==
'#'
then
'
\\
'
:
'#'
:
xs
else
c
:
xs
)
[]
wrap
=
map
(
\
s
->
"
\'
"
++
s
++
"
\'
"
)
boolToYesNo
True
=
"YES"
boolToYesNo
False
=
"NO"
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment