Página 1 de 1

Como gerar o harbour 3.2?

Enviado: 18 Jul 2022 11:54
por JoséQuintas
! 'hbdossrl' library skipped (platform or compiler not supported)
gcc -I. -I../../../../../../include -Wmissing-braces -Wreturn-type -Wformat -Wimplicit-int -Wimplicit-function-declaration -O3 -fomit-frame-pointer -march=i586 -mtune=pentiumpro -DUNICODE -Id:/github/harbour32/src/3rd/zlib -DPNG_NO_STDIO -DPNG_ARM_NEON_OPT=0 -opng.o -c ../../../png.c
cc1.exe: error: CPU you selected does not support x86-64 instruction set
mingw32-make[4]: *** [../../../../../../config/rules.mk:88: png.o] Error 1
mingw32-make[3]: *** [../../../config/lib.mk:68: descend] Error 2
mingw32-make[2]: *** [../../config/dir.mk:68: png.inst] Error 2
mingw32-make[1]: *** [../config/dir.mk:68: 3rd.inst] Error 2
mingw32-make: *** [config/dir.mk:68: src.inst] Error 2
Normalmente no 3.4 eu apenas compilo, sem problemas.
Como corrigir isso no 3.2 ?

Como gerar o harbour 3.2?

Enviado: 18 Jul 2022 16:55
por marcosgambeta
Fiz um teste usando o MINGW 7.3 da minha instalação do Qt Framework. Compilei apenas o 'core' (sem 'contrib').

Compilação 32-bit sem problemas:

Código: Selecionar todos

set PATH=%WINDIR%\system32;%WINDIR%
set PATH=C:\Qt\Tools\mingw730_32\bin;%PATH%
set HB_INSTALL_PREFIX=%CD%\hb32mingw32
set HB_BUILD_CONTRIB_DYN=no
set HB_BUILD_CONTRIBS=no

Código: Selecionar todos

D:\HARBOUR32>harbour -build
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/

Harbour Build Info
---------------------------
Version: Harbour 3.2.0dev (r2104281802)
Compiler: MinGW GNU C 7.3 (32-bit)
Platform: Windows 10 10.0
PCode version: 0.3
ChangeLog last entry: 2021-04-28 20:02 UTC+0200 Aleksander Czajczynski (hb fki.pl)
ChangeLog ID: 4643587824552fd877e7f02ad11596e0b30c465d
Built on: Jul 18 2022 15:10:14
Build options: (Clipper 5.3b) (Clipper 5.x undoc)
---------------------------
Compilação 64-bit sem problemas:

Código: Selecionar todos

set PATH=%WINDIR%\system32;%WINDIR%
set PATH=C:\Qt\Tools\mingw730_64\bin;%PATH%
set HB_INSTALL_PREFIX=%CD%\hb32mingw64
set HB_BUILD_CONTRIB_DYN=no
set HB_BUILD_CONTRIBS=no

Código: Selecionar todos

D:\HARBOUR32>harbour -build
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/

Harbour Build Info
---------------------------
Version: Harbour 3.2.0dev (r2104281802)
Compiler: MinGW GNU C 7.3 (64-bit)
Platform: Windows 10 10.0
PCode version: 0.3
ChangeLog last entry: 2021-04-28 20:02 UTC+0200 Aleksander Czajczynski (hb fki.pl)
ChangeLog ID: 4643587824552fd877e7f02ad11596e0b30c465d
Built on: Jul 18 2022 15:50:53
Build options: (Clipper 5.3b) (Clipper 5.x undoc)
---------------------------
Eu costumo usar a linha abaixo apenas para evitar que outros compiladores interfiram no processo. Não é um requisito, mas sim opcional.

Código: Selecionar todos

set PATH=%WINDIR%\system32;%WINDIR%
Seu problema parece ser local ou talvez com o MinGW. De onde baixou ? Posso fazer um teste com ele.

Como gerar o harbour 3.2?

