How to build Harbour 32 & 64 bits

User avatar
Antonio Linares
Site Admin
Posts: 42259
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: How to build Harbour 32 & 64 bits

Post by Antonio Linares »

To build Harbour using bcc64:

From c:\bcc7140\lib do this:
copy c0x64.o c0x64.obj
copy cw64mt.a cw64mt.lib
copy import64.a import.lib
go64.bat

Code: Select all | Expand

set bcc=bcc7164
set path=c:\%bcc%\bin
set HB_COMPILER=bcc64
set HB_BUILD_MODE=c
set HB_BUILD_OPTIM=no
set HB_USER_PRGFLAGS=-l-
set HB_USER_CFLAGS=-Ic:\%bcc%\INCLUDE\windows\crtl -Ic:\%bcc%\INCLUDE\windows\sdk -Lc:\%bcc%\LIB
set HB_BUILD_WARN=yes
set HB_USER_LDFLAGS=-Lc:\%bcc%\LIB;c:\%bcc%\LIB\psdk
set HB_USER_RESFLAGS=-Ic:\%bcc%\INCLUDE\windows\sdk
set HB_BUILD_CONTRIBS
set HB_HAS_PCRE=no

rem set HB_BUILD_DEBUG=yes
rem set HB_TR_LEVEL=debug
rem set HB_USER_CFLAGS=-DHB_TR_LEVEL_DEBUG

set HB_WITH_OPENSSL=c:\OpenSSL-Win64\include
set HB_WITH_CURL=c:\curl64\include
set HB_OPENSSL_STATIC=yes      
set HB_STATIC_OPENSSL=yes  
set HB_STATIC_CURL=yes
set HB_WITH_LIBHARU
set HB_BUILD_DYN=no
set HB_BUILD_CONTRIB_DYN=no
win-make.exe
You will get some unresolved externals. Add these functions at the bottom of c:\harbour\src\common\hbprintf.c

Code: Select all | Expand

//#if defined( __BORLANDC__ ) && defined( HB_OS_WIN_64 )
#if defined(__BORLANDC__) && defined(__clang__) && defined(_WIN64)
/* $NetBSD: isnanl.c,v 1.8 2011/06/05 14:43:13 christos Exp $   */

/*
 * Copyright (c) 1992, 1993
 *  The Regents of the University of California.  All rights reserved.
 *
 * This software was developed by the Computer Systems Engineering group
 * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
 * contributed to Berkeley.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * from: Header: isinf.c,v 1.1 91/07/08 19:03:34 torek Exp
 */

#include <math.h>

#define EXT_EXP_INFNAN  0x7fff
#define EXT_EXPBITS     15
#define EXT_FRACHBITS   16
#define SNG_EXP_INFNAN  255
#define DBL_EXP_INFNAN  2047

struct ieee_ext
{
   unsigned int      ext_sign:1;
   unsigned int      ext_exp:EXT_EXPBITS;
   unsigned int      ext_frach:EXT_FRACHBITS;
   unsigned int      ext_frachm;
   unsigned int      ext_fraclm;
   unsigned int      ext_fracl;
};

union ieee_ext_u
{
   long double       extu_ld;
   struct ieee_ext   extu_ext;
};

struct ieee_double
{
   unsigned int      dbl_sign:1;
   unsigned int      dbl_exp:11;
   unsigned int      dbl_frach:20;
   unsigned int      dbl_fracl;
};

HB_EXTERN_BEGIN
extern int _isnanl( long double x );
extern int _finitel( long double d );
extern int _finite( double d );
HB_EXTERN_END

/*
 * 7.12.3.4 isnan - test for a NaN
 *          IEEE 754 compatible 80-bit extended-precision Intel 386 version
 */

int _isnanl( long double x )
{
   union ieee_ext_u u;

   u.extu_ld = x;

   return u.extu_ext.ext_exp == EXT_EXP_INFNAN &&
          ( u.extu_ext.ext_frach & 0x80000000 ) != 0 &&
          ( u.extu_ext.ext_frach != 0x80000000 || u.extu_ext.ext_fracl != 0 );
}

