2024-10-07 11:40 UTC+0200 Aleksander Czajczynski (hb fki.pl)
* config/global.mk
! detect ARM64 CPU on Windows also under non-native shell (MSYS2 sh)
* on unix also recognize aarch64 from uname
* include/hbsetup.h
* __MINGW64__ define is not x86_64 specific anymore
* config/win/clang.mk
* utils/hbmk2/hbmk2.prg
* reworked Clang on Windows detection (ARM64, x86_64, x86),
now it recognizes those flavours in PATH as distributed
by MSYS2 project and also Visual Studio 2022 Build tools.
Starting Harbour build process should be now possible
both from MSYS2 shell (with the special note to use "make"
command instead of "win-make" from sh) and regular batch
script/cmd shell.
Building on Clang distributed by MS x86_64:
PATH=<InstallPath>\BuildTools\VC\Tools\Llvm\x64\bin;%PATH%
win-make
Clang/MS ARM64:
PATH=<InstallPath>\BuildTools\VC\Tools\Llvm\ARM64\bin;%PATH%
win-make
Building on Clang x86_64 distributed by MSYS2 from cmd:
PATH=C:\msys64\clang64\bin;%PATH%
win-make
Clang/MSYS ARM64 called from cmd:
PATH=C:\msys64\clangarm64\bin;%PATH%
win-make
* src/common/hbver.c
* patched clang version string builder to skip duplicate version
number in some builds
* append processor architecture to clang compiler string
on non-Intel systems
This commit is contained in:
@@ -7,6 +7,49 @@
|
||||
Entries may not always be in chronological/commit order.
|
||||
See license at the end of file. */
|
||||
|
||||
2024-10-07 11:40 UTC+0200 Aleksander Czajczynski (hb fki.pl)
|
||||
* config/global.mk
|
||||
! detect ARM64 CPU on Windows also under non-native shell (MSYS2 sh)
|
||||
|
||||
* on unix also recognize aarch64 from uname
|
||||
|
||||
* include/hbsetup.h
|
||||
* __MINGW64__ define is not x86_64 specific anymore
|
||||
|
||||
* config/win/clang.mk
|
||||
* utils/hbmk2/hbmk2.prg
|
||||
* reworked Clang on Windows detection (ARM64, x86_64, x86),
|
||||
now it recognizes those flavours in PATH as distributed
|
||||
by MSYS2 project and also Visual Studio 2022 Build tools.
|
||||
|
||||
Starting Harbour build process should be now possible
|
||||
both from MSYS2 shell (with the special note to use "make"
|
||||
command instead of "win-make" from sh) and regular batch
|
||||
script/cmd shell.
|
||||
|
||||
Building on Clang distributed by MS x86_64:
|
||||
PATH=<InstallPath>\BuildTools\VC\Tools\Llvm\x64\bin;%PATH%
|
||||
win-make
|
||||
|
||||
Clang/MS ARM64:
|
||||
PATH=<InstallPath>\BuildTools\VC\Tools\Llvm\ARM64\bin;%PATH%
|
||||
win-make
|
||||
|
||||
Building on Clang x86_64 distributed by MSYS2 from cmd:
|
||||
PATH=C:\msys64\clang64\bin;%PATH%
|
||||
win-make
|
||||
|
||||
Clang/MSYS ARM64 called from cmd:
|
||||
PATH=C:\msys64\clangarm64\bin;%PATH%
|
||||
win-make
|
||||
|
||||
* src/common/hbver.c
|
||||
* patched clang version string builder to skip duplicate version
|
||||
number in some builds
|
||||
|
||||
* append processor architecture to clang compiler string
|
||||
on non-Intel systems
|
||||
|
||||
2024-09-14 21:26 UTC+0200 Aleksander Czajczynski (hb fki.pl)
|
||||
* tests/speedtst.prg
|
||||
! fix recursion bug i've made
|
||||
|
||||
293
config/global.mk
293
config/global.mk
@@ -413,6 +413,7 @@ endif
|
||||
|
||||
HB_HOST_CPU :=
|
||||
ifeq ($(HB_HOST_PLAT),win)
|
||||
|
||||
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
|
||||
HB_HOST_CPU := x86_64
|
||||
else
|
||||
@@ -425,6 +426,9 @@ ifeq ($(HB_HOST_PLAT),win)
|
||||
ifeq ($(PROCESSOR_ARCHITEW6432),ARM64)
|
||||
HB_HOST_CPU := arm64
|
||||
else
|
||||
ifeq ($(PROCESSOR_ARCHITECTURE),ARM)
|
||||
HB_HOST_CPU := arm
|
||||
else
|
||||
ifeq ($(PROCESSOR_ARCHITECTURE),IA64)
|
||||
HB_HOST_CPU := ia64
|
||||
else
|
||||
@@ -434,6 +438,18 @@ ifeq ($(HB_HOST_PLAT),win)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
# workaround for MSYS2 distribution of MingW64 ARM environment for a while
|
||||
# shell is not native and not 32-bit, therefore it tricks std detection
|
||||
ifneq ($(HB_SHELL),nt)
|
||||
ifneq ($(findstring ARM,$(PROCESSOR_IDENTIFIER)),)
|
||||
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
|
||||
HB_HOST_CPU := arm64
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
else
|
||||
ifneq ($(filter $(HB_HOST_PLAT),dos os2),)
|
||||
HB_HOST_CPU := x86
|
||||
@@ -448,6 +464,9 @@ else
|
||||
ifneq ($(findstring Power,$(_UNAME_M)),)
|
||||
HB_HOST_CPU := ppc
|
||||
else
|
||||
ifneq ($(findstring aarch64,$(_UNAME_M)),)
|
||||
HB_HOST_CPU := arm64
|
||||
else
|
||||
ifneq ($(findstring arm64,$(_UNAME_M)),)
|
||||
HB_HOST_CPU := arm64
|
||||
else
|
||||
@@ -502,6 +521,7 @@ else
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -688,65 +708,79 @@ ifeq ($(HB_COMPILER),)
|
||||
endif
|
||||
endif
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path,wcc386)
|
||||
HB_COMP_PATH := $(call find_in_path,clang)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := watcom
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,clarm.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER_VER := 1310
|
||||
HB_COMPILER := msvcarm
|
||||
HB_PLATFORM := wce
|
||||
HB_CPU := arm
|
||||
HB_COMPILER = clang
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))aarch64-w64-mingw32-clang$(HB_HOST_BIN_EXT)),)
|
||||
HB_CPU := arm64
|
||||
ifeq ($(HB_BUILD_NAME),)
|
||||
export HB_BUILD_NAME := arm64
|
||||
endif
|
||||
ifneq ($(MSYSTEM),)
|
||||
export MSYSTEM := CLANGARM64
|
||||
endif
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,armasm.exe)
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-w64-mingw32-clang$(HB_HOST_BIN_EXT)),)
|
||||
HB_CPU := x86_64
|
||||
ifeq ($(HB_BUILD_NAME),)
|
||||
export HB_BUILD_NAME := 64
|
||||
endif
|
||||
ifneq ($(MSYSTEM),)
|
||||
export MSYSTEM := CLANG64
|
||||
endif
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))i686-w64-mingw32-clang$(HB_HOST_BIN_EXT)),)
|
||||
ifneq ($(MSYSTEM),)
|
||||
export MSYSTEM := CLANG32
|
||||
endif
|
||||
HB_CPU := x86
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))lldb-vscode$(HB_HOST_BIN_EXT)),)
|
||||
export MSYSTEM :=
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path,wcc386)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := watcom
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,clarm.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER_VER := 1310
|
||||
HB_COMPILER := msvcarm
|
||||
HB_CPU := arm
|
||||
HB_PLATFORM := wce
|
||||
ifneq ($(call find_in_path_raw,vctip.exe),)
|
||||
HB_PLATFORM := win
|
||||
endif
|
||||
HB_CPU := arm
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,armasm64.exe)
|
||||
HB_COMP_PATH := $(call find_in_path_raw,armasm.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := msvcarm64
|
||||
HB_PLATFORM := win
|
||||
HB_CPU := arm64
|
||||
HB_COMPILER := msvcarm
|
||||
HB_CPU := arm
|
||||
HB_PLATFORM := wce
|
||||
ifneq ($(call find_in_path_raw,vctip.exe),)
|
||||
HB_PLATFORM := win
|
||||
endif
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,idis.exe)
|
||||
HB_COMP_PATH := $(call find_in_path_raw,armasm64.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := iccia64
|
||||
HB_CPU := ia64
|
||||
HB_COMPILER := msvcarm64
|
||||
HB_PLATFORM := win
|
||||
HB_CPU := arm64
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,icl.exe)
|
||||
HB_COMP_PATH := $(call find_in_path_raw,idis.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := icc
|
||||
HB_COMPILER := iccia64
|
||||
HB_CPU := ia64
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,ml64.exe)
|
||||
HB_COMP_PATH := $(call find_in_path_raw,icl.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := msvc64
|
||||
HB_CPU := x86_64
|
||||
ifneq ($(findstring 8/,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1400
|
||||
else
|
||||
ifneq ($(findstring 9.0,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1500
|
||||
else
|
||||
ifneq ($(findstring 10.0,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1600
|
||||
else
|
||||
ifneq ($(findstring 11.0,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1700
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
HB_COMPILER := icc
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,ias.exe)
|
||||
HB_COMP_PATH := $(call find_in_path_raw,ml64.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := msvcia64
|
||||
HB_CPU := ia64
|
||||
HB_COMPILER := msvc64
|
||||
HB_CPU := x86_64
|
||||
ifneq ($(findstring 8/,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1400
|
||||
else
|
||||
@@ -763,15 +797,10 @@ ifeq ($(HB_COMPILER),)
|
||||
endif
|
||||
endif
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,cl.exe)
|
||||
HB_COMP_PATH := $(call find_in_path_raw,ias.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := msvc
|
||||
ifneq ($(findstring VC98,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1200
|
||||
else
|
||||
ifneq ($(findstring 2003,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1300
|
||||
else
|
||||
HB_COMPILER := msvcia64
|
||||
HB_CPU := ia64
|
||||
ifneq ($(findstring 8/,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1400
|
||||
else
|
||||
@@ -787,80 +816,106 @@ ifeq ($(HB_COMPILER),)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
else
|
||||
# TODO: Add bcc64 autodetection
|
||||
HB_COMP_PATH := $(call find_in_path_raw,bcc32.exe)
|
||||
HB_COMP_PATH := $(call find_in_path_raw,cl.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := bcc
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,pocc.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
ifneq ($(call find_in_path_prw,coredll.lib,$(LIB)),)
|
||||
HB_PLATFORM := wce
|
||||
HB_COMPILER := poccarm
|
||||
HB_CPU := arm
|
||||
else
|
||||
ifneq ($(call find_in_path_prw,dbgeng.lib,$(LIB)),)
|
||||
HB_COMPILER := pocc64
|
||||
HB_CPU := x86_64
|
||||
else
|
||||
HB_COMPILER := pocc
|
||||
endif
|
||||
endif
|
||||
HB_COMPILER := msvc
|
||||
ifneq ($(findstring VC98,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1200
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,xCC.exe)
|
||||
ifneq ($(findstring 2003,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1300
|
||||
else
|
||||
ifneq ($(findstring 8/,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1400
|
||||
else
|
||||
ifneq ($(findstring 9.0,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1500
|
||||
else
|
||||
ifneq ($(findstring 10.0,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1600
|
||||
else
|
||||
ifneq ($(findstring 11.0,$(HB_COMP_PATH)),)
|
||||
HB_COMPILER_VER := 1700
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
else
|
||||
# TODO: Add bcc64 autodetection
|
||||
HB_COMP_PATH := $(call find_in_path_raw,bcc32.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := bcc
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,pocc.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := xcc
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,dmc.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := dmc
|
||||
ifneq ($(call find_in_path_prw,coredll.lib,$(LIB)),)
|
||||
HB_PLATFORM := wce
|
||||
HB_COMPILER := poccarm
|
||||
HB_CPU := arm
|
||||
else
|
||||
# mingw-w64 build
|
||||
HB_COMP_PATH := $(call find_in_path,i686-w64-mingw32-gcc)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := mingw64
|
||||
HB_CCPREFIX := i686-w64-mingw32-
|
||||
ifneq ($(call find_in_path_prw,dbgeng.lib,$(LIB)),)
|
||||
HB_COMPILER := pocc64
|
||||
HB_CPU := x86_64
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.8*),)
|
||||
HB_COMPILER_VER := 48
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.7*),)
|
||||
HB_COMPILER_VER := 47
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.6*),)
|
||||
HB_COMPILER_VER := 46
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.5*),)
|
||||
HB_COMPILER_VER := 45
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
else
|
||||
ifeq ($(HB_HOST_CPU),x86_64)
|
||||
# mingw-w64 build
|
||||
HB_COMP_PATH := $(call find_in_path,x86_64-w64-mingw32-gcc)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := mingw64
|
||||
HB_CCPREFIX := x86_64-w64-mingw32-
|
||||
HB_CPU := x86_64
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.8*),)
|
||||
HB_COMPILER_VER := 48
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.7*),)
|
||||
HB_COMPILER_VER := 47
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.6*),)
|
||||
HB_COMPILER_VER := 46
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.5*),)
|
||||
HB_COMPILER_VER := 45
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
HB_COMPILER := pocc
|
||||
endif
|
||||
endif
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,xCC.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := xcc
|
||||
else
|
||||
HB_COMP_PATH := $(call find_in_path_raw,dmc.exe)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := dmc
|
||||
else
|
||||
# mingw-w64 build
|
||||
HB_COMP_PATH := $(call find_in_path,i686-w64-mingw32-gcc)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := mingw64
|
||||
HB_CCPREFIX := i686-w64-mingw32-
|
||||
HB_CPU := x86_64
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.8*),)
|
||||
HB_COMPILER_VER := 48
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.7*),)
|
||||
HB_COMPILER_VER := 47
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.6*),)
|
||||
HB_COMPILER_VER := 46
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.5*),)
|
||||
HB_COMPILER_VER := 45
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
else
|
||||
ifeq ($(HB_HOST_CPU),x86_64)
|
||||
# mingw-w64 build
|
||||
HB_COMP_PATH := $(call find_in_path,x86_64-w64-mingw32-gcc)
|
||||
ifneq ($(HB_COMP_PATH),)
|
||||
HB_COMPILER := mingw64
|
||||
HB_CCPREFIX := x86_64-w64-mingw32-
|
||||
HB_CPU := x86_64
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.8*),)
|
||||
HB_COMPILER_VER := 48
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.7*),)
|
||||
HB_COMPILER_VER := 47
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.6*),)
|
||||
HB_COMPILER_VER := 46
|
||||
else
|
||||
ifneq ($(wildcard $(dir $(HB_COMP_PATH))$(HB_CCPREFIX)gcc-4.5*),)
|
||||
HB_COMPILER_VER := 45
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -5,8 +5,13 @@ else
|
||||
endif
|
||||
|
||||
OBJ_EXT := .o
|
||||
LIB_PREF := lib
|
||||
LIB_EXT := .a
|
||||
ifeq ($(MSYSTEM),)
|
||||
LIB_PREF :=
|
||||
LIB_EXT := .lib
|
||||
else
|
||||
LIB_PREF := lib
|
||||
LIB_EXT := .a
|
||||
endif
|
||||
|
||||
HB_DYN_COPT := -DHB_DYNLIB
|
||||
|
||||
@@ -45,14 +50,58 @@ LDLIBS := $(foreach lib,$(HB_USER_LIBS) $(LIBS) $(SYSLIBS),-l$(lib))
|
||||
|
||||
LDFLAGS += $(LIBPATHS)
|
||||
|
||||
AR := $(HB_CCPREFIX)ar
|
||||
AR_RULE = ( $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) $(ARSTRIP) ) || ( $(RM) $(LIB_DIR)/$@ && $(FALSE) )
|
||||
AR := $(HB_CCPREFIX)llvm-ar
|
||||
|
||||
AR_RULE = ( $(AR) $(ARFLAGS) $(HB_AFLAGS) $(HB_USER_AFLAGS) rcs $(LIB_DIR)/$@ $(^F) $(ARSTRIP) ) || ( $(RM) $(subst /,$(DIRSEP),$(LIB_DIR)/$@) && $(FALSE) )
|
||||
|
||||
DY := $(CC)
|
||||
DFLAGS += -shared $(LIBPATHS)
|
||||
DY_OUT := -o$(subst x,x, )
|
||||
DLIBS := $(foreach lib,$(HB_USER_LIBS) $(SYSLIBS),-l$(lib))
|
||||
|
||||
DY_RULE = $(DY) $(DFLAGS) -Wl,-soname,$(DYN_NAME_CPT) $(HB_USER_DFLAGS) $(DY_OUT)$(DYN_DIR)/$@ $^ $(DLIBS) $(DYSTRIP) && $(LN) $(@F) $(DYN_FILE_NVR) && $(LN) $(@F) $(DYN_FILE_CPT)
|
||||
ifeq ($(HB_SHELL),nt)
|
||||
define dynlib_object
|
||||
@$(ECHO) $(ECHOQUOTE)$(subst \,/,$(file)) $(ECHOQUOTE) >> __dyn__.tmp
|
||||
|
||||
endef
|
||||
ifneq ($(MSYSTEM),)
|
||||
# no-op on MSYS under cmd.exe shell
|
||||
define dynlib_ln
|
||||
|
||||
endef
|
||||
else
|
||||
define dynlib_ln
|
||||
$(LN) $(subst /,\,$(DYN_DIR)\$(LIB_PREF)$(basename $@)$(LIB_EXT)) $(subst /,\,$(LIB_DIR)\$(LIB_PREF)$(basename $@)$(LIB_EXT))
|
||||
endef
|
||||
endif
|
||||
else
|
||||
define dynlib_object
|
||||
@$(ECHO) -n $(ECHOQUOTE)$(subst \,/,$(file)) $(ECHOQUOTE) >> __dyn__.tmp
|
||||
|
||||
endef
|
||||
define dynlib_ln
|
||||
$(LN) $(@F) $(DYN_FILE_NVR) && $(LN) $(@F) $(DYN_FILE_CPT)
|
||||
endef
|
||||
endif
|
||||
|
||||
# clang distributed by MS uses lld-link, libs are *.lib not lib*.a
|
||||
# in opposite MSYS/MinGW needs args to actually make an implib
|
||||
ifeq ($(MSYSTEM),)
|
||||
define create_dynlib
|
||||
$(if $(wildcard __dyn__.tmp),@$(RM) __dyn__.tmp,)
|
||||
$(foreach file,$^,$(dynlib_object))
|
||||
$(DY) $(DFLAGS) $(HB_USER_DFLAGS) $(DY_OUT)$(DYN_DIR)/$@ @__dyn__.tmp $(DLIBS) $(DYSTRIP) $(DYSTRIP)
|
||||
$(dynlib_ln)
|
||||
endef
|
||||
else
|
||||
define create_dynlib
|
||||
$(if $(wildcard __dyn__.tmp),@$(RM) __dyn__.tmp,)
|
||||
$(foreach file,$^,$(dynlib_object))
|
||||
$(DY) $(DFLAGS) $(HB_USER_DFLAGS) $(DY_OUT)$(DYN_DIR)/$@ @__dyn__.tmp $(DLIBS) -Wl,--out-implib,$(IMP_FILE),--output-def,$(DYN_DIR)/$(basename $@).def $(DYSTRIP) $(DYSTRIP)
|
||||
$(dynlib_ln)
|
||||
endef
|
||||
endif
|
||||
|
||||
DY_RULE = $(create_dynlib)
|
||||
|
||||
include $(TOP)$(ROOT)config/rules.mk
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
defined( __x86_64 ) || \
|
||||
defined( _M_AMD64 ) || \
|
||||
defined( _M_X64 ) || \
|
||||
defined( __MINGW64__ )
|
||||
( defined( __MINGW64__ ) && ! defined( __aarch64__ ) )
|
||||
#define HB_CPU_X86_64
|
||||
|
||||
#elif defined( __arm64__ ) || \
|
||||
|
||||
@@ -1064,6 +1064,10 @@ char * hb_verCompiler( void )
|
||||
iVerMinor = __clang_minor__;
|
||||
iVerPatch = __clang_patchlevel__;
|
||||
|
||||
#if ! defined( HB_CPU_X86 ) && ! defined( HB_CPU_X86_64 )
|
||||
#define __HB_ARCH_VERSION /* add string supplement for "non-classic" architectures */
|
||||
#endif
|
||||
|
||||
#elif defined( __clang__ )
|
||||
|
||||
pszName = "LLVM/Clang C";
|
||||
@@ -1304,14 +1308,24 @@ char * hb_verCompiler( void )
|
||||
hb_strncpy( pszCompiler, "(unknown)", COMPILER_BUF_SIZE - 1 );
|
||||
|
||||
#if defined( __clang_version__ )
|
||||
if( strstr( __clang_version__, "(" ) )
|
||||
/* "2.0 (trunk 103176)" -> "(trunk 103176)" */
|
||||
hb_snprintf( szSub, sizeof( szSub ), " %s", strstr( __clang_version__, "(" ) );
|
||||
else
|
||||
hb_snprintf( szSub, sizeof( szSub ), " (%s)", __clang_version__ );
|
||||
hb_strncat( pszCompiler, szSub, COMPILER_BUF_SIZE - 1 );
|
||||
#if defined( __clang_major__ )
|
||||
/* prevent dups like "LLVM/Clang C 18.1.8 (18.1.8 )" */
|
||||
hb_snprintf( szSub, sizeof( szSub ), "%d.%d.%d ", iVerMajor, iVerMinor, iVerPatch );
|
||||
if( ! strstr( szSub, __clang_version__ ) )
|
||||
{
|
||||
#endif
|
||||
if( strstr( __clang_version__, "(" ) )
|
||||
/* "2.0 (trunk 103176)" -> "(trunk 103176)" */
|
||||
hb_snprintf( szSub, sizeof( szSub ), " %s", strstr( __clang_version__, "(" ) );
|
||||
else
|
||||
hb_snprintf( szSub, sizeof( szSub ), " (%s)", __clang_version__ );
|
||||
hb_strncat( pszCompiler, szSub, COMPILER_BUF_SIZE - 1 );
|
||||
#if defined( __clang_major__ )
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#if defined( __DJGPP__ )
|
||||
hb_snprintf( szSub, sizeof( szSub ), " (DJGPP %i.%02i)", ( int ) __DJGPP__, ( int ) __DJGPP_MINOR__ );
|
||||
hb_strncat( pszCompiler, szSub, COMPILER_BUF_SIZE - 1 );
|
||||
|
||||
@@ -1939,6 +1939,9 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
|
||||
{ {|| FindInSamePath( "x86_64-w64-mingw32-gcc.exe", "gcc" ) }, "mingw64" }, ; /* mingw-w64 TDM build */
|
||||
{ {|| FindInPath( "x86_64-w64-mingw32-gcc" ) }, "mingw64", "x86_64-w64-mingw32-" }, ; /* mingw-w64 build */
|
||||
{ {|| FindInPath( hbmk[ _HBMK_cCCPREFIX ] + "gcc" + hbmk[ _HBMK_cCCSUFFIX ] ) }, "mingw" }, ;
|
||||
{ {|| FindInPath( "aarch64-w64-mingw32-clang" ) }, "clang" }, ; /* MSYS2 or mingw-w64 clang */
|
||||
{ {|| FindInPath( "x86_64-w64-mingw32-clang" ) }, "clang" }, ; /* MSYS2 or mingw-w64 clang */
|
||||
{ {|| FindInPath( "lldb-vscode.exe" ) }, "clang" }, ; /* Visual Studio Build Tools */
|
||||
{ {|| iif( Empty( GetEnv( "WATCOM" ) ), ;
|
||||
NIL, ;
|
||||
FindInPath( "wcc386" ) ) }, "watcom" }, ;
|
||||
@@ -3909,28 +3912,29 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
|
||||
|
||||
/* Command macros:
|
||||
|
||||
{LC} list of C files
|
||||
{LR} list of resource source files (Windows specific)
|
||||
{LS} list of resource binary files (Windows specific)
|
||||
{LO} list of object files
|
||||
{LA} list of object archive (.a) files
|
||||
{LL} list of lib files
|
||||
{LF} list of lib files (as flag)
|
||||
{LB} list of lib files with paths
|
||||
{FC} flags for C compiler (user + automatic)
|
||||
{FL} flags for linker (user + automatic)
|
||||
{FS} flags for code sign tool
|
||||
{UT} url for timestamp (code sign tool)
|
||||
{OW} working dir (when in -inc mode)
|
||||
{OD} output dir
|
||||
{OO} output object (when in -hbcmp mode)
|
||||
{OE} output executable
|
||||
{OM} output map name
|
||||
{OI} output implib name
|
||||
{DB} dir for binaries
|
||||
{DI} dir for includes
|
||||
{DL} dirs for libs
|
||||
{SCRIPT} save command-line to script and pass it to command as @<filename>
|
||||
{LC} list of C files
|
||||
{LR} list of resource source files (Windows specific)
|
||||
{LS} list of resource binary files (Windows specific)
|
||||
{LO} list of object files
|
||||
{LA} list of object archive (.a) files
|
||||
{LL} list of lib files
|
||||
{LF} list of lib files (as flag)
|
||||
{LB} list of lib files with paths
|
||||
{FC} flags for C compiler (user + automatic)
|
||||
{FL} flags for linker (user + automatic)
|
||||
{FS} flags for code sign tool
|
||||
{UT} url for timestamp (code sign tool)
|
||||
{OW} working dir (when in -inc mode)
|
||||
{OD} output dir
|
||||
{OO} output object (when in -hbcmp mode)
|
||||
{OE} output executable
|
||||
{OM} output map name
|
||||
{OI} output implib name
|
||||
{DB} dir for binaries
|
||||
{DI} dir for includes
|
||||
{DL} dirs for libs
|
||||
{SCRIPT} save command-line to script and pass it to command as @<filename>
|
||||
{ESCAPE_BS} escape backslashes in script
|
||||
*/
|
||||
|
||||
/* Assemble library list */
|
||||
@@ -4361,6 +4365,10 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
|
||||
CASE hbmk[ _HBMK_cCOMP ] == "clang"
|
||||
cBin_CompCPP := hbmk[ _HBMK_cCCPREFIX ] + "clang++" + hbmk[ _HBMK_cCCSUFFIX ] + hbmk[ _HBMK_cCCEXT ]
|
||||
cBin_CompC := iif( hbmk[ _HBMK_lCPP ] != NIL .AND. hbmk[ _HBMK_lCPP ], cBin_CompCPP, hbmk[ _HBMK_cCCPREFIX ] + "clang" + hbmk[ _HBMK_cCCSUFFIX ] + hbmk[ _HBMK_cCCEXT ] )
|
||||
IF hb_fileExists( hb_DirSepAdd( hbmk[ _HBMK_cHB_INSTALL_LIB ] ) + "hbrtl.lib" ) /* selfcheck if clang ld emits .lib extension */
|
||||
cLibLibPrefix := ""
|
||||
cLibLibExt := ".lib"
|
||||
ENDIF
|
||||
CASE hbmk[ _HBMK_cCOMP ] == "tcc"
|
||||
cBin_CompCPP := "tcc.exe"
|
||||
cBin_CompC := cBin_CompCPP
|
||||
@@ -4427,7 +4435,9 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
|
||||
AAddNotEmpty( hbmk[ _HBMK_aOPTCPPX ], gcc_opt_lngcpp_fill( hbmk ) )
|
||||
cBin_Dyn := cBin_CompC
|
||||
cOpt_Dyn := "-shared -o {OD} {LO} {FD} {IM} {DL} {LS}"
|
||||
IF ! hbmk[ _HBMK_cCOMP ] == "tcc"
|
||||
IF hbmk[ _HBMK_cCOMP ] == "clang"
|
||||
cOpt_Dyn += "{SCRIPT}{ESCAPE_BS}"
|
||||
ELSEIF ! hbmk[ _HBMK_cCOMP ] == "tcc"
|
||||
cOpt_Dyn += "{SCRIPT_MINGW}"
|
||||
ENDIF
|
||||
cBin_Link := cBin_CompC
|
||||
@@ -4435,9 +4445,13 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
|
||||
bBlk_ImpLib := {| cSourceDLL, cTargetLib, cFlags | win_implib_command_gcc( hbmk, hbmk[ _HBMK_cCCPREFIX ] + "dlltool" + hbmk[ _HBMK_cCCSUFFIX ] + hbmk[ _HBMK_cCCEXT ] + " {FI} -d {ID} -l {OL}", cSourceDLL, cTargetLib, cFlags ) }
|
||||
cLibPathPrefix := "-L"
|
||||
cLibPathSep := " "
|
||||
cLibLibExt := ".a"
|
||||
IF cLibLibExt == ""
|
||||
cLibLibExt := ".a"
|
||||
ENDIF
|
||||
cImpLibExt := cLibLibExt
|
||||
IF hbmk[ _HBMK_cCOMP ] == "tcc"
|
||||
IF hbmk[ _HBMK_cCOMP ] == "clang"
|
||||
cBin_Lib := "llvm-ar.exe"
|
||||
ELSEIF hbmk[ _HBMK_cCOMP ] == "tcc"
|
||||
cBin_Lib := "tiny_libmaker.exe"
|
||||
ELSE
|
||||
cBin_Lib := hbmk[ _HBMK_cCCPREFIX ] + "ar" + hbmk[ _HBMK_cCCEXT ]
|
||||
@@ -4487,8 +4501,14 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
|
||||
AAdd( hbmk[ _HBMK_aOPTD ], "-Wl,-Map,{OM}" )
|
||||
ENDIF
|
||||
IF hbmk[ _HBMK_lIMPLIB ]
|
||||
AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--out-implib,{OI}" )
|
||||
AAdd( hbmk[ _HBMK_aOPTD ], "-Wl,--out-implib,{OI}" )
|
||||
IF ( ! hbmk[ _HBMK_cCOMP ] == "clang" .OR. ; /* selfcheck if clang ld is MinGW style */
|
||||
! hb_fileExists( hb_DirSepAdd( hbmk[ _HBMK_cHB_INSTALL_LIB ] ) + "hbrtl.lib" ) )
|
||||
AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--out-implib,{OI}" )
|
||||
AAdd( hbmk[ _HBMK_aOPTD ], "-Wl,--out-implib,{OI}" )
|
||||
ELSE /* clang using lld-link on Windows has option similar to MS link */
|
||||
AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,-implib:{OI}" )
|
||||
AAdd( hbmk[ _HBMK_aOPTD ], "-Wl,-implib:{OI}" )
|
||||
ENDIF
|
||||
ENDIF
|
||||
IF l_lLIBGROUPING .AND. HBMK_ISCOMP( "mingw|mingw64|mingwarm" )
|
||||
AAdd( hbmk[ _HBMK_aOPTL ], "-Wl,--start-group {LL} {LB} {LF} -Wl,--end-group" )
|
||||
@@ -7225,6 +7245,10 @@ STATIC FUNCTION __hbmk( aArgs, nArgTarget, nLevel, /* @ */ lPause, /* @ */ lExit
|
||||
|
||||
/* Handle moving the whole command-line to a script, if requested. */
|
||||
IF Empty( cScriptFile ) .AND. "{SCRIPT}" $ cOpt_Dyn
|
||||
IF "{ESCAPE_BS}" $ cOpt_Dyn
|
||||
cOpt_Dyn := StrTran( cOpt_Dyn, "{ESCAPE_BS}" )
|
||||
cOpt_Dyn := StrTran( cOpt_Dyn, "\", "\\" )
|
||||
ENDIF
|
||||
fhnd := hb_FTempCreateEx( @cScriptFile, NIL, NIL, ".lnk" )
|
||||
IF fhnd != F_ERROR
|
||||
FWrite( fhnd, StrTran( cOpt_Dyn, "{SCRIPT}" ) )
|
||||
|
||||
Reference in New Issue
Block a user