Enviado: 18 Jul 2022 17:28
por JoséQuintas
marcosgambeta escreveu:Seu problema parece ser local ou talvez com o MinGW. De onde baixou ? Posso fazer um teste com ele.
O que sempre usei foi o do source-forge 32+64 juntos, mas só harbour 3.4.
x86_64-7.3.0-release-posix-sjlj-rt_v5-rev0
É só com o harbour 3.2 o problema.
Baixando o nightly que também é com 7.3 funciona.
Nele, tem versão separada do mingw pra 32 e 64 bits.

Meu aplicativo compilado com harbour 3.2 tá travando muito, provavelmente por causa dos parâmetros da WVG.
Talvez uma boa oportunidade pro harbour++ que tem wvg+hbwin do 3.4.

Como gerar o harbour 3.2?

Enviado: 18 Jul 2022 19:14
por JoséQuintas
Mas de qualquer forma é curiosa a mensagem de erro. Diz que a CPU que escolhi não aceita instruções X86/X64, como se eu tivesse escolhido outro tipo de máquina/sistema operacional.

Como gerar o harbour 3.2?

Enviado: 18 Jul 2022 20:28
por marcosgambeta
Testei o Harbour 3.2 com este arquivo: x86_64-7.3.0-release-posix-sjlj-rt_v5-rev0.

Deixando no automático, gerou um Harbour 64-bit e a compilação de programas 64-bit ocorreu sem problemas.

Mas quando tentei gerar um Harbour 32-bit com esta mesma instalação do MinGW, ocorreu o mesmo erro que ocorreu com você.

Código: Selecionar todos

set HB_COMPILER=mingw
set HB_CPU=x86

Código: Selecionar todos

cc1.exe: error: CPU you selected does not support x86-64 instruction set
mingw32-make[4]: *** [../../../../../../config/rules.mk:88: png.o] Error 1
mingw32-make[3]: *** [../../../config/lib.mk:68: descend] Error 2
mingw32-make[2]: *** [../../config/dir.mk:71: png] Error 2
mingw32-make[1]: *** [../config/dir.mk:71: 3rd] Error 2
mingw32-make: *** [config/dir.mk:71: src] Error 2
Então, o problema é uma limitação do Harbour 3.2 ou um erro nos scripts. E deve ocorrer no Harbour++ também, visto que usei o Harbour 3.2 como base.

Uma solução, enquanto o problema não for resolvido, seria usar a versão 32-bit deste MinGW:

i686-7.3.0-release-posix-sjlj-rt_v5-rev0.7z

Como gerar o harbour 3.2?

Enviado: 18 Jul 2022 20:54
por marcosgambeta
marcosgambeta escreveu:Uma solução, enquanto o problema não for resolvido, seria usar a versão 32-bit deste MinGW:

i686-7.3.0-release-posix-sjlj-rt_v5-rev0.7z
Testei com o arquivo citado acima e compilou sem erros no modo automático.

Então, o problema é a compilação cruzada: gerar um Harbour 32-bit usando uma instalação 64-bit do MinGW.

Como gerar o harbour 3.2?

Enviado: 18 Jul 2022 22:32
por marcosgambeta
José,

Consegui gerar um Harbour 32-bit com o MinGW 64-bit.

Código: Selecionar todos

D:\HARBOUR32A>harbour -build
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/

Harbour Build Info
---------------------------
Version: Harbour 3.2.0dev (r2104281802)
Compiler: MinGW GNU C 7.3 (32-bit)
Platform: Windows 10 10.0
PCode version: 0.3
ChangeLog last entry: 2021-04-28 20:02 UTC+0200 Aleksander Czajczynski (hb fki.pl)
ChangeLog ID: 4643587824552fd877e7f02ad11596e0b30c465d
Built on: Jul 18 2022 21:04:55
Build options: (Clipper 5.3b) (Clipper 5.x undoc)
---------------------------

Código: Selecionar todos