int _finite( double d )
{
   struct ieee_double * p = ( struct ieee_double * ) &d;

   return p->dbl_exp != DBL_EXP_INFNAN;
}

int _finitel( long double d )
{
   struct ieee_double * p = ( struct ieee_double * ) &d;

   return p->dbl_exp != DBL_EXP_INFNAN;
}

#endif
To build the contribs, modify c:\harbour\contrib\hbpre.hbm this way:
# Copyright 2010 Viktor Szakats (vszakats.net/harbour)

# These may be overridden by local project options.

-q0
-optim-

{HB_BUILD_VERBOSE}-quiet-
{HB_BUILD_VERBOSE}-info
{HB_BUILD_VERBOSE}-trace
-exitstr

{!HB_BUILD_DEBUG}-l

{(HB_BUILD_MODE='cpp')|(!HB_BUILD_MODE&allmsvc)}-cpp=yes
{HB_BUILD_MODE='c'}-cpp=no

-warn=yes
Finlly, when trying to build hbrun.exe we get this error:
Fatal: Archive file 'C:\BCC7164\LIB\PSDK\UUID.A' lists no symbols in its dictionary
to solve it, go to c:\bcc7164\lib\psdk and do this:
copy UUID.a UUID_.a
copy USP10.a UUID.a
UUID.a seems corrupted and it is linked but not used. The above workaround solves it
regards, saludos

Antonio Linares
www.fivetechsoft.com
xmanuel
Posts: 763
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: How to build Harbour 32 & 64 bits

Post by xmanuel »

Que buena noticia...
Lo pruebo hoy!!!
:D :D :D
______________________________________________________________________________
Sevilla - Andalucía
diegoaudi
Posts: 1
Joined: Thu Jul 01, 2021 1:51 am

Re: How to build Harbour 32 & 64 bits

Post by diegoaudi »

Fantastic! thank you!
User avatar
Joaquim Ferrer
Posts: 105
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: How to build Harbour 32 & 64 bits

Post by Joaquim Ferrer »

A partir del ultimo commit de harbour
2023-11-22 09:06 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
He intentado construir harbour con BCC77 y da el siguiente error

Code: Select all | Expand

bcc32.exe   -I. -I../../../../../../include -q -tWM -CP437 -w-sig- -w-aus- -w-ccc- -w-csu- -w-par- -w-rch- -w-ucp- -w-use- -w-prc- -w-pia- -d -O2 -OS -Ov -Oc -Oi -6  -DUNICODE -DZIP_SUPPORT -Ic:/hbcore/src/3rd/zlib -I"c:\borland\bcc77\bin\..\Include" -I"c:\borland\bcc77\bin\..\Include\windows\crtl" -I"c:\borland\bcc77\bin\..\Include\windows\sdk"  -odirread.obj  -c ../../../dirread.c
../../../dirread.c:
Warning W8072 ../../../dirread.c 6072: Suspicious pointer arithmetic in function TIFFFetchNormalTag
Warning W8072 ../../../dirread.c 6608: Suspicious pointer arithmetic in function TIFFFetchNormalTag
Warning W8072 ../../../dirread.c 6615: Suspicious pointer arithmetic in function TIFFFetchNormalTag
Warning W8072 ../../../dirread.c 6890: Suspicious pointer arithmetic in function TIFFFetchNormalTag
Warning W8072 ../../../dirread.c 6896: Suspicious pointer arithmetic in function TIFFFetchNormalTag
Warning W8072 ../../../dirread.c 7620: Suspicious pointer arithmetic in function _TIFFPartialReadStripArray
Warning W8072 ../../../dirread.c 7630: Suspicious pointer arithmetic in function _TIFFPartialReadStripArray
Warning W8072 ../../../dirread.c 7640: Suspicious pointer arithmetic in function _TIFFPartialReadStripArray
Warning W8072 ../../../dirread.c 7651: Suspicious pointer arithmetic in function _TIFFPartialReadStripArray
*** 1 errors in Compile ***
../../../../../../config/rules.mk:88: recipe for target 'dirread.obj' failed
win-make[4]: *** [dirread.obj] Error 2
../../../config/lib.mk:68: recipe for target 'descend' failed
win-make[3]: *** [descend] Error 2
../../config/dir.mk:68: recipe for target 'tiff.inst' failed
win-make[2]: *** [tiff.inst] Error 2
../config/dir.mk:68: recipe for target '3rd.inst' failed
win-make[1]: *** [3rd.inst] Error 2
config/dir.mk:68: recipe for target 'src.inst' failed
win-make: *** [src.inst] Error 2
 
