From 0ff2885a668a5bb1817bea7b9114ec8d3b8f71e4 Mon Sep 17 00:00:00 2001 From: Aleksander Czajczynski Date: Mon, 7 Jul 2025 16:17:12 +0200 Subject: [PATCH] 2025-07-07 16:17 UTC+0200 Aleksander Czajczynski (hb fki.pl) * config/win/clang.mk + add resource compiler detection chain to first stage, now harbour.exe binary should also have manifest resource compiled in when clang is used. Previously second stage rc calling was implemented only in hbmk2. * utils/hbmk2/hbmk2.prg ! fixed disappearing llvm-ar with fallback to ar, spotted in windows-ci/MSYS2 --- ChangeLog.txt | 11 +++++++++++ config/win/clang.mk | 33 +++++++++++++++++++++++++++++++-- utils/hbmk2/hbmk2.prg | 3 ++- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index 595139662d..d27e126243 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -7,6 +7,17 @@ Entries may not always be in chronological/commit order. See license at the end of file. */ +2025-07-07 16:17 UTC+0200 Aleksander Czajczynski (hb fki.pl) + * config/win/clang.mk + + add resource compiler detection chain to first stage, + now harbour.exe binary should also have manifest resource + compiled in when clang is used. Previously second stage rc + calling was implemented only in hbmk2. + + * utils/hbmk2/hbmk2.prg + ! fixed disappearing llvm-ar with fallback to ar, spotted + in windows-ci/MSYS2 + 2025-07-07 13:42 UTC+0200 Aleksander Czajczynski (hb fki.pl) * .github/workflows/windows-ci.yml * libgd, qt5-base not available in MSYS x86 diff --git a/config/win/clang.mk b/config/win/clang.mk index ca881587ea..94445490b7 100644 --- a/config/win/clang.mk +++ b/config/win/clang.mk @@ -50,11 +50,40 @@ LDLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib)) LDFLAGS += $(LIBPATHS) -AR := $(HB_CCPREFIX)llvm-ar +HB_AR_PATH := $(call find_in_path,$(HB_CCPREFIX)llvm-ar) +ifneq ($(HB_AR_PATH),) + AR := $(HB_CCPREFIX)llvm-ar +else + AR := $(HB_CCPREFIX)ar +endif AR_RULE = ( $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) $(ARSTRIP) ) || ( $(RM) $(subst /,$(DIRSEP),$(LIB_DIR)/$@) && $(FALSE) ) -# TODO: add resource compiler detect chain in this stage: GNU windres, llvm-windres, llvm-rc +# order of resource compiler detect chain in this stage (hbmk2 uses similar): +# GNU windres, llvm-windres, llvm-rc +# non-GNU shown resource file encoding issues + +RC_OUT := -o$(subst x,x, ) +RCFLAGS += -I. -I$(HB_HOST_INC) -O coff +RES_EXT := .reso + +HB_RC_PATH := $(call find_in_path,$(HB_CCPREFIX)windres) +ifneq ($(HB_RC_PATH),) + RC := $(HB_CCPREFIX)windres +else + HB_RC_PATH := $(call find_in_path,$(HB_CCPREFIX)llvm-windres) + ifneq ($(HB_RC_PATH),) + RC := $(HB_CCPREFIX)llvm-windres + else + HB_RC_PATH := $(call find_in_path,$(HB_CCPREFIX)llvm-rc) + ifneq ($(HB_RC_PATH),) + RC := $(HB_CCPREFIX)llvm-rc + RCFLAGS := /I. /I$(HB_HOST_INC) /C 1252 + RC_OUT := /FO$(subst x,x, ) + RES_EXT := .res + endif + endif +endif DY := $(CC) DFLAGS += -shared $(LIBPATHS) diff --git a/utils/hbmk2/hbmk2.prg b/utils/hbmk2/hbmk2.prg index f3ac61dd69..650f6ef7ef 100644 --- a/utils/hbmk2/hbmk2.prg +++ b/utils/hbmk2/hbmk2.prg @@ -4481,7 +4481,8 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit cLibLibExt := ".a" ENDIF cImpLibExt := cLibLibExt - IF hbmk[ _HBMK_cCOMP ] == "clang" + IF hbmk[ _HBMK_cCOMP ] == "clang" .AND. !( FindInPath( hbmk[ _HBMK_cCCPREFIX ] + "llvm-ar" + hbmk[ _HBMK_cCCEXT ] ) == NIL ) + /* new clang toolchains not always distribute llvm-ar (or it is renamed) */ cBin_Lib := hbmk[ _HBMK_cCCPREFIX ] + "llvm-ar" + hbmk[ _HBMK_cCCEXT ] ELSEIF hbmk[ _HBMK_cCOMP ] == "tcc" cBin_Lib := "tiny_libmaker.exe"