[gs-devel] [PATCH]ghostscript crosscompiling: makefile fixes for
host tools
Ralph Giles
giles at ghostscript.com
Wed Jan 2 09:59:16 PST 2008
What do you think about this Ray? I still think it would be better to
duplicate the gp stuff in mkromfs so it can just be built with CCAUX.
That doesn't help with the zlib dependency though, unless we just
require linked an external version.
This is ugly, but we have to do something like this if we're going to
support cross-compilation reasonably. And I think we need to do that.
What does the gumstix build do?
-r
On Wed, Jan 02, 2008 at 12:46:46PM +0100, Luotao Fu wrote:
> ghostscript builds and calls mkromfs to generate init files. The mkromfs utility
> is linked together by objects, which are compiled with GLCC and probably used by
> other binaries. This means we will in fact try to link objects compiled with the
> crosscompiler with our hostcompiler. As a solution for this problem we add a
> bunch of extra objects, which are compiled from the same source with the host
> compiler and we adds a _host postfix to their names.
>
> The target mkromfs uses EXTRALIBS flag, which are indeed not needed and can
> causes errors if linkerflags, which are only used for target system cannot be
> found on host. Hence we removed it.
>
> Signed-off-by: Luotao Fu <l.fu at pengutronix.de>
> ---
> src/lib.mak | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> src/unix-aux.mak | 23 ++++++++++++++++++-----
> src/zlib.mak | 17 +++++++++++++++++
> 3 files changed, 90 insertions(+), 5 deletions(-)
>
> Index: src/lib.mak
> ===================================================================
> --- src/lib.mak.orig
> +++ src/lib.mak
> @@ -237,6 +237,13 @@ $(GLOBJ)gpmisc.$(OBJ) : $(GLSRC)gpmisc.c
> $(memory__h) $(string__h) $(gp_h) $(gpgetenv_h) $(gpmisc_h)
> $(GLCC) $(GLO_)gpmisc.$(OBJ) $(C_) $(GLSRC)gpmisc.c
>
> +$(GLOBJ)gpmisc_host.$(OBJ) : $(GLSRC)gpmisc.c\
> + $(unistd__h) $(fcntl__h) $(stat__h) $(stdio__h)\
> + $(memory__h) $(string__h) $(gp_h) $(gpgetenv_h) $(gpmisc_h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I) \
> + $(GLO_)gpmisc_host.$(OBJ) $(C_) $(GLSRC)gpmisc.c
> +
> +
> # Command line argument list management
> $(GLOBJ)gsargs.$(OBJ) : $(GLSRC)gsargs.c\
> $(ctype__h) $(stdio__h) $(string__h)\
> @@ -255,9 +262,22 @@ $(GLOBJ)gsmisc.$(OBJ) : $(GLSRC)gsmisc.c
> $(gpcheck_h) $(gserror_h) $(gxfarith_h) $(gxfixed_h) $(stdint__h)
> $(GLCC) $(GLO_)gsmisc.$(OBJ) $(C_) $(GLSRC)gsmisc.c
>
> +$(GLOBJ)gsmisc_host.$(OBJ) : $(GLSRC)gsmisc.c $(GXERR)\
> + $(gconfigv_h) $(std_h) $(vmsmath_h)\
> + $(ctype__h) $(malloc__h) $(math__h) $(memory__h) $(string__h)\
> + $(gpcheck_h) $(gserror_h) $(gxfarith_h) $(gxfixed_h) $(stdint__h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I) \
> + $(GLO_)gpmisc_host.$(OBJ) $(GLO_)gsmisc_host.$(OBJ) $(C_) $(GLSRC)gsmisc.c
> +
> +
> $(GLOBJ)gslibctx.$(OBJ) : $(GLSRC)gslibctx.c $(GXERR)\
> $(gslibctx_h) $(stdio__h)
> $(GLCC) $(GLO_)gslibctx.$(OBJ) $(C_) $(GLSRC)gslibctx.c
> +
> +$(GLOBJ)gslibctx_host.$(OBJ) : $(GLSRC)gslibctx.c $(GXERR)\
> + $(gslibctx_h) $(stdio__h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I)\
> + $(GLO_)gslibctx_host.$(OBJ) $(C_) $(GLSRC)gslibctx.c
>
> $(GLOBJ)gsnotify.$(OBJ) : $(GLSRC)gsnotify.c $(GXERR)\
> $(gsnotify_h) $(gsstruct_h)
> @@ -272,6 +292,12 @@ $(GLOBJ)gsutil.$(OBJ) : $(GLSRC)gsutil.c
> $(gsrect_h) $(gsuid_h) $(gsutil_h) $(gzstate_h) $(gxdcolor_h)
> $(GLCC) $(GLO_)gsutil.$(OBJ) $(C_) $(GLSRC)gsutil.c
>
> +$(GLOBJ)gsutil_host.$(OBJ) : $(GLSRC)gsutil.c $(AK) $(memory__h) $(string__h)\
> + $(gstypes_h) $(gconfigv_h) $(gserror_h) $(gserrors_h) $(gsmemory_h)\
> + $(gsrect_h) $(gsuid_h) $(gsutil_h) $(gzstate_h) $(gxdcolor_h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I)\
> + $(GLO_)gsutil_host.$(OBJ) $(C_) $(GLSRC)gsutil.c
> +
> # MD5 digest
> md5_h=$(GLSRC)md5.h
> # We have to use a slightly different compilation approach in order to
> @@ -535,6 +561,13 @@ $(GLOBJ)gscdefs.$(OBJ) : $(GLSRC)gscdef.
> $(CP_) $(GLSRC)gscdef.c $(GLGEN)gscdefs.c
> $(GLCC) $(GLO_)gscdefs.$(OBJ) $(C_) $(GLGEN)gscdefs.c
>
> +$(GLOBJ)gscdefs_host.$(OBJ) : $(GLSRC)gscdef.c\
> + $(std_h) $(gscdefs_h) $(gconfigd_h) $(TOP_MAKEFILES)
> + $(RM_) $(GLGEN)gscdefs.c
> + $(CP_) $(GLSRC)gscdef.c $(GLGEN)gscdefs.c
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I)\
> + $(GLO_)gscdefs_host.$(OBJ) $(C_) $(GLGEN)gscdefs.c
> +
> $(GLOBJ)gxacpath.$(OBJ) : $(GLSRC)gxacpath.c $(GXERR)\
> $(gsdcolor_h) $(gsrop_h) $(gsstruct_h) $(gsutil_h)\
> $(gxdevice_h) $(gxfixed_h) $(gxistate_h) $(gxpaint_h)\
> @@ -2698,6 +2731,10 @@ $(GLOBJ)gsromfs.$(OBJ) : $(GLOBJ)gsromfs
> MKROMFS_ZLIB_OBJS=$(GLOBJ)compress.$(OBJ) $(GLOBJ)deflate.$(OBJ) \
> $(GLOBJ)zutil.$(OBJ) $(GLOBJ)adler32.$(OBJ) $(GLOBJ)crc32.$(OBJ) \
> $(GLOBJ)trees.$(OBJ)
> +
> +MKROMFS_ZLIB_HOST_OBJS=$(GLOBJ)compress_host.$(OBJ) $(GLOBJ)deflate_host.$(OBJ) \
> + $(GLOBJ)zutil_host.$(OBJ) $(GLOBJ)adler32_host.$(OBJ) $(GLOBJ)crc32_host.$(OBJ) \
> + $(GLOBJ)trees_host.$(OBJ)
> MKROMFS_COMMON_DEPS=$(stdpre_h) $(stdint__h) $(gsiorom_h) \
> $(gsmemret_h) $(gsmalloc_h) $(gsstype_h) $(gp_h) $(time__h)
>
> @@ -2763,6 +2800,12 @@ $(GLOBJ)gp_getnv.$(OBJ) : $(GLSRC)gp_get
> $(gp_h) $(gsmemory_h) $(gstypes_h)
> $(GLCC) $(GLO_)gp_getnv.$(OBJ) $(C_) $(GLSRC)gp_getnv.c
>
> +$(GLOBJ)gp_getnv_host.$(OBJ) : $(GLSRC)gp_getnv.c $(AK) $(stdio__h) $(string__h)\
> + $(gp_h) $(gsmemory_h) $(gstypes_h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I)\
> + $(GLO_)gp_getnv_host.$(OBJ) $(C_) $(GLSRC)gp_getnv.c
> +
> +
> # File system implementation.
>
> # MS-DOS file system, also used by Desqview/X.
> @@ -2782,10 +2825,22 @@ $(GLOBJ)gp_unifs.$(OBJ) : $(GLSRC)gp_uni
> $(stat__h) $(dirent__h)
> $(GLCC) $(GLO_)gp_unifs.$(OBJ) $(C_) $(GLSRC)gp_unifs.c
>
> +$(GLOBJ)gp_unifs_host.$(OBJ) : $(GLSRC)gp_unifs.c $(AK)\
> + $(memory__h) $(string__h) $(stdio__h) $(unistd__h) \
> + $(gx_h) $(gp_h) $(gpmisc_h) $(gsstruct_h) $(gsutil_h) \
> + $(stat__h) $(dirent__h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I)\
> + $(GLO_)gp_unifs_host.$(OBJ) $(C_) $(GLSRC)gp_unifs.c
> +
> +
> # Unix(-like) file name syntax, *not* used by Desqview/X.
> $(GLOBJ)gp_unifn.$(OBJ) : $(GLSRC)gp_unifn.c $(AK) $(gx_h) $(gp_h) $(gpmisc_h)
> $(GLCC) $(GLO_)gp_unifn.$(OBJ) $(C_) $(GLSRC)gp_unifn.c
>
> +$(GLOBJ)gp_unifn_host.$(OBJ) : $(GLSRC)gp_unifn.c $(AK) $(gx_h) $(gp_h) $(gpmisc_h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I)\
> + $(GLO_)gp_unifn_host.$(OBJ) $(C_) $(GLSRC)gp_unifn.c
> +
> # Pipes. These are actually the same on all platforms that have them.
>
> pipe_=$(GLOBJ)gdevpipe.$(OBJ)
> Index: src/unix-aux.mak
> ===================================================================
> --- src/unix-aux.mak.orig
> +++ src/unix-aux.mak
> @@ -37,6 +37,13 @@ $(GLOBJ)gp_unix.$(OBJ): $(GLSRC)gp_unix.
> $(gx_h) $(gsexit_h) $(gp_h)
> $(GLCC) $(GLO_)gp_unix.$(OBJ) $(C_) $(GLSRC)gp_unix.c
>
> +$(GLOBJ)gp_unix_host.$(OBJ): $(GLSRC)gp_unix.c $(AK)\
> + $(pipe__h) $(string__h) $(time__h)\
> + $(gx_h) $(gsexit_h) $(gp_h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I)\
> + $(GLO_)gp_unix_host.$(OBJ) $(C_) $(GLSRC)gp_unix.c
> +
> +
> $(GLOBJ)gp_unix_cache.$(OBJ): $(GLSRC)gp_unix_cache.c $(AK)\
> $(stdio__h) $(string__h) $(time__h) $(gconfigd_h) $(gp_h) $(md5_h)
> $(GLCC) $(GLO_)gp_unix_cache.$(OBJ) $(C_) $(GLSRC)gp_unix_cache.c
> @@ -46,6 +53,12 @@ $(GLOBJ)gp_stdia.$(OBJ): $(GLSRC)gp_stdi
> $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h)
> $(GLCC) $(GLO_)gp_stdia.$(OBJ) $(C_) $(GLSRC)gp_stdia.c
>
> +$(GLOBJ)gp_stdia_host.$(OBJ): $(GLSRC)gp_stdia.c $(AK)\
> + $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h)
> + $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJDIR)$(_I)\
> + $(GLO_)gp_stdia_host.$(OBJ) $(C_) $(GLSRC)gp_stdia.c
> +
> +
> # System V platforms other than SVR4, which lack some system calls,
> # but have pipes.
> sysv__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_unix.$(OBJ) $(GLOBJ)gp_unifs.$(OBJ) $(GLOBJ)gp_unifn.$(OBJ) $(GLOBJ)gp_sysv.$(OBJ)
> @@ -77,13 +90,13 @@ $(GENHT_XE): $(GLSRC)genht.c $(AK) $(GEN
> $(GENINIT_XE): $(GLSRC)geninit.c $(AK) $(GENINIT_DEPS)
> $(CCAUX) $(I_)$(GLSRCDIR)$(_I) $(O_)$(GENINIT_XE) $(GLSRC)geninit.c
>
> -MKROMFS_OBJS=$(MKROMFS_ZLIB_OBJS) $(GLOBJ)gscdefs.$(OBJ) $(GLOBJ)gsmisc.$(OBJ) \
> - $(GLOBJ)gpmisc.$(OBJ) $(GLOBJ)gslibctx.$(OBJ) $(GLOBJ)gp_getnv.$(OBJ) \
> - $(GLOBJ)gp_unix.$(OBJ) $(GLOBJ)gp_unifs.$(OBJ) $(GLOBJ)gp_unifn.$(OBJ) \
> - $(GLOBJ)gp_stdia.$(OBJ) $(GLOBJ)gsutil.$(OBJ)
> +MKROMFS_OBJS=$(MKROMFS_ZLIB_HOST_OBJS) $(GLOBJ)gscdefs_host.$(OBJ) $(GLOBJ)gsmisc_host.$(OBJ) \
> + $(GLOBJ)gpmisc_host.$(OBJ) $(GLOBJ)gslibctx_host.$(OBJ) $(GLOBJ)gp_getnv_host.$(OBJ) \
> + $(GLOBJ)gp_unix_host.$(OBJ) $(GLOBJ)gp_unifs_host.$(OBJ) $(GLOBJ)gp_unifn_host.$(OBJ) \
> + $(GLOBJ)gp_stdia_host.$(OBJ) $(GLOBJ)gsutil_host.$(OBJ)
>
> $(MKROMFS_XE): $(GLSRC)mkromfs.c $(MKROMFS_COMMON_DEPS) $(MKROMFS_OBJS)
> - $(CCAUX) $(GENOPT) $(CFLAGS_DEBUG) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE) $(MKROMFS_OBJS) -lm $(EXTRALIBS)
> + $(CCAUX) $(GENOPT) $(CFLAGS_DEBUG) $(I_)$(GLSRCDIR)$(_I) $(I_)$(GLOBJ)$(_I) $(I_)$(ZSRCDIR)$(_I) $(GLSRC)mkromfs.c $(O_)$(MKROMFS_XE) $(MKROMFS_OBJS) -lm
>
> # Query the environment to construct gconfig_.h.
> # The "else true;" is required because Ultrix's implementation of sh -e
> Index: src/zlib.mak
> ===================================================================
> --- src/zlib.mak.orig
> +++ src/zlib.mak
> @@ -74,6 +74,9 @@ $(ZGEN)zlibc.dev : $(ZLIB_MAK) $(ECHOGS_
> $(ZOBJ)zutil.$(OBJ) : $(ZSRC)zutil.c $(ZDEP)
> $(ZCC) $(ZO_)zutil.$(OBJ) $(C_) $(ZSRC)zutil.c
>
> +$(ZOBJ)zutil_host.$(OBJ) : $(ZSRC)zutil.c $(ZDEP)
> + $(CCAUX) $(ZO_)zutil_host.$(OBJ) $(C_) $(ZSRC)zutil.c
> +
> # Encoding (compression) code.
>
> $(ZGEN)zlibe.dev : $(TOP_MAKEFILES) $(ZGEN)zlibe_$(SHARE_ZLIB).dev
> @@ -91,16 +94,28 @@ $(ZGEN)zlibe_0.dev : $(ZLIB_MAK) $(ECHOG
> $(ZOBJ)adler32.$(OBJ) : $(ZSRC)adler32.c $(ZDEP)
> $(ZCC) $(ZO_)adler32.$(OBJ) $(C_) $(ZSRC)adler32.c
>
> +$(ZOBJ)adler32_host.$(OBJ) : $(ZSRC)adler32.c $(ZDEP)
> + $(CCAUX) $(ZO_)adler32_host.$(OBJ) $(C_) $(ZSRC)adler32.c
> +
> $(ZOBJ)deflate.$(OBJ) : $(ZSRC)deflate.c $(ZDEP)
> $(ZCC) $(ZO_)deflate.$(OBJ) $(C_) $(ZSRC)deflate.c
>
> +$(ZOBJ)deflate_host.$(OBJ) : $(ZSRC)deflate.c $(ZDEP)
> + $(CCAUX) $(ZO_)deflate_host.$(OBJ) $(C_) $(ZSRC)deflate.c
> +
> # new file in zlib 1.2.x
> $(ZOBJ)compress.$(OBJ) : $(ZSRC)compress.c $(ZDEP)
> $(ZCC) $(ZO_)compress.$(OBJ) $(C_) $(ZSRC)compress.c
>
> +$(ZOBJ)compress_host.$(OBJ) : $(ZSRC)compress.c $(ZDEP)
> + $(CCAUX) $(ZO_)compress_host.$(OBJ) $(C_) $(ZSRC)compress.c
> +
> $(ZOBJ)trees.$(OBJ) : $(ZSRC)trees.c $(ZDEP)
> $(ZCC) $(ZO_)trees.$(OBJ) $(C_) $(ZSRC)trees.c
>
> +$(ZOBJ)trees_host.$(OBJ) : $(ZSRC)trees.c $(ZDEP)
> + $(CCAUX) $(ZO_)trees_host.$(OBJ) $(C_) $(ZSRC)trees.c
> +
> # The zlib filters per se don't need crc32, but libpng versions starting
> # with 0.90 do.
>
> @@ -117,6 +132,8 @@ $(ZGEN)crc32_0.dev : $(ZLIB_MAK) $(ECHOG
> # constants that produces gcc warnings with -Wtraditional.
> $(ZOBJ)crc32.$(OBJ) : $(ZSRC)crc32.c $(ZDEP)
> $(CC_NO_WARN) $(ZCCFLAGS) $(ZO_)crc32.$(OBJ) $(C_) $(ZSRC)crc32.c
> +$(ZOBJ)crc32_host.$(OBJ) : $(ZSRC)crc32.c $(ZDEP)
> + $(CCAUX) $(ZCCFLAGS) $(ZO_)crc32_host.$(OBJ) $(C_) $(ZSRC)crc32.c
>
> # Decoding (decompression) code.
>
> _______________________________________________
> gs-devel mailing list
> gs-devel at ghostscript.com
> http://www.ghostscript.com/mailman/listinfo/gs-devel
More information about the gs-devel
mailing list