Closed Bug 222013 Opened 21 years ago Closed 21 years ago

Add support for cross-compiling to mingw (win32)

Categories

(SeaMonkey :: Build Config, enhancement)

x86
Linux
enhancement
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED
mozilla1.7final

People

(Reporter: cls, Assigned: cls)

Details

(Keywords: fixed1.7)

Attachments

(3 files, 8 obsolete files)

There are a number of places in the code where we make assumptions where OS_ARCH=WINNT. These assumptions are incorrect when cross-compiling for win32 (via mingw). These patches should fix those assumptions. They also make other subtle changes to the build: * nsinstall is only built for mozilla. nspr, ldap & coreconf should use mozilla's copy rather than constantly rebuilding it * Added HOST_BIN_SUFFIX for binaries that need to run on the build machine
Attached patch cross-mingw-nspr v1.0 (obsolete) — Splinter Review
Attached patch cross-mingw-moz v1.0 (obsolete) — Splinter Review
Forgot to mention that the changes needed to cross-compile NSS are in bug 104541.
Oh, these changes need to be tested against a MSVC build.
Severity: normal → enhancement
Attachment #133197 - Flags: review?(dmose)
Attachment #133198 - Flags: review?(wchang0222)
Attached patch cross-mingw-moz v1.1 (obsolete) — Splinter Review
The following mozconfig settings should be used when cross-compiling to mingw32: CROSS_COMPILE=1 HOST_LIBIDL_CONFIG=/usr/bin/libIDL-config GLIB_PREFIX=/usr/i386-mingw32/moztools LIBIDL_PREFIX=/usr/i386-mingw32/moztools CXXFLAGS="-fshort-wchar -DHAVE_CPP_2BYTE_WCHAR_T=1" ac_add_options --target=i386-mingw32 ac_add_options --enable-win32-target=WIN95 ac_add_options --disable-accessibility ac_add_options --disable-activex ac_add_options --disable-activex-scripting # /usr/i386-mingw32/moztools is a direct copy of the %MOZ_TOOLS% installation from a win32 box. # -fwchar-short is needed because the runtime test isn't performed when cross-compiling
Attachment #133199 - Attachment is obsolete: true
Attached patch cross-mingw-moz v1.2 (obsolete) — Splinter Review
Forgot the _AS_PERL change.
Attachment #140336 - Attachment is obsolete: true
Attachment #140337 - Attachment description: v1.2 → cross-mingw-moz v1.2
Attachment #140337 - Flags: review?(bryner)
> ------- Additional Comment #4 From cls 2003-10-13 09:00 PST [reply] ------- > >Oh, these changes need to be tested against a MSVC build. Has this been done yet?
I tested a native mingw win32 build but I don't have access to MSVC.
Well, the patch looks ok in theory, but I'd like to know that it won't break MSVC.
Isn't that what tinderboxes are for? ;) When the original patch was written, I didn't even have a win32 partition available. I had to get timeless to verify that a cross-compiled build even ran. The moz-1.1 patch fixed the native win32 build problems. There shouldn't be anything in the changes that should break because you're using MSVC but we can wait.
Attached patch cross-mingw-moz v1.3 (obsolete) — Splinter Review
Attachment #140337 - Attachment is obsolete: true
Attachment #140337 - Flags: review?(bryner)
Attachment #140909 - Attachment description: cross-mngw-moz v1.3 → cross-mingw-moz v1.3
All three patches build and run with VC7.1.
Attachment #140909 - Flags: review?(bryner)
Attachment #140909 - Flags: review?(bryner) → review+
make-jars.pl & add-chrome.pl grab the platform setting from perl which is wrong when cross-compiling. I added an '-o OS' option to both scripts which allows us to pass OS_ARCH to the script when cross-compiling.
Attachment #140909 - Attachment is obsolete: true
Attachment #141729 - Flags: review?(bryner)
Comment on attachment 141729 [details] [diff] [review] cross-mingw-moz v1.4 (checked in) Looks good. I'm assuming msvc's rc.exe is equally fine with foward slashes or blackslashes in .rc files.
Attachment #141729 - Flags: review?(bryner) → review+
Attachment #141729 - Attachment description: cross-mingw-moz v1.4 → cross-mingw-moz v1.4 (checked in)
Comment on attachment 133197 [details] [diff] [review] cross-mingw-ldap v1.0 (checked in) r=dmose
Attachment #133197 - Flags: review?(dmose) → review+
Attachment #133198 - Flags: review?(wchang0222)
Attached patch cross-mingw-nspr v1.1 (obsolete) — Splinter Review
Attachment #133198 - Attachment is obsolete: true
Attachment #142868 - Flags: review?(wchang0222)
Attachment #133197 - Flags: approval1.7b?
Attachment #133197 - Flags: approval1.7b? → approval1.7?
Summary: Add support for cross-compiling to mingw → Add support for cross-compiling to mingw (win32)
Comment on attachment 133197 [details] [diff] [review] cross-mingw-ldap v1.0 (checked in) a=asa (on behalf of drivers) for checkin to 1.7
Attachment #133197 - Flags: approval1.7? → approval1.7+
Attachment #133197 - Attachment description: cross-mingw-ldap v1.0 → cross-mingw-ldap v1.0 (checked in)
Comment on attachment 142868 [details] [diff] [review] cross-mingw-nspr v1.1 Hi cls, Some questions. 1. Can we omit the MOZILLA_CLIENT changes? NSPR does not install its own 'nsinstall' in objdir/dist/bin, so I think it's not necessary for NSPR to use Mozilla's nsinstall and not build its own when MOZILLA_CLIENT is defined. 2. You made several changes like this: >- if test -z "$CC"; then >- AC_CHECK_PROGS(CC, "${target_alias}-gcc" "${target}-gcc", echo) >- fi >+ AC_CHECK_PROGS(CC, $CC "${target_alias}-gcc" "${target}-gcc", echo) Are these merely a code cleanup or are they necessary for cross-compiling? 3. I don't understand why the following change is necessary. >@@ -677,6 +675,10 @@ > dnl ======================================================== > case "$host" in > *-mingw*|*-cygwin*|*-msvc*|*-mks*) >+ NSINSTALL='$(CYGWIN_WRAPPER) nsinstall' >+ if test `echo "${PATH}" | grep -c \;` = 0; then >+ CYGWIN_WRAPPER='sh $(topsrcdir)/build/cygwin-wrapper' >+ fi > ;; > *-beos*) > HOST_CFLAGS="$HOST_CFLAGS -DXP_BEOS -DBeOS -DBEOS -D_POSIX_SOURCE" >@@ -1234,11 +1236,6 @@ > AC_DEFINE(WIN32) > PR_MD_ARCH_DIR=windows > RESOLVE_LINK_SYMBOLS=1 >- NSINSTALL='$(CYGWIN_WRAPPER) nsinstall' >- if test `echo "${PATH}" | grep -c \;` = 0; then >- CYGWIN_WRAPPER='sh $(topsrcdir)/build/cygwin-wrapper' >- fi >- > if test -n "$GNU_CC"; then > CC="$CC -mno-cygwin" > CXX="$CXX -mno-cygwin" You are merely moving those four lines around. Also, the first case statement (around line 677/675) seems to be for overriding HOST_CFLAGS. The assignment of NSINSTALL and CYGWIN_WRAPPER look out of place there.
Comment on attachment 142868 [details] [diff] [review] cross-mingw-nspr v1.1 >+ solaris*) OS_ARCH=SunOS OS_RELEASE=5 ;; Do we need a semicolon between "OS_ARCH=SunOS" and "OS_RELEASE=5"?
> Some questions. > > 1. Can we omit the MOZILLA_CLIENT changes? > NSPR does not install its own 'nsinstall' in > objdir/dist/bin, so I think it's not necessary > for NSPR to use Mozilla's nsinstall and not > build its own when MOZILLA_CLIENT is defined. Not really. With the MOZILLA_CLIENT changes omitted, NSPR expects to use the version of NSINSTALL from the config directory and it doesn't exist because we don't build nsinstall when targetting win32. So we can either use the mozilla version or we have to build a native version when cross-compiling. > 2. You made several changes like this: > > >- if test -z "$CC"; then > >- AC_CHECK_PROGS(CC, "${target_alias}-gcc" "${target}-gcc", echo) > >- fi > >+ AC_CHECK_PROGS(CC, $CC "${target_alias}-gcc" "${target}-gcc", echo) > > Are these merely a code cleanup or are they > necessary for cross-compiling? Those are mainly cleanup. The macro will handle the test. > 3. I don't understand why the following change > is necessary. > > >@@ -677,6 +675,10 @@ > > dnl ======================================================== > > case "$host" in > > *-mingw*|*-cygwin*|*-msvc*|*-mks*) > >+ NSINSTALL='$(CYGWIN_WRAPPER) nsinstall' > >+ if test `echo "${PATH}" | grep -c \;` = 0; then > >+ CYGWIN_WRAPPER='sh $(topsrcdir)/build/cygwin-wrapper' > >+ fi > > ;; > > *-beos*) > > HOST_CFLAGS="$HOST_CFLAGS -DXP_BEOS -DBeOS -DBEOS -D_POSIX_SOURCE" > >@@ -1234,11 +1236,6 @@ > > AC_DEFINE(WIN32) > > PR_MD_ARCH_DIR=windows > > RESOLVE_LINK_SYMBOLS=1 > >- NSINSTALL='$(CYGWIN_WRAPPER) nsinstall' > >- if test `echo "${PATH}" | grep -c \;` = 0; then > >- CYGWIN_WRAPPER='sh $(topsrcdir)/build/cygwin-wrapper' > >- fi > >- > > if test -n "$GNU_CC"; then > > CC="$CC -mno-cygwin" > > CXX="$CXX -mno-cygwin" > > You are merely moving those four lines around. Yes, but you'll notice that I'm moving them from a *target* section to a *host* section. The CYGWIN_WRAPPER only needs to be used when you're building _on_ win32 but not when you're building _for_ win32. Same for NSINSTALL. > Also, the first case statement (around line 677/675) > seems to be for overriding HOST_CFLAGS. Actually, the HOST_CFLAGS assignment is for BeOS which isn't part of the patch. > >+ solaris*) OS_ARCH=SunOS OS_RELEASE=5 ;; > > Do we need a semicolon between "OS_ARCH=SunOS" and > "OS_RELEASE=5"? Nope. Variable assignment cannot contain whitespace unless it's escaped.
Attached patch wtc's patch for NSPR (obsolete) — Splinter Review
cls, could you see if this NSPR patch works? I removed the MOZILLA_CLIENT changes and the NSINSTALL/CYGWIN_WRAPPER change.
Comment on attachment 145788 [details] [diff] [review] wtc's patch for NSPR I'm marking this patch obsolete. I wasn't on the cc list and therefore didn't see cls's answers to my questions.
Attachment #145788 - Attachment is obsolete: true
Attached patch wtc's patch for NSPR (obsolete) — Splinter Review
cls, please test this patch. The only change between this patch and your NSPR patch is that I removed the MOZILLA_CLIENT changes. I believe that your other changes will cause us to build nsinstall for the host system correctly when we are cross-compiling for win32.
Comment on attachment 145789 [details] [diff] [review] wtc's patch for NSPR Nope. This patch will not work because the build expects to find nsinstall in nsprpub/config but we don't build nsinstall when OS_ARCH = WINNT. make[1]: Entering directory `/usr/cls/src/obj-x-mingw' /usr/bin/make -C nsprpub make[2]: Entering directory `/usr/cls/src/obj-x-mingw/nsprpub' cd config; /usr/bin/make -j1 export make[3]: Entering directory `/usr/cls/src/obj-x-mingw/nsprpub/config' gcc -o now.o -c -DXP_UNIX ../../../mozilla/nsprpub/config/now.c gcc now.o -o now rm -f /home/cls/src/obj-x-mingw/dist/bin/nspr-config make[3]: Leaving directory `/usr/cls/src/obj-x-mingw/nsprpub/config' ... ... make[5]: Entering directory `/usr/cls/src/obj-x-mingw/nsprpub/pr/include/md' ../../../config/./nsinstall -R -m 444 ../../../../../mozilla/nsprpub/pr/include/md/_aix32.cfg ........ make[5]: ../../../config/./nsinstall: Command not found make[5]: *** [export] Error 127 make[5]: Leaving directory `/usr/cls/src/obj-x-mingw/nsprpub/pr/include/md'
Attachment #145789 - Flags: review-
Wan-Teh, this patch does what you expected the previous one to do.
Attachment #142868 - Attachment is obsolete: true
Attachment #145789 - Attachment is obsolete: true
Attachment #142868 - Flags: review?(wchang0222)
Attachment #145799 - Flags: review?(wchang0222)
Comment on attachment 145799 [details] [diff] [review] cross-mingw-nspr-v1.2 r=wtc. Thank you, cls, for getting this to work the way I wanted.
Attachment #145799 - Flags: review?(wchang0222) → review+
The reason I wanted to avoid MOZILLA_CLIENT code in NSPR is to reduce the risk of inadvertently breaking Mozilla build when I change NSPR. I rarely build Mozilla and usually test my NSPR changes by building NSPR standalone and running NSPR's test suite. So the closer the NSPR standalone build is to the NSPR MOZILLA_CLIENT build, the better.
Attachment #145799 - Flags: approval1.7?
Comment on attachment 145799 [details] [diff] [review] cross-mingw-nspr-v1.2 How risky is this? We're planning to branch on Monday, so you're likely to have to fix any regressions on the 1.7 branch as well...
Minimal risk. I've had a variant of this patch in my tree since October and we made basically the same changes to ldap which got approved and checked in a couple of weeks ago.
Comment on attachment 145799 [details] [diff] [review] cross-mingw-nspr-v1.2 This patch has been checked in on the NSPR trunk and the NSPRPUB_PRE_4_2_CLIENT_BRANCH branch (seamonkey trunk).
Comment on attachment 145799 [details] [diff] [review] cross-mingw-nspr-v1.2 a=asa (on behalf of drivers) for checkin to 1.7
Attachment #145799 - Flags: approval1.7? → approval1.7+
Status: NEW → RESOLVED
Closed: 21 years ago
Keywords: fixed1.7
Resolution: --- → FIXED
Target Milestone: --- → mozilla1.7final
Comment on attachment 145799 [details] [diff] [review] cross-mingw-nspr-v1.2 This patch has been checked in on the NSPR_4_5_BRANCH (NSPR 4.5) and the MOZILLA_1_7_BRANCH (Mozilla 1.7 final).
Product: Browser → Seamonkey
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: