From 02b1a335b06b84fecae6c3e8d981c71f821cc8b4 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Thu, 20 Aug 2009 07:56:27 +0000 Subject: [PATCH] 2009-08-20 09:55 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg * config/global.mk + Added autodetection for old MSVC for WinCE versions (clarm.exe based ones). + Added autodetection for HB_VISUALC_VER_PRE80 value for msvcarm targets. * INSTALL + Added cross-build matrix. Tweaked cross-build information. + Added MSVC 2005 for WinCE/ARM example. ; TODO: Create separate example section for native and cross-builds. --- harbour/ChangeLog | 11 +++++++ harbour/INSTALL | 61 +++++++++++++++++++++++++++++------ harbour/config/global.mk | 38 +++++++++++++--------- harbour/utils/hbmk2/hbmk2.prg | 6 ++-- 4 files changed, 89 insertions(+), 27 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 5f36a978e2..c4b63bcdb3 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,17 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-08-20 09:55 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) + * utils/hbmk2/hbmk2.prg + * config/global.mk + + Added autodetection for old MSVC for WinCE versions (clarm.exe based ones). + + Added autodetection for HB_VISUALC_VER_PRE80 value for msvcarm targets. + + * INSTALL + + Added cross-build matrix. Tweaked cross-build information. + + Added MSVC 2005 for WinCE/ARM example. + ; TODO: Create separate example section for native and cross-builds. + 2009-08-20 08:27 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * contrib/hbwin/legacy.prg * contrib/hbwin/legacyco.c diff --git a/harbour/INSTALL b/harbour/INSTALL index f0a321ddfe..81eb1f0044 100644 --- a/harbour/INSTALL +++ b/harbour/INSTALL @@ -342,17 +342,52 @@ OPTIONS AVAILABLE WHEN BUILDING HARBOUR Cross building -------------- - Point this envvar to the directory where native Harbour executables for - your host platform can be found: + You can build Harbour for target platforms different than host + platform. F.e. you can create Windows build on *nix systems, Linux + builds on Windows systems, etc. It's also possible to build targets + for different than host CPU architectures. F.e. you can create + Windows 64-bit build on 32-bit Windows platform, or Linux x86_64 + build on x86 hosts, or Linux MIPS build on x86 host. + + Currently possible cross-platform scenarios, sorted by host platform: + + on Windows hosts: + -> wce/mingwarm + -> wce/poccarm + -> wce/msvcarm + -> dos/djgpp (using DOS GNU make) + -> dos/watcom + -> os2/watcom + -> linux/watcom + on MS-DOS hosts: + -> win/watcom (*) + -> os2/watcom (*) + -> linux/watcom (*) + on OS/2 hosts: + -> win/watcom + -> dos/watcom (*) + -> linux/watcom (*) + on Linux hosts: + -> wce/mingwarm + -> win/mingw + -> win/watcom + -> dos/watcom + -> os2/watcom + On other *nix hosts: + -> wce/mingwarm + -> win/mingw + + (*): Theoretically possible, but not heard of such build yet. + + Point this envvar to the directory where native Harbour executables + for your host platform can be found: HB_BIN_COMPILE=\bin - You need these when building for a platform different than host - (f.e. to create Windows builds on Linux, to create a Windows x64 - build on 32-bit Windows or to create Windows CE/ARM build on any - operating systems). For this to work, you will need to point - above environment variables to a native Harbour build available on - your system. You don't need a full native build, harbour, hbpp and - hbmk2 executables are enough for the process to succeed. + If you leave this value empty, the make system will try to autodetect it, + so in practice all you have to do is to create native build first, then + create the cross-build. If you set this value manually, it may be useful + to know that only harbour, hbpp and hbmk2 executables are required for + a cross-build process to succeed. EXAMPLES @@ -401,6 +436,14 @@ EXAMPLES mingw32-make %1 %2 > log.txt 2>&1 --- + --- MSVC 2005 WinCE/ARM (requires preceding build for native target) + set INCLUDE=%ProgramFiles%\Microsoft Visual Studio 8\VC\ce\include;%ProgramFiles%\Windows Mobile 5.0 SDK R2\PocketPC\Include\Armv4i + set LIB=%ProgramFiles%\Microsoft Visual Studio 8\VC\ce\lib\armv4i;%ProgramFiles%\Windows Mobile 5.0 SDK R2\PocketPC\Lib\ARMV4I + set PATH=%ProgramFiles%\Microsoft Visual Studio 8\VC\ce\bin\x86_arm;%ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE;%PATH% + rem + mingw32-make %1 %2 > log.txt 2>&1 + --- + --- MSVC .NET 2003 (untested) call "%ProgramFiles%\Microsoft Visual Studio .NET 2003\VC7\vcvarsall.bat" rem diff --git a/harbour/config/global.mk b/harbour/config/global.mk index 273e5ea91e..0229a9a4ba 100644 --- a/harbour/config/global.mk +++ b/harbour/config/global.mk @@ -596,31 +596,37 @@ ifeq ($(HB_COMPILER),) ifneq ($(call find_in_path,wpp386),) HB_COMPILER := watcom else - ifneq ($(call find_in_path,armasm),) + ifneq ($(call find_in_path,clarm),) HB_COMPILER := msvcarm HB_ARCHITECTURE := wce + export HB_VISUALC_VER_PRE80 := yes else - ifneq ($(call find_in_path,ml64),) - HB_COMPILER := msvc64 + ifneq ($(call find_in_path,armasm),) + HB_COMPILER := msvcarm + HB_ARCHITECTURE := wce else - ifneq ($(call find_in_path,icl),) - HB_COMPILER := icc + ifneq ($(call find_in_path,ml64),) + HB_COMPILER := msvc64 else - ifneq ($(call find_in_path,cl),) - HB_COMPILER := msvc + ifneq ($(call find_in_path,icl),) + HB_COMPILER := icc else - ifneq ($(call find_in_path,bcc32),) - HB_COMPILER := bcc + ifneq ($(call find_in_path,cl),) + HB_COMPILER := msvc else - ifneq ($(call find_in_path,pocc),) - HB_COMPILER := pocc + ifneq ($(call find_in_path,bcc32),) + HB_COMPILER := bcc else - ifneq ($(call find_in_path,xcc),) - HB_COMPILER := xcc + ifneq ($(call find_in_path,pocc),) + HB_COMPILER := pocc else - ifneq ($(call find_in_path,x86_64-w64-mingw32-gcc),) - HB_COMPILER := mingw64 - HB_CCPREFIX := x86_64-w64-mingw32- + ifneq ($(call find_in_path,xcc),) + HB_COMPILER := xcc + else + ifneq ($(call find_in_path,x86_64-w64-mingw32-gcc),) + HB_COMPILER := mingw64 + HB_CCPREFIX := x86_64-w64-mingw32- + endif endif endif endif diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index 3c2f199b13..1d1f1063dc 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -899,6 +899,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) { {|| iif( ! Empty( GetEnv( "WATCOM" ) ),; FindInPath( "wpp386" ),; NIL ) }, "watcom" },; + { {|| FindInPath( "clarm" ) }, "msvcarm" },; { {|| FindInPath( "armasm" ) }, "msvcarm" },; { {|| FindInPath( "ml64" ) }, "msvc64" },; { {|| iif( FindInPath( "wpp386" ) == NIL,; @@ -924,7 +925,8 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) l_aLIBSYSMISC := { "winspool", "comctl32", "comdlg32", "shell32", "uuid", "ole32", "oleaut32", "mpr", "winmm", "mapi32", "imm32", "msimg32", "wininet" } CASE hbmk[ _HBMK_cARCH ] == "wce" aCOMPDET := { { {|| FindInPath( hbmk[ _HBMK_cCCPREFIX ] + "gcc" ) }, "mingwarm" },; - { {|| FindInPath( "cl" ) }, "msvcarm" },; + { {|| FindInPath( "clarm" ) }, "msvcarm" },; + { {|| FindInPath( "armasm" ) }, "msvcarm" },; { {|| FindInPath( "pocc" ) }, "poccarm" },; { {|| FindInPath( "arm-mingw32ce-gcc" ) }, "mingwarm", "arm-mingw32ce-" } ,; { {|| FindInPath( "arm-wince-mingw32ce-gcc" ) }, "mingwarm", "arm-wince-mingw32ce-" } } @@ -2558,7 +2560,7 @@ FUNCTION hbmk( aArgs, /* @ */ lPause, /* @ */ lUTF8 ) IF Empty( nCCompVer ) /* Compatibility with Harbour GNU Make system */ - IF Empty( GetEnv( "HB_VISUALC_VER_PRE80" ) ) + IF Empty( GetEnv( "HB_VISUALC_VER_PRE80" ) ) .AND. !( hbmk[ _HBMK_cCOMP ] == "msvcarm" .AND. FindInPath( "clarm" ) ) nCCompVer := 800 /* Visual Studio 2005 */ ELSE nCCompVer := 710 /* Visual Studio .NET 2003 */