Parece ser que las mejoras introducidas en el commit de Phil Krylov el 2023-11-11 18:15:02
son los que rompen la compilación
Si regreso al commit anterior al 11-11-23, todo funciona ok

Mencionar que la compilación con mingw32 de la version actual de harbour, commit 22-11-23 funciona perfectamente

Alguien se ha encontrado con esto ?

Saludos
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
User avatar
Enrico Maria Giordano
Posts: 8728
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: How to build Harbour 32 & 64 bits

Post by Enrico Maria Giordano »

They are warnings, not errors. Can I see the batch you are using to build Harbour, so I can test it here?
User avatar
Joaquim Ferrer
Posts: 105
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: How to build Harbour 32 & 64 bits

Post by Joaquim Ferrer »

Here you are

Code: Select all | Expand

PATH=%PATH%;c:\borland\bcc77\bin;c:\borland\bcc77\include
set compiler=bcc
set HB_WITH_OPENSSL=C:\hbcore\addons\OpenSSL-Win32\include
set HB_WITH_CURL=C:\hbcore\addons\curl\include\
set HB_DIR_NSIS=%ProgramFiles(x86)%\NSIS\
set HB_BUILD_PKG=yes
win-make clean install
 
Regards
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
User avatar
Enrico Maria Giordano
Posts: 8728
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: How to build Harbour 32 & 64 bits

Post by Enrico Maria Giordano »

I confirm the warnings. I fix them in my local copy but now there are others in zutil.h. You can ignore them with

Code: Select all | Expand

win-make clean install HB_USER_CFLAGS="-w- -w!-"
Or wait for the Harbour developer to fix them. I already have a pull request pending but they seems not to be interested. :-(
User avatar
Enrico Maria Giordano
Posts: 8728
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: How to build Harbour 32 & 64 bits

Post by Enrico Maria Giordano »

Enrico Maria Giordano wrote:I confirm the warnings. I fix them in my local copy
If you want the fixed dirread.c just write me an email.
User avatar
Joaquim Ferrer
Posts: 105
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: How to build Harbour 32 & 64 bits

Post by Joaquim Ferrer »

Enrico Maria Giordano wrote:Or wait for the Harbour developer to fix them. I already have a pull request pending but they seems not to be interested. :-(
Are we running out of support for the Borland compiler?
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
User avatar
Enrico Maria Giordano
Posts: 8728
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: How to build Harbour 32 & 64 bits

Post by Enrico Maria Giordano »

Enrico Maria Giordano wrote:If you want the fixed dirread.c just write me an email.
Sent to your private email.
User avatar
Enrico Maria Giordano
Posts: 8728
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: How to build Harbour 32 & 64 bits

Post by Enrico Maria Giordano »

Joaquim Ferrer wrote:
Enrico Maria Giordano wrote:Or wait for the Harbour developer to fix them. I already have a pull request pending but they seems not to be interested. :-(
Are we running out of support for the Borland compiler?
For what I'm seeing it looks like we are running out of support for Harbour... :-(
Post Reply