Thread: BUG #1311: Can't crosscompile

BUG #1311: Can't crosscompile

From
"PostgreSQL Bugs List"
Date:
The following bug has been logged online:

Bug reference:      1311
Logged by:          Bernhard Rosenkraenzer

Email address:      bero@arklinux.org

PostgreSQL version: 8.0 Beta

Operating system:   Ark Linux

Description:        Can't crosscompile

Details:

Hi,
8.0.0beta4 can't be crosscompiled (I know that's hardly mainstream usage --
but I need the client libs on a PDA) because it tries to run the zic binary
it generated for the target platform rather than the build platform.

Quick and dirty [and not really portable] patch:

--- postgresql-8.0.0beta4/src/timezone/Makefile.ark     2004-11-10
06:59:27.000000000 +0100
+++ postgresql-8.0.0beta4/src/timezone/Makefile 2004-11-10
07:01:21.000000000 +0100
@@ -13,12 +13,14 @@
 include $(top_builddir)/src/Makefile.global

 override CPPFLAGS := $(CPPFLAGS)
+HOST_CC := gcc
+HOST_CFLAGS := $(CFLAGS)

 # files to build into backend
 OBJS= localtime.o strftime.o pgtz.o

 # files needed to build zic utility program
-ZICOBJS= zic.o ialloc.o scheck.o localtime.o
+ZICSOURCES= zic.c ialloc.c scheck.c localtime.c

 # timezone data files
 TZDATA := africa antarctica asia australasia europe northamerica
southamerica \
@@ -30,8 +32,8 @@
 SUBSYS.o: $(OBJS)
        $(LD) $(LDREL) $(LDOUT) SUBSYS.o $(OBJS)

-zic: $(ZICOBJS)
-       $(CC) $(CFLAGS) $(ZICOBJS) $(LDFLAGS) $(LIBS) -o $@$(X)
+zic: $(ZICSOURCES)
+       $(HOST_CC) $(HOST_CFLAGS) $(CPPFLAGS) $(ZICSOURCES) $(LDFLAGS)
$(LIBS) -o $@$(X)

 install: all installdirs
        ./zic -d $(DESTDIR)$(datadir)/timezone $(TZDATAFILES)

Re: BUG #1311: Can't crosscompile

From
Tom Lane
Date:
"PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> Quick and dirty [and not really portable] patch:

s/not really/not at all/

AFAICS this would take some fairly significant surgery in configure to
even have a prayer of working --- there's no reason to assume that the
host compiler has the same flags as the cross-compiler, for example.

An even bigger issue is that the files generated by zic might not be
machine-independent --- I haven't looked closely but they certainly
are binary data.  If they are dependent on endianness or sizeof(int)
or whatever then this approach won't work at all.

In a cross-compile situation it'd probably be better to install the zic
executable and then run it later on the target system to generate the
timezone data files.  Not sure what sort of makefile hacking might be
needed to bring this into the realm of possibility.

            regards, tom lane

Re: BUG #1311: Can't crosscompile

From
Bruce Momjian
Date:
Added to TODO list:

    * Allow cross-compiling by generating the zic database on the
      target system


---------------------------------------------------------------------------

Tom Lane wrote:
> "PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> > Quick and dirty [and not really portable] patch:
>
> s/not really/not at all/
>
> AFAICS this would take some fairly significant surgery in configure to
> even have a prayer of working --- there's no reason to assume that the
> host compiler has the same flags as the cross-compiler, for example.
>
> An even bigger issue is that the files generated by zic might not be
> machine-independent --- I haven't looked closely but they certainly
> are binary data.  If they are dependent on endianness or sizeof(int)
> or whatever then this approach won't work at all.
>
> In a cross-compile situation it'd probably be better to install the zic
> executable and then run it later on the target system to generate the
> timezone data files.  Not sure what sort of makefile hacking might be
> needed to bring this into the realm of possibility.
>
>             regards, tom lane
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
>                http://www.postgresql.org/docs/faqs/FAQ.html
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Re: BUG #1311: Can't crosscompile

From
Richard Evans
Date:
The man page for tzfile(5) makes it clear that timezone files are
written in a portable format (big-endian always).  So it is feasible to
run zic on the build system in a cross-compile.

Surely the simplest fix is to provide a configure option allows the use
of the host systems own /zic /command?  Something like --with-system-zic.

Then cross compiles from any Unix-like system with a suitable zic will
work fine.

Richard