D:\HARBOUR32A>gcc --version
gcc (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Precisa alterar este arquivo: config\win\mingw.mk (linhas 65 a 75)

De:

Código: Selecionar todos

#ifeq ($(HB_COMPILER),mingw64)
#   CFLAGS += -m64
#   DFLAGS += -m64
#   LDFLAGS += -m64
#   RCFLAGS += -m64
#else
#   CFLAGS += -m32
#   DFLAGS += -m32
#   LDFLAGS += -m32
#   RCFLAGS += -m32
#endif
Para:

Código: Selecionar todos

ifeq ($(HB_COMPILER),mingw64)
   CFLAGS += -m64
   DFLAGS += -m64
   LDFLAGS += -m64
   RCFLAGS += --target=pe-x86-64
else
   CFLAGS += -m32
   DFLAGS += -m32
   LDFLAGS += -m32
   RCFLAGS += --target=pe-i386
endif
Ao usar o hbmk2, precisa informar parâmetros extras. Veja exemplo abaixo:

Código: Selecionar todos

hbmk2 programa -comp=mingw -cpu=x86 -cflag=-m32 -resflag=--target=pe-i386 -ldflag=-m32
Se definir HB_COMPILER e HB_CPU, não precisa indicar na linha de comando:

Código: Selecionar todos

set HB_COMPILER=mingw
set HB_CPU=x86

Como gerar o harbour 3.2?

Enviado: 18 Jul 2022 23:45
por marcosgambeta
Um detalhe que esqueci de mencionar: todos os testes foram apenas com o 'core' do Harbour. Falta repetir os testes, mas incluindo a pasta 'contrib'.

Como gerar o harbour 3.2?

Enviado: 19 Jul 2022 14:22
por marcosgambeta
No arquivo "utils\hbmk2\hbmk2.prg", introduzi o código abaixo (da linha 4388 em diante):

Código: Selecionar todos

         SWITCH hbmk[ _HBMK_cCOMP ]
         CASE "mingw64"
            AAdd( hbmk[ _HBMK_aOPTC ], "-m64" )
            AAdd( hbmk[ _HBMK_aOPTL ], "-m64" )
            AAdd( hbmk[ _HBMK_aOPTD ], "-m64" )
            AAdd( hbmk[ _HBMK_aOPTRES ], "--target=pe-x86-64" )
            EXIT
         CASE "mingw"
            AAdd( hbmk[ _HBMK_aOPTC ], "-m32" )
            AAdd( hbmk[ _HBMK_aOPTL ], "-m32" )
            AAdd( hbmk[ _HBMK_aOPTD ], "-m32" )
            AAdd( hbmk[ _HBMK_aOPTRES ], "--target=pe-i386" )
            EXIT
         ENDSWITCH
O código acima vem to Harbour 3.4. Com esta alteração no hbmk2, não haverá necessidade de ficar informando os parâmetros na linha de comando ou nos arquivos .hbp/.hbc.

Agora é só questão de fazer compilações limpas (32-bit e 64-bit) para ver se ficou tudo funcionando. Aparentemente, a alteração no arquivo mingw.mk e esta acima seriam suficientes.

Como gerar o harbour 3.2?

Enviado: 29 Fev 2024 07:36
por JoséQuintas
Tinha esquecido disto.
Fui mostrar pro Leonardo, e o problema ressurgiu.

O detalhe é:
Se já gerou a parte problemática antes, ela é pulada, e tudo bem.
Se for gerar instalação limpa, não vai.

Sem problemas.

Essa parte nunca foi, e nunca será incorporada no 3.2

Depois de ver aquilo da compilação com -gc3... sei lá...
Fiquei imaginando se no 3.4 funciona no modo normal....

O harbour 3.4 é muito bom, nunca tive problema nenhum.
Estou usando 3.2 pra ficar compatível com o povão, pra contribuir pra libs.
Vou ter que usar igual o povão, fazer o que...