+ config/bsd/zig-noauto.mk
+ config/bsd/zig.mk
+ config/common/zig-noauto.mk
+ config/common/zig.mk
+ config/darwin/zig-noauto.mk
+ config/darwin/zig.mk
+ config/linux/zig-noauto.mk
+ config/linux/zig.mk
+ config/win/zig-noauto.mk
+ config/win/zig.mk
* config/global.mk
* utils/hbmk2/hbmk2.prg
! typo fixed in Alpha target (this path was really untested)
+ added support for using Zig as LLVM C compiler frontend. Recent
idea comes from Marcos Gambeta Harbour++ fork, though I haven't
borrowed any code. Here the functionalty is complete, whole
Harbour source tree can be compiled, together with shared libs.
Zig has unique ability of managing cross-compiled builds, mostly
without downloading anything else. For example you should be able
to easily make a Linux+musl libc build of your Harbour application
that will run on any distribution with Linux kernel >= 2.6.39 (untested).
Zig is not auto-detected by the Harbour build process, HB_COMPILER=zig
has to be defined. The only exception is that, hbmk2 on Windows can
locate "zig.exe" while building final Harbour applications. Usually
there are no conflicting tools on PATH on this platform.
After downloading zig from https://ziglang.org/download/
specific to your OS, assuming the tool being unpacked to
/home/user/zig or C:\zig, usage is as follows:
Linux/BSD native build:
PATH=$PATH:/home/user/zig
HB_COMPILER=zig make -j8
Unix to Windows x64 cross:
PATH=$PATH:/home/user/zig
export HB_ZIG_TARGET=x86_64-windows
# (or) export HB_ZIG_TARGET=x86_64-windows-gnu
export HB_CPU=x86_64
# have to build a Harbour for your host first, for a native hbmk2
export HB_HOST_BIN=/home/user/harbour/bin/linux/zig
export HB_PLATFORM=win
export HB_BUILD_NAME=64cross
export HB_COMPILER=zig
make -j16
Windows native build:
PATH=C:\zig;%PATH%
set HB_COMPILER=zig
win-make -j8
Windows to Windows-on-ARM cross:
set HB_ZIG_TARGET=aarch64-windows
set HB_CPU=arm64
set HB_HOST_BIN=C:\harbour\bin\win\zig
set HB_COMPILER=zig
win-make -j8
Windows to Linux ARM64:
set HB_USER_CFLAGS=-fPIC
set HB_ZIG_TARGET=aarch64-linux
set HB_PLATFORM=linux
set HB_CPU=arm64
set HB_HOST_BIN=C:\harbour\bin\win\zig
set HB_COMPILER=zig
win-make -j8
Instead of setting HB_ZIG_TARGET, the less convenient way is:
HB_USER_CFLAGS=-target aarch64-linux
HB_USER_LDFLAGS=-target aarch64-linux
HB_USER_DFLAGS=-target aarch64-linux
Some target platforms need PIC mode even for static builds,
in such case add:
HB_USER_CFLAGS=-fPIC
; TOFIX: shared lib symlinks are not created when cross-building from
Windows to Linux, could copy or adapt modern Windows counterpart
olectl.h is missing when cross-building hbwin contrib from
Linux to Windows (likely needs headers from Windows SDK)
basically a non issue, but HB_CPU and HB_PLATFORM are not guessed
from HB_ZIG_TARGET - conversion table seems to be doable, if
someone is interested in making a patch.
2250 lines
81 KiB
Makefile
2250 lines
81 KiB
Makefile
# ---------------------------------------------------------------
|
|
# Copyright 2009 Viktor Szakats (vszakats.net/harbour)
|
|
# See LICENSE.txt for licensing terms.
|
|
# ---------------------------------------------------------------
|
|
|
|
# GNU make docs:
|
|
# https://www.gnu.org/software/make/manual/make.html
|
|
# http://wanderinghorse.net/computing/make/
|
|
# https://blog.jgc.org/2013/02/updated-list-of-my-gnu-make-articles.html
|
|
# https://lists.gnu.org/archive/html/help-make/
|
|
# http://make.mad-scientist.net/
|
|
# Portable shell programming:
|
|
# https://www.gnu.org/software/autoconf/manual/html_node/Portable-Shell.html
|
|
# https://www.gnu.org/software/bash/manual/bashref.html
|
|
# https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html
|
|
# GNU coding standards:
|
|
# https://www.gnu.org/prep/standards/standards.html
|
|
# GNU Make NEWS:
|
|
# https://git.savannah.gnu.org/cgit/make.git/tree/NEWS
|
|
|
|
# NOTE: $(realpath/abspath) need GNU Make 3.81 or upper
|
|
# NOTE: $(eval) needs GNU Make 3.80 or upper
|
|
|
|
ifeq ($(GLOBAL_MK_),)
|
|
GLOBAL_MK_ := yes
|
|
|
|
-include $(TOP)$(ROOT)user.mk
|
|
|
|
HB_VER_MAJOR := 3
|
|
HB_VER_MINOR := 2
|
|
HB_VER_RELEASE := 0
|
|
# Status (dev, alpha1, alpha2, beta1, beta2, rc1, rc2, empty for final)
|
|
HB_VER_STATUS := dev
|
|
# Short status (d, a1, a2, b1, b2, r1, r2, empty for final)
|
|
HB_VER_STATUS_SH := d
|
|
|
|
ifeq ($(HB_VER_STATUS_SH),)
|
|
HB_VER_STATUS_SH := $(HB_VER_MINOR)$(HB_VER_RELEASE)
|
|
endif
|
|
|
|
# Arbitrary pattern which we do not expect to occur in real-world path names
|
|
substpat := !@!@
|
|
# On the other hand a very common pattern
|
|
chr_space := $(subst ,, )
|
|
|
|
# This is not strictly necessary, but it does significantly reduce
|
|
# the number of rules that make has to evaluate otherwise, which may give
|
|
# a performance boost on a slow system.
|
|
.SUFFIXES:
|
|
|
|
.PHONY: all clean install
|
|
|
|
_make_ver_min := 3.81
|
|
_make_ver_ok := $(filter $(_make_ver_min),$(firstword $(sort $(MAKE_VERSION) $(_make_ver_min))))
|
|
ifeq ($(_make_ver_ok),)
|
|
ifeq ($(_make_ver_warn),)
|
|
$(warning ! Warning: GNU Make version $(MAKE_VERSION) found, $(_make_ver_min) or upper recommended for Harbour)
|
|
export _make_ver_warn := yes
|
|
endif
|
|
endif
|
|
|
|
# Detect GNU Make version compatibility (unsupported functions return empty value in GNU Make)
|
|
ifneq ($(abspath .),)
|
|
_MAKE_COMPAT_381 := yes
|
|
endif
|
|
# $(eval _MAKE_COMPAT_380 := yes)
|
|
|
|
# Users must specify HB_SRC_ROOTPATH only for < 3.81 GNU Make versions
|
|
# (without '$(realpath)' function). For newer ones we clear it
|
|
# to avoid messing things up.
|
|
ifneq ($(_MAKE_COMPAT_381),)
|
|
HB_SRC_ROOTPATH :=
|
|
else
|
|
# Condition it to have forward slashes, a guaranteed ending slash and no double slashes, if specified
|
|
ifneq ($(HB_SRC_ROOTPATH),)
|
|
HB_SRC_ROOTPATH := $(subst //,/,$(subst \,/,$(HB_SRC_ROOTPATH))/)
|
|
endif
|
|
endif
|
|
|
|
find_in_path = $(strip $(subst $(substpat), ,$(firstword $(subst |, ,$(subst $(subst x, ,x),$(substpat),$(filter-out |,$(foreach dir, $(subst $(PTHSEP), ,$(subst $(subst x, ,x),$(substpat),$(PATH))),|$(wildcard $(subst //,/,$(subst $(substpat),\ ,$(subst \,/,$(dir)))/$(1))$(HB_HOST_BIN_EXT)))))))))
|
|
find_in_path_raw = $(strip $(subst $(substpat), ,$(firstword $(subst |, ,$(subst $(subst x, ,x),$(substpat),$(filter-out |,$(foreach dir, $(subst $(PTHSEP), ,$(subst $(subst x, ,x),$(substpat),$(PATH))),|$(wildcard $(subst //,/,$(subst $(substpat),\ ,$(subst \,/,$(dir)))/$(1))))))))))
|
|
find_in_path_par = $(strip $(subst $(substpat), ,$(firstword $(subst |, ,$(subst $(subst x, ,x),$(substpat),$(filter-out |,$(foreach dir, $(subst $(PTHSEP), ,$(subst $(subst x, ,x),$(substpat),$(2))),|$(wildcard $(subst //,/,$(subst $(substpat),\ ,$(subst \,/,$(dir)))/$(1))$(HB_HOST_BIN_EXT)))))))))
|
|
find_in_path_prw = $(strip $(subst $(substpat), ,$(firstword $(subst |, ,$(subst $(subst x, ,x),$(substpat),$(filter-out |,$(foreach dir, $(subst $(PTHSEP), ,$(subst $(subst x, ,x),$(substpat),$(2))),|$(wildcard $(subst //,/,$(subst $(substpat),\ ,$(subst \,/,$(dir)))/$(1))))))))))
|
|
dir_with_spaces = $(subst $(substpat), ,$(dir $(subst $(chr_space),$(substpat),$(1))))
|
|
|
|
# Some presets based on HB_BUILD_NAME
|
|
ifneq ($(HB_BUILD_NAME),)
|
|
export HB_BUILD_NAME := $(subst /,,$(subst \,/,$(HB_BUILD_NAME)))
|
|
ifeq ($(HB_BUILD_NAME),.r)
|
|
HB_BUILD_DEBUG := no
|
|
HB_BUILD_OPTIM := yes
|
|
HB_BUILD_MODE ?= c
|
|
else
|
|
ifeq ($(HB_BUILD_NAME),.rp)
|
|
HB_BUILD_DEBUG := no
|
|
HB_BUILD_OPTIM := yes
|
|
HB_BUILD_MODE ?= cpp
|
|
else
|
|
ifeq ($(HB_BUILD_NAME),.d)
|
|
HB_BUILD_DEBUG := yes
|
|
HB_BUILD_OPTIM := no
|
|
HB_BUILD_MODE ?= c
|
|
else
|
|
ifeq ($(HB_BUILD_NAME),.dp)
|
|
HB_BUILD_DEBUG := yes
|
|
HB_BUILD_OPTIM := no
|
|
HB_BUILD_MODE ?= cpp
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_INIT_DONE),)
|
|
# Store the original value
|
|
export HB_MAKECMDGOALS := $(MAKECMDGOALS)
|
|
|
|
ifeq ($(HB_BUILD_PKG),yes)
|
|
|
|
# We need some >= 3.81 GNU Make feature to make this option work,
|
|
# or we need HB_SRC_ROOTPATH to be specified by user.
|
|
ifeq ($(_MAKE_COMPAT_381),)
|
|
ifeq ($(HB_SRC_ROOTPATH),)
|
|
export HB_BUILD_PKG := no
|
|
endif
|
|
endif
|
|
# 'clean' and 'install' are required when building a release package
|
|
ifeq ($(filter clean,$(HB_MAKECMDGOALS)),)
|
|
export HB_BUILD_PKG := no
|
|
else
|
|
ifeq ($(filter install,$(HB_MAKECMDGOALS)),)
|
|
export HB_BUILD_PKG := no
|
|
else
|
|
ifneq ($(ROOT),./)
|
|
export HB_BUILD_PKG := no
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_BUILD_PKG),no)
|
|
$(warning ! Warning: Use 'clean install' from Harbour root directory to create a release package.)
|
|
endif
|
|
|
|
# Enforce some basic settings for release packages
|
|
export HB_BUILD_DYN := yes
|
|
export HB_BUILD_OPTIM := yes
|
|
export HB_BUILD_DEBUG := no
|
|
export HB_BUILD_SHARED := no
|
|
export HB_INSTALL_IMPLIB := yes
|
|
export HB_REBUILD_EXTERN := no
|
|
export HB_REBUILD_PARSER := no
|
|
endif
|
|
|
|
# Cannot build shared tools if we don't create dlls
|
|
ifeq ($(HB_BUILD_DYN),no)
|
|
export HB_BUILD_SHARED := no
|
|
endif
|
|
|
|
ifeq ($(HB_INSTALL_IMPLIB),yes)
|
|
# 'install' is required to create import libraries
|
|
ifeq ($(filter install,$(HB_MAKECMDGOALS)),)
|
|
export HB_INSTALL_IMPLIB := no
|
|
$(warning ! Warning: HB_INSTALL_IMPLIB option has an effect only if 'install' is requested.)
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(HB_MT),)
|
|
ifeq ($(filter $(HB_MT),yes no),)
|
|
export HB_MT :=
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Make platform detection
|
|
ifneq ($(findstring COMMAND,$(SHELL)),)
|
|
HB_MAKE_PLAT := dos
|
|
else
|
|
ifneq ($(findstring sh.exe,$(SHELL)),)
|
|
HB_MAKE_PLAT := win
|
|
else
|
|
ifneq ($(findstring CMD.EXE,$(SHELL)),)
|
|
HB_MAKE_PLAT := os2
|
|
else
|
|
HB_MAKE_PLAT := unix
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_INIT_DONE),)
|
|
|
|
ifeq ($(_MAKE_COMPAT_381),)
|
|
ifeq ($(HB_SRC_ROOTPATH),)
|
|
$(warning ! Warning: Using < 3.81 GNU Make version and empty HB_SRC_ROOTPATH. Some features may not work.)
|
|
endif
|
|
endif
|
|
|
|
$(info ! Building Harbour $(HB_VER_MAJOR).$(HB_VER_MINOR).$(HB_VER_RELEASE)$(HB_VER_STATUS) from source - https://harbour.github.io)
|
|
$(info ! MAKE: $(MAKE) $(MAKE_VERSION) $(SHELL) $(HB_MAKECMDGOALS) $(MAKEFLAGS) $(if $(MAKESHELL),MAKESHELL: $(MAKESHELL),))
|
|
ifneq ($(HB_USER_PRGFLAGS),)
|
|
$(info ! HB_USER_PRGFLAGS: $(HB_USER_PRGFLAGS))
|
|
endif
|
|
ifneq ($(HB_USER_CFLAGS),)
|
|
$(info ! HB_USER_CFLAGS: $(HB_USER_CFLAGS))
|
|
endif
|
|
ifneq ($(HB_USER_LDFLAGS),)
|
|
$(info ! HB_USER_LDFLAGS: $(HB_USER_LDFLAGS))
|
|
endif
|
|
ifneq ($(HB_USER_AFLAGS),)
|
|
$(info ! HB_USER_AFLAGS: $(HB_USER_AFLAGS))
|
|
endif
|
|
ifneq ($(HB_USER_DFLAGS),)
|
|
$(info ! HB_USER_DFLAGS: $(HB_USER_DFLAGS))
|
|
endif
|
|
ifneq ($(HB_USER_DCFLAGS),)
|
|
$(info ! HB_USER_DCFLAGS: $(HB_USER_DCFLAGS))
|
|
endif
|
|
ifneq ($(HB_USER_LIBS),)
|
|
$(info ! HB_USER_LIBS: $(HB_USER_LIBS))
|
|
endif
|
|
ifneq ($(HB_INSTALL_PREFIX),)
|
|
$(info ! HB_INSTALL_PREFIX: $(HB_INSTALL_PREFIX))
|
|
endif
|
|
ifneq ($(HB_INSTALL_BIN),)
|
|
$(info ! HB_INSTALL_BIN: $(HB_INSTALL_BIN))
|
|
endif
|
|
ifneq ($(HB_INSTALL_LIB),)
|
|
$(info ! HB_INSTALL_LIB: $(HB_INSTALL_LIB))
|
|
endif
|
|
ifneq ($(HB_INSTALL_DYN),)
|
|
$(info ! HB_INSTALL_DYN: $(HB_INSTALL_DYN))
|
|
endif
|
|
ifneq ($(HB_INSTALL_INC),)
|
|
$(info ! HB_INSTALL_INC: $(HB_INSTALL_INC))
|
|
endif
|
|
ifneq ($(HB_INSTALL_DOC),)
|
|
$(info ! HB_INSTALL_DOC: $(HB_INSTALL_DOC))
|
|
endif
|
|
ifneq ($(HB_INSTALL_MAN),)
|
|
$(info ! HB_INSTALL_MAN: $(HB_INSTALL_MAN))
|
|
endif
|
|
ifneq ($(HB_INSTALL_ETC),)
|
|
$(info ! HB_INSTALL_ETC: $(HB_INSTALL_ETC))
|
|
endif
|
|
ifneq ($(HB_BUILD_NAME),)
|
|
$(info ! HB_BUILD_NAME: $(HB_BUILD_NAME))
|
|
endif
|
|
ifneq ($(HB_BUILD_PKG),)
|
|
$(info ! HB_BUILD_PKG: $(HB_BUILD_PKG))
|
|
endif
|
|
ifneq ($(HB_BUILD_DYN),)
|
|
$(info ! HB_BUILD_DYN: $(HB_BUILD_DYN))
|
|
endif
|
|
ifneq ($(HB_BUILD_CONTRIB_DYN),)
|
|
$(info ! HB_BUILD_CONTRIB_DYN: $(HB_BUILD_CONTRIB_DYN))
|
|
endif
|
|
ifneq ($(HB_BUILD_SHARED),)
|
|
$(info ! HB_BUILD_SHARED: $(HB_BUILD_SHARED))
|
|
endif
|
|
ifneq ($(HB_BUILD_DEBUG),)
|
|
$(info ! HB_BUILD_DEBUG: $(HB_BUILD_DEBUG))
|
|
endif
|
|
ifneq ($(HB_BUILD_STRIP),)
|
|
$(info ! HB_BUILD_STRIP: $(HB_BUILD_STRIP))
|
|
endif
|
|
ifneq ($(HB_BUILD_OPTIM),)
|
|
$(info ! HB_BUILD_OPTIM: $(HB_BUILD_OPTIM))
|
|
endif
|
|
ifneq ($(HB_BUILD_MODE),)
|
|
$(info ! HB_BUILD_MODE: $(HB_BUILD_MODE))
|
|
endif
|
|
ifneq ($(HB_BUILD_3RDEXT),)
|
|
$(info ! HB_BUILD_3RDEXT: $(HB_BUILD_3RDEXT))
|
|
endif
|
|
ifneq ($(HB_BUILD_PARTS),)
|
|
$(info ! HB_BUILD_PARTS: $(HB_BUILD_PARTS))
|
|
endif
|
|
ifneq ($(HB_REBUILD_EXTERN),)
|
|
$(info ! HB_REBUILD_EXTERN: $(HB_REBUILD_EXTERN))
|
|
endif
|
|
ifneq ($(HB_REBUILD_PARSER),)
|
|
$(info ! HB_REBUILD_PARSER: $(HB_REBUILD_PARSER))
|
|
endif
|
|
ifneq ($(HB_INSTALL_IMPLIB),)
|
|
$(info ! HB_INSTALL_IMPLIB: $(HB_INSTALL_IMPLIB))
|
|
endif
|
|
ifneq ($(HB_MT),)
|
|
$(info ! HB_MT: $(HB_MT))
|
|
endif
|
|
ifeq ($(HB_COMPILER),zig)
|
|
ifneq ($(HB_ZIG_TARGET),)
|
|
$(info ! HB_ZIG_TARGET: $(HB_ZIG_TARGET))
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Shell detection
|
|
ifneq ($(SHLVL),)
|
|
HB_SHELL := sh
|
|
SHELL := /bin/sh
|
|
else
|
|
ifeq ($(patsubst /bin/%sh,sh,$(SHELL)),sh)
|
|
HB_SHELL := sh
|
|
SHELL := /bin/sh
|
|
else
|
|
ifneq ($(OS2_SHELL),)
|
|
HB_SHELL := os2
|
|
SHELL := $(COMSPEC)
|
|
else
|
|
ifneq ($(ComSpec),)
|
|
COMSPEC := $(ComSpec)
|
|
endif
|
|
ifeq ($(COMSPEC),)
|
|
ifeq ($(OS),Windows_NT)
|
|
COMSPEC := cmd.exe
|
|
else
|
|
COMSPEC := command.com
|
|
endif
|
|
endif
|
|
SHELL := $(COMSPEC)
|
|
ifneq ($(findstring COMMAND,$(COMSPEC)),)
|
|
HB_SHELL := dos
|
|
else
|
|
ifneq ($(findstring command,$(COMSPEC)),)
|
|
HB_SHELL := dos
|
|
else
|
|
HB_SHELL := nt
|
|
_VER := $(shell ver)
|
|
ifeq ($(strip $(findstring 3.5,$(shell ver))$(findstring 4.0,$(shell ver))$(findstring 5.0,$(shell ver))),)
|
|
HB_SHELL_XP := (xp)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# NOTE: This can be need if we want to run some internal command which are
|
|
# missing from GNU Make's internal auto-detection list. Like 'move' on
|
|
# non-*nix shells. [vszakats]
|
|
CMDPREF :=
|
|
ifneq ($(HB_SHELL),sh)
|
|
ifneq ($(COMSPEC),)
|
|
CMDPREF := $(COMSPEC) /c
|
|
endif
|
|
endif
|
|
|
|
# Directory separator default
|
|
ifeq ($(DIRSEP),)
|
|
DIRSEP := /
|
|
ifneq ($(HB_SHELL),sh)
|
|
DIRSEP := $(subst /,\,\)
|
|
endif
|
|
endif
|
|
# Path separator default
|
|
ifeq ($(PTHSEP),)
|
|
# small hack, it's hard to detect what is real path separator because
|
|
# some shells in MS-DOS/Windows translates MS-DOS style paths to POSIX form
|
|
ifeq ($(subst ;,:,$(PATH)),$(PATH))
|
|
PTHSEP := :
|
|
else
|
|
PTHSEP := ;
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_HOST_PLAT),)
|
|
ifeq ($(windir)$(WINDIR),)
|
|
# Using "quasi-functions" instead of $(eval) solution to stay compatible
|
|
# with < 3.80 GNU Make versions
|
|
_DETPLAT_STR := $(OSTYPE)
|
|
include $(TOP)$(ROOT)config/detplat.mk
|
|
ifeq ($(HB_HOST_PLAT),)
|
|
_DETPLAT_STR := $(MACHTYPE)
|
|
include $(TOP)$(ROOT)config/detplat.mk
|
|
ifeq ($(HB_HOST_PLAT),)
|
|
_DETPLAT_STR := $(OS)
|
|
include $(TOP)$(ROOT)config/detplat.mk
|
|
ifeq ($(HB_HOST_PLAT),)
|
|
ifneq ($(call find_in_path,uname),)
|
|
_DETPLAT_STR := $(shell uname -s)
|
|
include $(TOP)$(ROOT)config/detplat.mk
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
_DETPLAT_STR :=
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_HOST_PLAT),)
|
|
ifneq ($(OS2_SHELL),)
|
|
HB_HOST_PLAT := os2
|
|
else
|
|
ifneq ($(windir)$(WINDIR),)
|
|
HB_HOST_PLAT := win
|
|
ifeq ($(OS),)
|
|
HB_HOST_PLAT_WIN9X := yes
|
|
endif
|
|
else
|
|
ifeq ($(HB_SHELL),dos)
|
|
HB_HOST_PLAT := dos
|
|
else
|
|
ifneq ($(HB_PLATFORM),)
|
|
HB_HOST_PLAT := $(HB_PLATFORM)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_BUILD_CONTRIB_DYN),)
|
|
ifneq ($(filter $(HB_HOST_PLAT),win android),)
|
|
export HB_BUILD_CONTRIB_DYN := yes
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(filter $(HB_HOST_PLAT),win wce dos os2),)
|
|
HB_HOST_BIN_EXT := .exe
|
|
else
|
|
HB_HOST_BIN_EXT :=
|
|
endif
|
|
|
|
HB_HOST_CPU :=
|
|
ifeq ($(HB_HOST_PLAT),win)
|
|
|
|
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
|
|
HB_HOST_CPU := x86_64
|
|
else
|
|
ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
|
|
HB_HOST_CPU := x86_64
|
|
else
|
|
ifeq ($(PROCESSOR_ARCHITECTURE),ARM64)
|
|
HB_HOST_CPU := arm64
|
|
else
|
|
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
|
|
HB_HOST_CPU := x86
|
|
endif
|
|
endif
|
|
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
|
|
else
|
|
_UNAME_M := $(shell uname -m)
|
|
ifneq ($(findstring ppc64,$(_UNAME_M)),)
|
|
HB_HOST_CPU := ppc64
|
|
else
|
|
ifneq ($(findstring ppc,$(_UNAME_M)),)
|
|
HB_HOST_CPU := ppc
|
|
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
|
|
ifneq ($(findstring arm,$(_UNAME_M)),)
|
|
HB_HOST_CPU := arm
|
|
else
|
|
ifneq ($(findstring ia64,$(_UNAME_M)),)
|
|
HB_HOST_CPU := ia64
|
|
else
|
|
ifneq ($(findstring sparc64,$(_UNAME_M)),)
|
|
HB_HOST_CPU := sparc64
|
|
else
|
|
ifneq ($(findstring sparc,$(_UNAME_M)),)
|
|
HB_HOST_CPU := sparc32
|
|
else
|
|
ifneq ($(findstring mips,$(_UNAME_M)),)
|
|
HB_HOST_CPU := mips
|
|
else
|
|
ifneq ($(findstring alpha,$(_UNAME_M)),)
|
|
HB_HOST_CPU := alpha
|
|
else
|
|
ifneq ($(findstring 9000,$(_UNAME_M)),)
|
|
HB_HOST_CPU := parisc
|
|
else
|
|
ifneq ($(findstring parisc,$(_UNAME_M)),)
|
|
HB_HOST_CPU := parisc
|
|
else
|
|
ifneq ($(findstring x86_64,$(_UNAME_M)),)
|
|
HB_HOST_CPU := x86_64
|
|
else
|
|
ifneq ($(findstring 86,$(_UNAME_M)),)
|
|
HB_HOST_CPU := x86
|
|
else
|
|
ifneq ($(findstring 64,$(_UNAME_M)),)
|
|
HB_HOST_CPU := x86_64
|
|
else
|
|
ifneq ($(findstring BePC,$(_UNAME_M)),)
|
|
HB_HOST_CPU := x86
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_INIT_DONE),)
|
|
$(info ! HB_HOST_PLAT: $(HB_HOST_PLAT)$(if $(HB_HOST_CPU), ($(HB_HOST_CPU)),) HB_SHELL: $(HB_SHELL))
|
|
endif
|
|
|
|
HB_PLAT_AUTO :=
|
|
ifeq ($(HB_PLATFORM),)
|
|
HB_PLATFORM := $(HB_HOST_PLAT)
|
|
ifneq ($(HB_COMPILER),)
|
|
ifeq ($(HB_COMPILER),djgpp)
|
|
HB_PLATFORM := dos
|
|
else
|
|
ifneq ($(filter $(HB_COMPILER),msvcarm msvcmips msvcsh mingwarm poccarm),)
|
|
HB_PLATFORM := wce
|
|
else
|
|
ifneq ($(filter $(HB_COMPILER),mingw mingw64 msvc msvc64 msvcia64 msvcarm64 bcc bcc64 xcc pocc pocc64),)
|
|
HB_PLATFORM := win
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
ifneq ($(findstring vxworks,$(WIND_PLATFORM)),)
|
|
HB_PLATFORM := vxworks
|
|
ifeq ($(HB_CPU),)
|
|
HB_CPU := x86
|
|
endif
|
|
endif
|
|
ifneq ($(HB_PLATFORM),)
|
|
HB_PLAT_AUTO := (auto-detected)
|
|
endif
|
|
endif
|
|
|
|
HB_COMPILER_ORI := $(HB_COMPILER)
|
|
|
|
# enable CC auto-detection in *nix cross builds
|
|
HB_CC_DET :=
|
|
ifneq ($(HB_HOST_PLAT),$(HB_PLATFORM))
|
|
ifeq ($(filter $(HB_HOST_PLAT),win dos os2),)
|
|
ifeq ($(HB_CCPATH)$(HB_CCPREFIX)$(HB_CCSUFFIX),)
|
|
HB_CC_DET := yes
|
|
endif
|
|
ifeq ($(HB_COMPILER),)
|
|
ifeq ($(HB_PLATFORM),win)
|
|
HB_CC_DET := yes
|
|
HB_COMPILER := mingw
|
|
else
|
|
ifeq ($(HB_PLATFORM),wce)
|
|
HB_CC_DET := yes
|
|
HB_COMPILER := mingwarm
|
|
else
|
|
ifeq ($(HB_PLATFORM),dos)
|
|
HB_CC_DET := yes
|
|
HB_COMPILER := djgpp
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
HB_COMP_AUTO :=
|
|
HB_COMP_PATH :=
|
|
ifeq ($(HB_COMPILER),)
|
|
ifneq ($(filter $(HB_PLATFORM),win wce),)
|
|
HB_COMP_PATH := $(call find_in_path,arm-wince-mingw32ce-gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := mingwarm
|
|
HB_PLATFORM := wce
|
|
HB_CCPREFIX := arm-wince-mingw32ce-
|
|
HB_CPU := arm
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,arm-mingw32ce-gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := mingwarm
|
|
HB_PLATFORM := wce
|
|
HB_CCPREFIX := arm-mingw32ce-
|
|
HB_CPU := arm
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,i386-mingw32ce-gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := mingw
|
|
HB_PLATFORM := wce
|
|
HB_CCPREFIX := i386-mingw32ce-
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_raw,cygstart.exe)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
# Check for a gcc executable in the same directory
|
|
ifeq ($(wildcard $(dir $(HB_COMP_PATH))gcc$(HB_HOST_BIN_EXT)),)
|
|
HB_COMP_PATH :=
|
|
endif
|
|
endif
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
HB_PLATFORM := cygwin
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))i686-pc-cygwin-gcc-3.4*),)
|
|
HB_COMPILER_VER := 34
|
|
endif
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,djasm)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_PLATFORM := dos
|
|
HB_COMPILER := djgpp
|
|
ifneq ($(HB_HOST_CPU),x86)
|
|
$(error ! Error: DJGPP cross-builds are only possible on 32-bit Windows hosts)
|
|
endif
|
|
else
|
|
# tdragon DWARF-2 build (4.4.1)
|
|
HB_COMP_PATH := $(call find_in_path,gcc-dw2)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := mingw
|
|
HB_CCSUFFIX := -dw2
|
|
else
|
|
# Equation Solution build (requires x86_64 host)
|
|
HB_COMP_PATH := $(call find_in_path,x86_64-pc-mingw32-gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := mingw64
|
|
HB_CPU := x86_64
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-*-mingw32-gcc-4.8*),)
|
|
HB_COMPILER_VER := 48
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-*-mingw32-gcc-4.7*),)
|
|
HB_COMPILER_VER := 47
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-*-mingw32-gcc-4.6*),)
|
|
HB_COMPILER_VER := 46
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-*-mingw32-gcc-4.5*),)
|
|
HB_COMPILER_VER := 45
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
# Check for a mingw64-tdm gcc executable in the same directory
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-w64-mingw32-gcc$(HB_HOST_BIN_EXT)),)
|
|
HB_COMPILER := mingw64
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-w64-mingw32-gcc-4.8*),)
|
|
HB_COMPILER_VER := 48
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-w64-mingw32-gcc-4.7*),)
|
|
HB_COMPILER_VER := 47
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-w64-mingw32-gcc-4.6*),)
|
|
HB_COMPILER_VER := 46
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))x86_64-w64-mingw32-gcc-4.5*),)
|
|
HB_COMPILER_VER := 45
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
HB_COMPILER := mingw
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))mingw32-gcc-4.8*),)
|
|
HB_COMPILER_VER := 48
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))mingw32-gcc-4.7*),)
|
|
HB_COMPILER_VER := 47
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))mingw32-gcc-4.6*),)
|
|
HB_COMPILER_VER := 46
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))mingw32-gcc-4.5*),)
|
|
HB_COMPILER_VER := 45
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))mingw32-gcc-4.4*),)
|
|
HB_COMPILER_VER := 44
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))mingw32-gcc-4.3*),)
|
|
HB_COMPILER_VER := 43
|
|
else
|
|
ifneq ($(wildcard $(dir $(HB_COMP_PATH))mingw32-gcc-3.4*),)
|
|
HB_COMPILER_VER := 34
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_raw,$(HB_CCPREFIX)clang$(HB_HOST_BIN_EXT))
|
|
HB_COMP_PWD := $(call dir_with_spaces,$(HB_COMP_PATH))
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := clang
|
|
# following $(HB_CCPREFIX)x86_64..., etc. looks wrong, but it's intentional
|
|
# the goal is to pacify this multilib env best guessing when HB_CCPREFIX= is set
|
|
ifneq ($(wildcard $(HB_COMP_PWD)$(HB_CCPREFIX)x86_64-w64-mingw32-clang$(HB_HOST_BIN_EXT)),)
|
|
HB_CPU := x86_64
|
|
MSYSTEM := CLANG64
|
|
else
|
|
ifneq ($(wildcard $(HB_COMP_PWD)$(HB_CCPREFIX)i686-w64-mingw32-clang$(HB_HOST_BIN_EXT)),)
|
|
HB_CPU := x86
|
|
MSYSTEM := CLANG32
|
|
else
|
|
ifneq ($(wildcard $(HB_COMP_PWD)$(HB_CCPREFIX)aarch64-w64-mingw32-clang$(HB_HOST_BIN_EXT)),)
|
|
HB_CPU := arm64
|
|
MSYSTEM := CLANGARM64
|
|
else
|
|
ifneq ($(findstring /VC/Tools/Llvm/ARM64/,$(HB_COMP_PATH)),)
|
|
MSYSTEM :=
|
|
HB_CPU := arm64
|
|
else
|
|
ifneq ($(findstring /VC/Tools/Llvm/x64/,$(HB_COMP_PATH)),)
|
|
MSYSTEM :=
|
|
HB_CPU := x86_64
|
|
else
|
|
ifneq ($(findstring mingw64,$(HB_COMP_PATH)),)
|
|
HB_CPU := x86_64
|
|
MSYSTEM := CLANG64
|
|
else
|
|
ifneq ($(findstring mingw32,$(HB_COMP_PATH)),)
|
|
HB_CPU := x86
|
|
MSYSTEM := CLANG32
|
|
else
|
|
MSYSTEM := $(shell $(HB_CCPREFIX)clang --version)
|
|
ifneq ($(findstring x86_64-pc-windows-msvc,$(MSYSTEM)),)
|
|
MSYSTEM :=
|
|
HB_CPU := x86_64
|
|
else
|
|
ifneq ($(findstring i686-pc-windows-msvc,$(MSYSTEM)),)
|
|
MSYSTEM :=
|
|
HB_CPU := x86
|
|
else
|
|
ifneq ($(findstring aarch64-pc-windows-msvc,$(MSYSTEM)),)
|
|
MSYSTEM :=
|
|
HB_CPU := arm64
|
|
else
|
|
ifneq ($(findstring x86_64-w64-windows-gnu,$(MSYSTEM)),)
|
|
HB_CPU := x86_64
|
|
MSYSTEM := CLANG64
|
|
else
|
|
ifneq ($(findstring i686-w64-windows-gnu,$(MSYSTEM)),)
|
|
HB_CPU := x86
|
|
MSYSTEM := CLANG32
|
|
else
|
|
ifneq ($(findstring aarch64-w64-windows-gnu,$(MSYSTEM)),)
|
|
HB_CPU := arm64
|
|
MSYSTEM := CLANGARM64
|
|
else
|
|
ifneq ($(findstring -windows-gnu,$(MSYSTEM)),)
|
|
MSYSTEM := CLANG
|
|
else
|
|
MSYSTEM :=
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
export MSYSTEM
|
|
ifneq ($(HB_CPU),$(HB_HOST_CPU))
|
|
ifeq ($(HB_BUILD_NAME),)
|
|
ifeq ($(HB_CPU),x86_64)
|
|
export HB_BUILD_NAME := 64
|
|
else
|
|
export HB_BUILD_NAME := $(HB_CPU)
|
|
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_PLATFORM := wce
|
|
HB_CPU := arm
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_raw,armasm.exe)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
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,armasm64.exe)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := msvcarm64
|
|
HB_PLATFORM := win
|
|
HB_CPU := arm64
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_raw,idis.exe)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := iccia64
|
|
HB_CPU := ia64
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_raw,icl.exe)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := icc
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_raw,ml64.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
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_raw,ias.exe)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := msvcia64
|
|
HB_CPU := ia64
|
|
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
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_raw,cl.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
|
|
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),)
|
|
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
|
|
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
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),linux)
|
|
HB_COMP_PATH := $(call find_in_path,wcc386)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := watcom
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,suncc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := sunpro
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,icc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := icc
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),bsd)
|
|
HB_COMP_PATH := $(call find_in_path_par,clang,/usr/bin)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := clang
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_par,gcc,/usr/bin)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
endif
|
|
endif
|
|
else
|
|
ifneq ($(filter $(HB_PLATFORM),aix hpux beos qnx cygwin),)
|
|
HB_COMP_PATH := $(call find_in_path,gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),darwin)
|
|
HB_COMP_PATH := $(call find_in_path,clang)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := clang
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path_par,clang,/Developer/usr/bin/)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_CCPREFIX := /Developer/usr/bin/
|
|
HB_COMPILER := clang
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,icc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := icc
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),sunos)
|
|
HB_COMP_PATH := $(call find_in_path,suncc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := sunpro
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),dos)
|
|
HB_COMP_PATH := $(call find_in_path,gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := djgpp
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,wcc386)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := watcom
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),os2)
|
|
HB_COMP_PATH := $(call find_in_path,gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,wcc386)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := watcom
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),minix)
|
|
HB_COMP_PATH := $(call find_in_path,clang)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := clang
|
|
else
|
|
HB_COMP_PATH := $(call find_in_path,gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),qnx)
|
|
HB_COMP_PATH := $(call find_in_path,ntox86-gcc)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
HB_COMPILER := gcc
|
|
HB_CCPREFIX := ntox86-
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# auto-detect watcom platform by looking at the header path config
|
|
ifeq ($(HB_COMPILER),watcom)
|
|
ifneq ($(call find_in_path_prw,os2.h,$(INCLUDE)),)
|
|
HB_PLATFORM := os2
|
|
else
|
|
ifneq ($(call find_in_path_prw,windows.h,$(INCLUDE)),)
|
|
HB_PLATFORM := win
|
|
else
|
|
ifneq ($(findstring $(subst \,/,$(WATCOM))/lh,$(subst \,/,$(INCLUDE))),)
|
|
HB_PLATFORM := linux
|
|
else
|
|
ifneq ($(findstring $(subst \,/,$(WATCOM))/LH,$(subst \,/,$(INCLUDE))),)
|
|
HB_PLATFORM := linux
|
|
else
|
|
ifneq ($(HB_PLAT_AUTO),)
|
|
# at least let's not override user-specified platform without strong reasons
|
|
HB_PLATFORM := dos
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
ifneq ($(wildcard $(TOP)$(ROOT)config/$(HB_PLATFORM)/$(HB_COMPILER)-noauto.mk),)
|
|
include $(TOP)$(ROOT)config/$(HB_PLATFORM)/$(HB_COMPILER)-noauto.mk
|
|
endif
|
|
endif
|
|
|
|
# auto-detect CC values for given platform/compiler
|
|
ifneq ($(HB_CC_DET),)
|
|
ifeq ($(HB_PLATFORM)-$(HB_COMPILER),win-mingw)
|
|
|
|
HB_COMPILER :=
|
|
|
|
ifeq ($(wildcard $(HB_CCPATH)$(HB_CCPREFIX)gcc$(HB_HOST_BIN_EXT)),)
|
|
ifeq ($(HB_CCPATH),)
|
|
ifeq ($(call find_in_path,$(HB_CCPREFIX)gcc),)
|
|
HB_CCPREFIX :=
|
|
endif
|
|
else
|
|
HB_CCPATH :=
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
|
|
# try to detect MinGW cross-compiler location using some default platform settings
|
|
ifeq ($(HB_CCPATH)$(HB_CCPREFIX),)
|
|
ifneq ($(wildcard /etc/debian_version),)
|
|
HB_CCPREFIX := i586-mingw32msvc-
|
|
else
|
|
ifneq ($(wildcard /etc/gentoo-release),)
|
|
ifneq ($(call find_in_path_par,i386-mingw32msvc-gcc,/opt/xmingw/bin),)
|
|
HB_CCPATH := /opt/xmingw/
|
|
HB_CCPREFIX := i386-mingw32msvc-
|
|
else
|
|
HB_CCPREFIX := i686-mingw32-
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),bsd)
|
|
HB_CCPATH := /usr/local/mingw32/
|
|
else
|
|
MINGW_OK := $(strip $(foreach d, i386-mingw i486-mingw i586-mingw i686-mingw i386-mingw32 i486-mingw32 i586-mingw32 i686-mingw32, $(if $(wildcard /usr/local/bin/$(d)-gcc),$(d),)))
|
|
ifneq ($(MINGW_OK),)
|
|
HB_CCPATH := /usr/local/bin/
|
|
HB_CCPREFIX := $(MINGW_OK)-
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(wildcard $(HB_CCPATH)$(HB_CCPREFIX)gcc$(HB_HOST_BIN_EXT)),)
|
|
ifeq ($(HB_CCPATH),)
|
|
ifeq ($(call find_in_path,$(HB_CCPREFIX)gcc),)
|
|
HB_CCPREFIX :=
|
|
endif
|
|
else
|
|
HB_CCPATH :=
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
|
|
# generic detection for mingw cross-compiler
|
|
ifeq ($(HB_CCPATH)$(HB_CCPREFIX),)
|
|
MINGW_BASE_LIST := /usr /usr/local /usr/local/mingw32 /opt/xmingw /opt/cross
|
|
MINGW_PREFIX := $(firstword $(foreach d, $(MINGW_BASE_LIST), $(wildcard $(d)/bin/i?86*-mingw*-gcc$(HB_HOST_BIN_EXT))))
|
|
ifneq ($(MINGW_PREFIX),)
|
|
MINGW_PREFIX := $(MINGW_PREFIX:gcc$(HB_HOST_BIN_EXT)=)
|
|
HB_CCPATH := $(dir $(MINGW_PREFIX))
|
|
HB_CCPREFIX := $(notdir $(MINGW_PREFIX))
|
|
else
|
|
MINGW_PREFIX := $(firstword $(foreach d, $(MINGW_BASE_LIST), $(wildcard $(d)/i?86-mingw*/bin/gcc$(HB_HOST_BIN_EXT))))
|
|
ifneq ($(MINGW_PREFIX),)
|
|
HB_CCPATH := $(dir $(MINGW_PREFIX))
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(HB_CCPATH)$(HB_CCPREFIX),)
|
|
HB_COMP_PATH := $(dir $(HB_CCPATH))
|
|
HB_COMPILER := mingw
|
|
export HB_BUILD_3RDEXT := no
|
|
ifneq ($(HB_BUILD_PARTS),all)
|
|
HB_BUILD_PARTS := lib
|
|
endif
|
|
else
|
|
$(error ! Harbour build could not find mingw32 cross-compiler. Please install it, or point HB_CCPATH/HB_CCPREFIX environment variables to it)
|
|
endif
|
|
|
|
else
|
|
ifeq ($(HB_PLATFORM)-$(HB_COMPILER),win-mingw64)
|
|
|
|
HB_COMPILER :=
|
|
|
|
# generic detection for mingw cross-compiler
|
|
ifeq ($(HB_CCPATH)$(HB_CCPREFIX),)
|
|
MINGW_BASE_LIST := /usr /usr/local /usr/local/mingw32 /opt/xmingw /opt/cross
|
|
MINGW_PREFIX := $(firstword $(foreach d, $(MINGW_BASE_LIST), $(wildcard $(d)/bin/amd64-mingw*-gcc$(HB_HOST_BIN_EXT))))
|
|
ifneq ($(MINGW_PREFIX),)
|
|
MINGW_PREFIX := $(MINGW_PREFIX:gcc$(HB_HOST_BIN_EXT)=)
|
|
HB_CCPATH := $(dir $(MINGW_PREFIX))
|
|
HB_CCPREFIX := $(notdir $(MINGW_PREFIX))
|
|
else
|
|
MINGW_PREFIX := $(firstword $(foreach d, $(MINGW_BASE_LIST), $(wildcard $(d)/amd64-mingw*/bin/gcc$(HB_HOST_BIN_EXT))))
|
|
ifneq ($(MINGW_PREFIX),)
|
|
HB_CCPATH := $(dir $(MINGW_PREFIX))
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(HB_CCPATH)$(HB_CCPREFIX),)
|
|
HB_COMP_PATH := $(dir $(HB_CCPATH))
|
|
HB_COMPILER := mingw64
|
|
export HB_BUILD_3RDEXT := no
|
|
ifneq ($(HB_BUILD_PARTS),all)
|
|
HB_BUILD_PARTS := lib
|
|
endif
|
|
else
|
|
$(error ! Harbour build could not find mingw-w64 cross-compiler. Please install it, or point HB_CCPATH/HB_CCPREFIX environment variables to it)
|
|
endif
|
|
|
|
else
|
|
ifeq ($(HB_PLATFORM)-$(HB_COMPILER),wce-mingwarm)
|
|
|
|
HB_COMPILER :=
|
|
|
|
# Look for known mingw32ce compilers on HB_CCPATH if it's set
|
|
ifneq ($(HB_CCPATH),)
|
|
ifneq ($(call find_in_path_par,arm-mingw32ce-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := mingwarm
|
|
HB_CCPREFIX := arm-mingw32ce-
|
|
HB_CCPATH := $(HB_CCPATH)/
|
|
else
|
|
ifneq ($(call find_in_path_par,arm-wince-mingw32ce-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := mingwarm
|
|
HB_CCPREFIX := arm-wince-mingw32ce-
|
|
HB_CCPATH := $(HB_CCPATH)/
|
|
else
|
|
ifneq ($(call find_in_path_par,i386-mingw32ce-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := mingw
|
|
HB_CCPREFIX := i386-mingw32ce-
|
|
HB_CCPATH := $(HB_CCPATH)/
|
|
else
|
|
HB_CCPATH :=
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# If HB_CCPATH not set, or could not be found on the provided PATH,
|
|
# try to detect them in default locations
|
|
ifeq ($(HB_CCPATH),)
|
|
HB_CCPATH := /opt/mingw32ce/bin/
|
|
ifneq ($(call find_in_path_par,arm-mingw32ce-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := mingwarm
|
|
HB_CCPREFIX := arm-mingw32ce-
|
|
else
|
|
ifneq ($(call find_in_path_par,arm-wince-mingw32ce-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := mingwarm
|
|
HB_CCPREFIX := arm-wince-mingw32ce-
|
|
else
|
|
HB_CCPATH := /opt/x86mingw32ce/bin/
|
|
ifneq ($(call find_in_path_par,i386-mingw32ce-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := mingw
|
|
HB_CCPREFIX := i386-mingw32ce-
|
|
else
|
|
HB_CCPATH :=
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(HB_CCPATH)$(HB_CCPREFIX),)
|
|
HB_COMP_PATH := $(dir $(HB_CCPATH))
|
|
export HB_BUILD_3RDEXT := no
|
|
ifneq ($(HB_BUILD_PARTS),all)
|
|
HB_BUILD_PARTS := lib
|
|
endif
|
|
else
|
|
$(error ! Harbour build could not find cegcc cross-compiler. Please install it to /opt/mingw32ce, or point HB_CCPATH/HB_CCPREFIX environment variables to it)
|
|
endif
|
|
|
|
else
|
|
ifeq ($(HB_PLATFORM)-$(HB_COMPILER),wce-mingw)
|
|
|
|
HB_COMPILER :=
|
|
|
|
# Look for known mingw32ce compilers on HB_CCPATH if it's set
|
|
ifneq ($(HB_CCPATH),)
|
|
ifneq ($(call find_in_path_par,i386-mingw32ce-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := mingw
|
|
HB_CCPREFIX := i386-mingw32ce-
|
|
HB_CCPATH := $(HB_CCPATH)/
|
|
else
|
|
HB_CCPATH :=
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
|
|
# If HB_CCPATH not set, or could not be found on the provided PATH,
|
|
# try to detect them in default locations
|
|
ifeq ($(HB_CCPATH),)
|
|
HB_CCPATH := /opt/x86mingw32ce/bin/
|
|
ifneq ($(call find_in_path_par,i386-mingw32ce-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := mingw
|
|
HB_CCPREFIX := i386-mingw32ce-
|
|
else
|
|
HB_CCPATH :=
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(HB_CCPATH)$(HB_CCPREFIX),)
|
|
HB_COMP_PATH := $(dir $(HB_CCPATH))
|
|
export HB_BUILD_3RDEXT := no
|
|
ifneq ($(HB_BUILD_PARTS),all)
|
|
HB_BUILD_PARTS := lib
|
|
endif
|
|
else
|
|
$(error ! Harbour build could not find cegcc (i386) cross-compiler. Please install it to /opt/mingw32ce, or point HB_CCPATH/HB_CCPREFIX environment variables to it)
|
|
endif
|
|
|
|
else
|
|
ifeq ($(HB_PLATFORM)-$(HB_COMPILER),dos-djgpp)
|
|
|
|
# Look for djgpp compiler on HB_CCPATH if it's set
|
|
ifneq ($(HB_CCPATH),)
|
|
ifneq ($(call find_in_path_par,i586-pc-msdosdjgpp-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := djgpp
|
|
HB_CCPREFIX := i586-pc-msdosdjgpp-
|
|
HB_CCPATH := $(HB_CCPATH)/
|
|
else
|
|
HB_CCPATH :=
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
|
|
# If HB_CCPATH not set, or could not be found on the provided PATH,
|
|
# try to detect them in default locations
|
|
ifeq ($(HB_CCPATH),)
|
|
HB_CCPATH := /usr/local/i586-pc-msdosdjgpp
|
|
ifneq ($(call find_in_path_par,i586-pc-msdosdjgpp-gcc,$(HB_CCPATH)),)
|
|
HB_COMPILER := djgpp
|
|
HB_CCPREFIX := i586-pc-msdosdjgpp-
|
|
else
|
|
HB_CCPATH :=
|
|
HB_CCPREFIX :=
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(HB_CCPATH)$(HB_CCPREFIX),)
|
|
HB_COMP_PATH := $(dir $(HB_CCPATH))
|
|
HB_PLATFORM := dos
|
|
export HB_BUILD_3RDEXT := no
|
|
ifneq ($(HB_BUILD_PARTS),all)
|
|
HB_BUILD_PARTS := lib
|
|
endif
|
|
else
|
|
$(error ! Harbour build could not find djgpp cross-compiler. Please install it to /usr/local/i586-pc-msdosdjgpp, or point HB_CCPATH/HB_CCPREFIX environment variables to it)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_COMPILER_ORI),)
|
|
ifneq ($(HB_COMPILER),)
|
|
HB_COMP_PATH := $(subst $(substpat), ,$(dir $(firstword $(subst $(subst x, ,x),$(substpat),$(HB_COMP_PATH)))))
|
|
HB_COMP_AUTO := (auto-detected$(if $(HB_COMP_PATH),: $(HB_COMP_PATH),)$(if $(HB_CCPREFIX), [$(HB_CCPREFIX)*],)$(if $(HB_CCSUFFIX), [*$(HB_CCSUFFIX)],))
|
|
HB_COMP_VERD := $(if $(HB_COMPILER_VER), (v$(HB_COMPILER_VER)),)
|
|
endif
|
|
endif
|
|
export HB_CCPATH
|
|
export HB_CCPREFIX
|
|
export HB_CCSUFFIX
|
|
|
|
ifeq ($(HB_PLATFORM),)
|
|
$(error ! HB_PLATFORM not set, could not auto-detect)
|
|
endif
|
|
ifeq ($(HB_COMPILER),)
|
|
$(error ! HB_COMPILER not set, could not auto-detect)
|
|
endif
|
|
|
|
export HB_PLATFORM
|
|
export HB_COMPILER
|
|
export HB_COMPILER_VER
|
|
export HB_SHELL
|
|
|
|
ifneq ($(HB_COMP_PATH),)
|
|
export HB_COMP_PATH_PUB := $(HB_COMP_PATH)
|
|
endif
|
|
|
|
# Always auto-detect bcc location (hack)
|
|
ifeq ($(HB_COMP_PATH_PUB),)
|
|
ifeq ($(HB_PLATFORM)-$(HB_COMPILER),win-bcc)
|
|
HB_COMP_PATH := $(call find_in_path_raw,bcc32.exe)
|
|
ifneq ($(HB_COMP_PATH),)
|
|
export HB_COMP_PATH_PUB := $(subst $(substpat), ,$(dir $(firstword $(subst $(subst x, ,x),$(substpat),$(HB_COMP_PATH)))))
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifneq ($(filter $(HB_HOST_PLAT),win wce dos os2),)
|
|
HB_HOST_PLAT_UNIX :=
|
|
else
|
|
HB_HOST_PLAT_UNIX := yes
|
|
endif
|
|
|
|
export HB_HOST_PLAT_UNIX
|
|
|
|
ifneq ($(filter $(HB_PLATFORM),win wce dos os2),)
|
|
HB_PLATFORM_UNIX :=
|
|
else
|
|
HB_PLATFORM_UNIX := yes
|
|
endif
|
|
|
|
ifeq ($(HB_PLATFORM),beos)
|
|
HB_LD_LIBRARY_PATH = LIBRARY_PATH
|
|
else
|
|
HB_LD_LIBRARY_PATH = LD_LIBRARY_PATH
|
|
endif
|
|
|
|
PLAT_COMP := $(HB_PLATFORM)/$(HB_COMPILER)$(subst \,/,$(HB_BUILD_NAME))
|
|
|
|
OBJ_DIR := obj/$(PLAT_COMP)
|
|
BIN_DIR := $(TOP)$(ROOT)bin/$(PLAT_COMP)
|
|
LIB_DIR := $(TOP)$(ROOT)lib/$(PLAT_COMP)
|
|
ifeq ($(HB_PLATFORM_UNIX),)
|
|
DYN_DIR := $(BIN_DIR)
|
|
IMP_DIR := $(LIB_DIR)
|
|
else
|
|
ifeq ($(HB_PLATFORM),cygwin)
|
|
DYN_DIR := $(BIN_DIR)
|
|
IMP_DIR := $(LIB_DIR)
|
|
else
|
|
DYN_DIR := $(LIB_DIR)
|
|
IMP_DIR :=
|
|
endif
|
|
ifeq ($(HB_LD_PATH_SET),)
|
|
ifneq ($(HB_SRC_ROOTPATH),)
|
|
export $(HB_LD_LIBRARY_PATH) := $(HB_SRC_ROOTPATH)lib/$(PLAT_COMP):$($(HB_LD_LIBRARY_PATH))
|
|
else
|
|
export $(HB_LD_LIBRARY_PATH) := $(abspath $(DYN_DIR)):$($(HB_LD_LIBRARY_PATH))
|
|
endif
|
|
export HB_LD_PATH_SET := yes
|
|
ifneq ($($(HB_LD_LIBRARY_PATH)),)
|
|
$(info ! $(HB_LD_LIBRARY_PATH): $($(HB_LD_LIBRARY_PATH)))
|
|
endif
|
|
endif
|
|
endif
|
|
DYN_PREF :=
|
|
# define PKG_DIR only if run from root Makefile
|
|
ifeq ($(ROOT),./)
|
|
ifneq ($(HB_SRC_ROOTPATH),)
|
|
PKG_DIR := $(HB_SRC_ROOTPATH)
|
|
else
|
|
PKG_DIR := $(TOP)$(ROOT)
|
|
endif
|
|
PKG_DIR := $(PKG_DIR)pkg/$(PLAT_COMP)
|
|
else
|
|
PKG_DIR :=
|
|
endif
|
|
|
|
# Assemble relative path from OBJ_DIR to source.
|
|
GRANDP := $(subst $(subst x,x, ),,$(foreach item, $(subst /, ,$(OBJ_DIR)), ../))
|
|
|
|
# TODO: Set this in <plat>/<comp>.mk (compiler switches may influence it)
|
|
ifeq ($(HB_CPU),)
|
|
ifeq ($(HB_PLATFORM),win)
|
|
ifneq ($(filter $(HB_COMPILER),msvc64 mingw64 pocc64),)
|
|
HB_CPU := x86_64
|
|
else
|
|
ifneq ($(filter $(HB_COMPILER),msvcia64 iccia64),)
|
|
HB_CPU := ia64
|
|
else
|
|
ifneq ($(filter $(HB_COMPILER),msvcarm64),)
|
|
HB_CPU := arm64
|
|
else
|
|
ifneq ($(filter $(HB_COMPILER),msvcarm),)
|
|
HB_CPU := arm
|
|
else
|
|
HB_CPU := x86
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),wce)
|
|
ifneq ($(filter $(HB_COMPILER),msvcarm mingwarm poccarm),)
|
|
HB_CPU := arm
|
|
else
|
|
ifneq ($(filter $(HB_COMPILER),msvcmips),)
|
|
HB_CPU := mips
|
|
else
|
|
ifneq ($(filter $(HB_COMPILER),msvcsh),)
|
|
HB_CPU := sh
|
|
else
|
|
HB_CPU := x86
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
ifneq ($(filter $(HB_PLATFORM),dos os2),)
|
|
HB_CPU := x86
|
|
else
|
|
ifeq ($(HB_PLATFORM),linux)
|
|
HB_CPU := $(HB_HOST_CPU)
|
|
ifneq ($(filter $(HB_USER_CFLAGS),-m64),)
|
|
HB_CPU := x86_64
|
|
else
|
|
ifneq ($(filter $(HB_USER_CFLAGS),-m32),)
|
|
HB_CPU := x86
|
|
endif
|
|
endif
|
|
else
|
|
HB_CPU := $(HB_HOST_CPU)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_INIT_DONE),)
|
|
ifeq ($(HB_COMPILER),djgpp)
|
|
# NOTE: We do need DJGPP build of GNU Make on Windows
|
|
# systems. The reason is that this uses special
|
|
# trick to pass command-lines to other DJGPP tools
|
|
# (f.e. to gcc) to overcome 126 chars MS-DOS command
|
|
# line length limitation. IOW: mingw32-make.exe
|
|
# will not work with DJGPP on Windows hosts.
|
|
# [vszakats]
|
|
ifeq ($(HB_HOST_PLAT),win)
|
|
ifneq ($(HB_MAKE_PLAT),dos)
|
|
$(warning ! Warning: You should use DJGPP provided MS-DOS GNU Make on Windows hosts)
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_HOST_PLAT)-$(HB_MAKE_PLAT),win-dos)
|
|
$(warning ! Warning: You are using MS-DOS GNU Make executable on Windows host.)
|
|
$(warning ! Not recommended combination. Some features will be disabled.)
|
|
$(warning ! Please use the Windows build of GNU Make.)
|
|
endif
|
|
endif
|
|
$(info ! HB_PLATFORM: $(HB_PLATFORM)$(if $(HB_CPU), ($(HB_CPU)),) $(HB_PLAT_AUTO))
|
|
$(info ! HB_COMPILER: $(HB_COMPILER)$(HB_COMP_VERD) $(HB_COMP_AUTO))
|
|
endif
|
|
|
|
export HB_CPU
|
|
|
|
ifeq ($(HB_HOST_PKGM),)
|
|
ifeq ($(HB_PLATFORM),darwin)
|
|
ifneq ($(wildcard /usr/local/bin/brew),)
|
|
HB_HOST_PKGM += homebrew
|
|
endif
|
|
ifneq ($(wildcard /usr/local/bin/rudix),)
|
|
HB_HOST_PKGM += rudix
|
|
endif
|
|
ifneq ($(wildcard /opt/local/bin/port),)
|
|
HB_HOST_PKGM += macports
|
|
endif
|
|
ifneq ($(wildcard /sw/bin/fink),)
|
|
HB_HOST_PKGM += fink
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),linux)
|
|
ifneq ($(wildcard /etc/debian_version),)
|
|
HB_HOST_PKGM += deb
|
|
else
|
|
ifneq ($(wildcard /etc/gentoo-release),)
|
|
HB_HOST_PKGM += portage
|
|
else
|
|
HB_HOST_PKGM += rpm
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
export HB_HOST_PKGM
|
|
|
|
ifeq ($(HB_INIT_DONE),)
|
|
ifneq ($(HB_HOST_PKGM),)
|
|
$(info ! HB_HOST_PKGM: $(HB_HOST_PKGM))
|
|
endif
|
|
endif
|
|
|
|
# Reserve variables for local compiler flags. Makefiles
|
|
# should only modify these instead of HB_USER_* variables
|
|
# as these can have bad side effects (doubly added values)
|
|
# caused by recursive GNU Make runs.
|
|
# Notice that even single lib/bin builds will currently
|
|
# result in recursive runs, see rule 'descend'. [vszakats]
|
|
HB_CFLAGS :=
|
|
HB_LDFLAGS :=
|
|
HB_AFLAGS :=
|
|
HB_PRGFLAGS :=
|
|
|
|
# C flags passed when compiling to create static lib
|
|
HB_CFLAGS_STA :=
|
|
# C flags passed when compiling to create dynamic lib
|
|
HB_CFLAGS_DYN :=
|
|
|
|
CFLAGS :=
|
|
RCFLAGS :=
|
|
ARFLAGS :=
|
|
LDFLAGS :=
|
|
DFLAGS :=
|
|
|
|
HB_CROSS_BUILD :=
|
|
ifneq ($(HB_HOST_PLAT)$(HB_HOST_CPU),$(HB_PLATFORM)$(HB_CPU))
|
|
ifeq ($(HB_HOST_BIN),)
|
|
# Not required in these combinations: [vszakats]
|
|
# 'Same platform, x86_64 host, x86 target'
|
|
ifneq ($(HB_HOST_PLAT)-$(HB_HOST_CPU)-$(HB_CPU),$(HB_PLATFORM)-x86_64-x86)
|
|
# 'Windows x86 host, MS-DOS target'
|
|
ifneq ($(HB_HOST_PLAT)-$(HB_HOST_CPU)-$(HB_PLATFORM)-$(HB_CPU),win-x86-dos-x86)
|
|
# 'Windows host, Cygwin target'
|
|
ifneq ($(HB_HOST_PLAT)-$(HB_PLATFORM),win-cygwin)
|
|
HB_CROSS_BUILD := yes
|
|
# Try to auto-setup
|
|
ifneq ($(HB_SRC_ROOTPATH),)
|
|
_HB_ROOT_BIN := $(HB_SRC_ROOTPATH)
|
|
else
|
|
_HB_ROOT_BIN := $(TOP)$(ROOT)
|
|
endif
|
|
HB_HOST_BIN := $(dir $(firstword $(wildcard $(_HB_ROOT_BIN)bin/$(HB_HOST_PLAT)/*/harbour$(HB_HOST_BIN_EXT))))
|
|
ifneq ($(HB_HOST_BIN),)
|
|
ifeq ($(HB_SRC_ROOTPATH),)
|
|
HB_HOST_BIN := $(realpath $(HB_HOST_BIN))
|
|
endif
|
|
else
|
|
# Look in PATH
|
|
HB_HOST_BIN := $(dir $(call find_in_path,harbour))
|
|
endif
|
|
ifeq ($(HB_HOST_BIN),)
|
|
$(warning ! Warning: HB_HOST_BIN not specified. Could not find host native build.)
|
|
else
|
|
$(info ! HB_HOST_BIN not specified. Automatically set to: $(HB_HOST_BIN))
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
export HB_HOST_BIN
|
|
else
|
|
ifeq ($(HB_INIT_DONE),)
|
|
$(info ! HB_HOST_BIN: $(HB_HOST_BIN))
|
|
endif
|
|
HB_CROSS_BUILD := yes
|
|
endif
|
|
ifeq ($(HB_CROSS_BUILD),yes)
|
|
# Setup platform macros (undefine host, define target)
|
|
HB_PRGFLAGS += -undef:.ARCH.
|
|
ifeq ($(HB_PLATFORM),win)
|
|
HB_PRGFLAGS += -D__PLATFORM__WINDOWS
|
|
else
|
|
ifeq ($(HB_PLATFORM),wce)
|
|
HB_PRGFLAGS += -D__PLATFORM__WINDOWS -D__PLATFORM__WINCE
|
|
else
|
|
ifeq ($(HB_PLATFORM),dos)
|
|
HB_PRGFLAGS += -D__PLATFORM__DOS
|
|
else
|
|
ifeq ($(HB_PLATFORM),os2)
|
|
HB_PRGFLAGS += -D__PLATFORM__OS2
|
|
else
|
|
ifeq ($(HB_PLATFORM),linux)
|
|
HB_PRGFLAGS += -D__PLATFORM__LINUX -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),darwin)
|
|
HB_PRGFLAGS += -D__PLATFORM__DARWIN -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),bsd)
|
|
HB_PRGFLAGS += -D__PLATFORM__BSD -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),sunos)
|
|
HB_PRGFLAGS += -D__PLATFORM__SUNOS -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),hpux)
|
|
HB_PRGFLAGS += -D__PLATFORM__HPUX -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),beos)
|
|
HB_PRGFLAGS += -D__PLATFORM__BEOS -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),qnx)
|
|
HB_PRGFLAGS += -D__PLATFORM__QNX -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),android)
|
|
HB_PRGFLAGS += -D__PLATFORM__ANDROID -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),vxworks)
|
|
HB_PRGFLAGS += -D__PLATFORM__VXWORKS -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),symbian)
|
|
HB_PRGFLAGS += -D__PLATFORM__SYMBIAN -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),cygwin)
|
|
HB_PRGFLAGS += -D__PLATFORM__CYGWIN -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),minix)
|
|
HB_PRGFLAGS += -D__PLATFORM__MINIX -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),aix)
|
|
HB_PRGFLAGS += -D__PLATFORM__AIX -D__PLATFORM__UNIX
|
|
else
|
|
ifeq ($(HB_PLATFORM),wasm)
|
|
HB_PRGFLAGS += -D__PLATFORM__LINUX -D__PLATFORM__UNIX -D__PLATFORM__WASM
|
|
# NOTE: __PLATFORM__LINUX here definitely is a hack, remove
|
|
# if WASM platform settles more (it's currently emscripten oriented)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
ifneq ($(HB_HOST_CPU),$(HB_CPU))
|
|
ifneq ($(filter $(HB_CPU),x86 arm),)
|
|
HB_PRGFLAGS += -D__ARCH32BIT__
|
|
else
|
|
ifneq ($(filter $(HB_CPU),x86_64 ia64 sparc64 ppc64 arm64),)
|
|
# NOTE: MIPS64 is not yet distinctly recognized by the build system
|
|
HB_PRGFLAGS += -D__ARCH64BIT__
|
|
else
|
|
ifeq ($(HB_CPU),alpha)
|
|
# Alpha began as 64-bit CPU, only WinNT releases were limited to 32-bit
|
|
ifeq ($(HB_PLATFORM),win)
|
|
HB_PRGFLAGS += -D__ARCH32BIT__
|
|
else
|
|
HB_PRGFLAGS += -D__ARCH64BIT__
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
include $(TOP)$(ROOT)config/detect.mk
|
|
|
|
SYSLIBS :=
|
|
|
|
# Names of portable GT drivers
|
|
HB_GT_LIBS := \
|
|
gtcgi \
|
|
gtpca \
|
|
gtstd \
|
|
|
|
# Add GTs if dependency is available
|
|
ifneq ($(HB_HAS_CURSES),)
|
|
HB_GT_LIBS += gtcrs
|
|
endif
|
|
ifneq ($(HB_HAS_SLANG),)
|
|
HB_GT_LIBS += gtsln
|
|
endif
|
|
ifneq ($(HB_HAS_X11),)
|
|
HB_GT_LIBS += gtxwc
|
|
endif
|
|
|
|
ifneq ($(HB_PLATFORM),dos)
|
|
HB_PKGNAME := harbour
|
|
ifneq ($(HB_PLATFORM_UNIX),)
|
|
HB_VERSION := $(HB_VER_MAJOR).$(HB_VER_MINOR).$(HB_VER_RELEASE)
|
|
ifneq ($(HB_VER_STATUS),)
|
|
HB_VERSION := $(HB_VERSION)-$(HB_VER_STATUS)
|
|
endif
|
|
HB_PKGNAME := $(HB_PKGNAME)-$(HB_VERSION)
|
|
else
|
|
HB_VERSION := $(HB_VER_MAJOR).$(HB_VER_MINOR).$(HB_VER_RELEASE)$(HB_VER_STATUS)
|
|
HB_PKGNAME := $(HB_PKGNAME)-$(HB_VERSION)-$(HB_PLATFORM)-$(HB_COMPILER)
|
|
endif
|
|
HB_PKGNAMI := $(HB_PKGNAME)
|
|
else
|
|
# Use short names in MS-DOS
|
|
HB_VERSION := $(HB_VER_MAJOR)$(HB_VER_STATUS_SH)
|
|
HB_PKGNAME := hb$(HB_VERSION)
|
|
# Ugly solution
|
|
ifeq ($(HB_COMPILER),djgpp)
|
|
HB_PKGNAME := $(HB_PKGNAME)dj
|
|
else
|
|
ifeq ($(HB_COMPILER),watcom)
|
|
HB_PKGNAME := $(HB_PKGNAME)wa
|
|
endif
|
|
endif
|
|
HB_PKGNAMI := $(HB_PKGNAME)
|
|
endif
|
|
|
|
export HB_VERSION
|
|
export HB_PKGNAME
|
|
export HB_PKGNAMI
|
|
|
|
HB_INSTALL_PREFIX_ORI := $(HB_INSTALL_PREFIX)
|
|
ifeq ($(HB_BUILD_PKG),yes)
|
|
ifeq ($(HB_INIT_DONE),)
|
|
|
|
ifeq ($(HB_PLATFORM),darwin)
|
|
HB_BUILD_PKG_PREFIX := /usr/local
|
|
HB_SYSLOC := yes
|
|
else
|
|
ifeq ($(HB_PLATFORM),sunos)
|
|
HB_BUILD_PKG_PREFIX := /opt
|
|
HB_SYSLOC := yes
|
|
else
|
|
ifeq ($(HB_PLATFORM),beos)
|
|
HB_BUILD_PKG_PREFIX := /boot/common
|
|
HB_SYSLOC := yes
|
|
else
|
|
ifneq ($(HB_PLATFORM_UNIX),)
|
|
HB_BUILD_PKG_PREFIX := /usr/local
|
|
HB_SYSLOC := yes
|
|
else
|
|
HB_BUILD_PKG_PREFIX := /$(HB_PKGNAME)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# HB_TOP - dir where release packages will be
|
|
# created (root of Harbour source tree)
|
|
# HB_INSTALL_PKG_ROOT - dir which has to be packed
|
|
# HB_PKGNAME - name of the release package
|
|
# HB_INSTALL_PREFIX - dir where Harbour subdirectories will be created
|
|
#
|
|
# <HB_TOP><plat/comp ><HB_BUILD_PKG_PREFIX>
|
|
# <HB_INSTALL_PKG_ROOT>
|
|
# <HB_INSTALL_PREFIX >/bin
|
|
#
|
|
|
|
ifneq ($(HB_SRC_ROOTPATH),)
|
|
export HB_TOP := $(subst /,$(DIRSEP),$(HB_SRC_ROOTPATH))
|
|
HB_INSTALL_PREFIX := $(PKG_DIR)
|
|
else
|
|
export HB_TOP := $(subst /,$(DIRSEP),$(realpath $(TOP)$(ROOT)))
|
|
HB_INSTALL_PREFIX := $(abspath $(PKG_DIR))
|
|
endif
|
|
|
|
HB_INSTALL_PREFIX := $(subst /,$(DIRSEP),$(HB_INSTALL_PREFIX))
|
|
|
|
export HB_INSTALL_PKG_ROOT := $(HB_INSTALL_PREFIX)
|
|
|
|
HB_INSTALL_BIN :=
|
|
HB_INSTALL_INC :=
|
|
HB_INSTALL_LIB :=
|
|
HB_INSTALL_DYN :=
|
|
HB_INSTALL_DOC :=
|
|
HB_INSTALL_MAN :=
|
|
ifeq ($(HB_PLATFORM),darwin)
|
|
export HB_INSTALL_ETC := $(HB_INSTALL_PREFIX)$(DIRSEP)private$(DIRSEP)etc$(DIRSEP)harbour
|
|
else
|
|
HB_INSTALL_ETC :=
|
|
endif
|
|
|
|
HB_INSTALL_PREFIX := $(HB_INSTALL_PREFIX)$(subst /,$(DIRSEP),$(HB_BUILD_PKG_PREFIX))
|
|
endif
|
|
else
|
|
# Fill it automatically if not specified
|
|
ifeq ($(HB_INSTALL_PREFIX),)
|
|
|
|
ifeq ($(HB_PLATFORM),beos)
|
|
HB_INSTALL_PREFIX := /boot/common
|
|
else
|
|
ifeq ($(HB_PLATFORM_UNIX),)
|
|
# Do nothing. There was logic which set the install dir to
|
|
# the root of the source tree, but in practice it often caused
|
|
# build breakage because of old contrib headers being installed
|
|
# into central header dir and picked up instead of current ones
|
|
# inside contrib directories. Anyways with recent Harbour there
|
|
# no pressing need to use 'install', so I've removed this
|
|
# defaulting logic. [vszakats]
|
|
else
|
|
ifneq ($(PREFIX),)
|
|
HB_INSTALL_PREFIX := $(PREFIX)
|
|
else
|
|
ifneq ($(DESTDIR),)
|
|
HB_INSTALL_PREFIX := $(DESTDIR)
|
|
else
|
|
ifneq ($(HB_HOST_PLAT_UNIX),)
|
|
# Stick to *nix customs. I do not like it, it needs admin.
|
|
ifeq ($(HB_HOST_PLAT),darwin)
|
|
HB_INSTALL_PREFIX := /opt/harbour
|
|
else
|
|
HB_INSTALL_PREFIX := /usr/local
|
|
endif
|
|
# Add suffix for cross builds
|
|
ifneq ($(HB_HOST_PLAT),$(HB_PLATFORM))
|
|
HB_INSTALL_PREFIX := $(HB_INSTALL_PREFIX)/harbour-$(HB_PLATFORM)-$(HB_COMPILER)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
HB_INSTALL_PREFIX := $(subst /,$(DIRSEP),$(HB_INSTALL_PREFIX))
|
|
endif
|
|
|
|
export HB_INSTALL_PREFIX
|
|
|
|
ifeq ($(HB_INIT_DONE),)
|
|
ifneq ($(HB_INSTALL_PREFIX_ORI),$(HB_INSTALL_PREFIX))
|
|
$(info ! HB_INSTALL_PREFIX automatically set to: $(HB_INSTALL_PREFIX))
|
|
endif
|
|
ifeq ($(ROOT),./)
|
|
ifneq ($(wildcard .git),)
|
|
ifneq ($(call find_in_path,git),)
|
|
_tmp := $(shell git diff --name-only --quiet)
|
|
ifneq ($(_tmp),)
|
|
$(info ! === WARNING: Locally modified source code ===)
|
|
endif
|
|
_tmp := $(shell git rev-parse --short HEAD)
|
|
$(info ! GIT_REVISION: $(_tmp))
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(HB_SYSLOC),)
|
|
ifeq ($(HB_PLATFORM),beos)
|
|
ifneq ($(strip $(foreach dir,/boot/common /boot/system /boot/home/config $(subst :, ,$($(HB_LD_LIBRARY_PATH))),$(findstring |$(dir),|$(HB_INSTALL_PREFIX)))),)
|
|
HB_SYSLOC := yes
|
|
endif
|
|
else
|
|
ifneq ($(HB_PLATFORM_UNIX),)
|
|
ifneq ($(strip $(foreach dir,/usr/local/bin /usr/bin $(subst :, ,$($(HB_LD_LIBRARY_PATH))),$(findstring |$(dir),|$(HB_INSTALL_PREFIX)))),)
|
|
HB_SYSLOC := yes
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
export HB_SYSLOC
|
|
|
|
ifneq ($(HB_INSTALL_PREFIX),)
|
|
|
|
ifeq ($(HB_BUILD_SHARED),)
|
|
ifneq ($(HB_PLATFORM_UNIX),)
|
|
ifeq ($(HB_SYSLOC),yes)
|
|
export HB_BUILD_SHARED := yes
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
LIBSUFFIX :=
|
|
INCSUFFIX :=
|
|
ifeq ($(HB_PLATFORM),beos)
|
|
ifeq ($(HB_SYSLOC),yes)
|
|
LIBSUFFIX := $(DIRSEP)harbour
|
|
INCSUFFIX := $(DIRSEP)harbour
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM_UNIX),)
|
|
LIBSUFFIX := $(DIRSEP)$(subst /,$(DIRSEP),$(PLAT_COMP))
|
|
else
|
|
LIBSUFFIX :=
|
|
# Use 'lib64' instead of 'lib' for 64-bit targets where lib64 dir exists
|
|
ifneq ($(wildcard $(HB_INSTALL_PREFIX)$(DIRSEP)lib64),)
|
|
ifneq ($(filter $(HB_CPU),x86_64),)
|
|
LIBSUFFIX := 64
|
|
endif
|
|
endif
|
|
# Not perfect, please enhance it.
|
|
ifneq ($(findstring |/usr,|$(HB_INSTALL_PREFIX)),)
|
|
ifeq ($(findstring |/usr/home,|$(HB_INSTALL_PREFIX)),)
|
|
LIBSUFFIX := $(LIBSUFFIX)$(DIRSEP)harbour
|
|
INCSUFFIX := $(DIRSEP)harbour
|
|
endif
|
|
else
|
|
ifneq ($(findstring |/opt,|$(HB_INSTALL_PREFIX)),)
|
|
LIBSUFFIX := $(LIBSUFFIX)$(DIRSEP)harbour
|
|
INCSUFFIX := $(DIRSEP)harbour
|
|
else
|
|
LIBSUFFIX :=
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# Standard name: BINDIR
|
|
ifeq ($(HB_INSTALL_BIN),)
|
|
export HB_INSTALL_BIN := $(HB_INSTALL_PREFIX)$(DIRSEP)bin
|
|
endif
|
|
# Standard name: LIBDIR
|
|
ifeq ($(HB_INSTALL_LIB),)
|
|
export HB_INSTALL_LIB := $(HB_INSTALL_PREFIX)$(DIRSEP)lib$(LIBSUFFIX)
|
|
endif
|
|
ifeq ($(HB_INSTALL_DYN),)
|
|
ifeq ($(HB_PLATFORM_UNIX),)
|
|
export HB_INSTALL_DYN := $(HB_INSTALL_BIN)
|
|
else
|
|
ifeq ($(HB_PLATFORM),cygwin)
|
|
export HB_INSTALL_DYN := $(HB_INSTALL_BIN)
|
|
else
|
|
export HB_INSTALL_DYN := $(HB_INSTALL_LIB)
|
|
endif
|
|
endif
|
|
endif
|
|
# Standard name: INCLUDEDIR
|
|
ifeq ($(HB_INSTALL_INC),)
|
|
export HB_INSTALL_INC := $(HB_INSTALL_PREFIX)$(DIRSEP)include$(INCSUFFIX)
|
|
endif
|
|
# Standard name: DOCDIR
|
|
ifeq ($(HB_INSTALL_DOC),)
|
|
ifeq ($(HB_PLATFORM_UNIX),)
|
|
export HB_INSTALL_DOC := $(HB_INSTALL_PREFIX)$(DIRSEP)doc
|
|
else
|
|
export HB_INSTALL_DOC := $(HB_INSTALL_PREFIX)$(DIRSEP)share$(DIRSEP)doc$(DIRSEP)harbour
|
|
endif
|
|
endif
|
|
# Standard name: MANDIR
|
|
ifeq ($(HB_INSTALL_MAN),)
|
|
# Do not set man dir for non-*nix targets
|
|
ifneq ($(HB_PLATFORM_UNIX),)
|
|
ifeq ($(HB_SYSLOC),yes)
|
|
export HB_INSTALL_MAN := $(HB_INSTALL_PREFIX)$(DIRSEP)share$(DIRSEP)man
|
|
endif
|
|
endif
|
|
endif
|
|
# Standard name: ETCDIR
|
|
ifeq ($(HB_INSTALL_ETC),)
|
|
# Do not set doc dir for non-*nix targets
|
|
ifneq ($(HB_PLATFORM_UNIX),)
|
|
ifeq ($(HB_PLATFORM),darwin)
|
|
export HB_INSTALL_ETC := $(HB_INSTALL_PREFIX)$(DIRSEP)private$(DIRSEP)etc$(DIRSEP)harbour
|
|
else
|
|
export HB_INSTALL_ETC := $(HB_INSTALL_PREFIX)$(DIRSEP)etc$(DIRSEP)harbour
|
|
endif
|
|
endif
|
|
endif
|
|
ifeq ($(HB_INSTALL_CONTRIB),)
|
|
ifeq ($(HB_PLATFORM_UNIX),)
|
|
export HB_INSTALL_CONTRIB := $(HB_INSTALL_PREFIX)$(DIRSEP)contrib
|
|
else
|
|
ifneq ($(findstring |/opt/harbour,|$(HB_INSTALL_PREFIX)),)
|
|
export HB_INSTALL_CONTRIB := $(HB_INSTALL_PREFIX)$(DIRSEP)contrib
|
|
else
|
|
export HB_INSTALL_CONTRIB := $(HB_INSTALL_PREFIX)$(DIRSEP)share$(DIRSEP)harbour$(DIRSEP)contrib
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
# Require HB_INSTALL_PREFIX on non-*nix when install is used,
|
|
# so that obligatory supplement files (like LICENSE.txt) are always
|
|
# copied to install destination.
|
|
ifneq ($(filter install,$(HB_MAKECMDGOALS)),)
|
|
ifeq ($(HB_PLATFORM_UNIX),)
|
|
$(error ! Please set HB_INSTALL_PREFIX and try again. For more information: see README.md)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
export HB_OBJ_DIR := $(subst /,$(DIRSEP),$(OBJ_DIR))
|
|
|
|
ifeq ($(HB_HOST_BIN),)
|
|
HB_HOST_BIN_DIR := $(BIN_DIR)
|
|
else
|
|
HB_HOST_BIN_DIR := $(HB_HOST_BIN)
|
|
endif
|
|
|
|
ifeq ($(HB_HOST_INC),)
|
|
HB_HOST_INC := $(TOP)$(ROOT)include
|
|
endif
|
|
|
|
ifeq ($(HB_INIT_DONE),)
|
|
ifneq ($(HB_BUILD_DYN),no)
|
|
|
|
HB_DYNLIB_PLOC :=
|
|
HB_DYNLIB_POST :=
|
|
HB_DYNLIB_PEXT :=
|
|
HB_DYNLIB_POSC :=
|
|
HB_DYNLIB_PEXC :=
|
|
|
|
ifneq ($(filter $(HB_PLATFORM),win wce cygwin),)
|
|
|
|
# harbour-xy[-subtype][.dll|.lib]
|
|
|
|
HB_DYNLIB_PLOC := -$(HB_VER_MAJOR)$(HB_VER_MINOR)
|
|
|
|
ifeq ($(HB_PLATFORM),win)
|
|
ifeq ($(HB_COMPILER),bcc)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-bcc
|
|
else
|
|
ifeq ($(HB_CPU),x86_64)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-x64
|
|
else
|
|
ifeq ($(HB_CPU),arm64)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-arm64
|
|
else
|
|
ifeq ($(HB_CPU),arm)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-arm
|
|
else
|
|
ifeq ($(HB_CPU),ia64)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-ia64
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
ifeq ($(HB_PLATFORM),wce)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-wce
|
|
ifeq ($(HB_CPU),arm)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-arm
|
|
else
|
|
ifeq ($(HB_CPU),x86)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-x86
|
|
else
|
|
ifeq ($(HB_CPU),mips)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-mips
|
|
else
|
|
ifeq ($(HB_CPU),sh)
|
|
HB_DYNLIB_PLOC := $(HB_DYNLIB_PLOC)-sh
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
else
|
|
ifneq ($(filter $(HB_PLATFORM),dos os2),)
|
|
# harbour[.dll|.???]
|
|
else
|
|
HB_DYN_VERCPT := $(HB_VER_MAJOR).$(HB_VER_MINOR)
|
|
HB_DYN_VER := $(HB_VER_MAJOR).$(HB_VER_MINOR).$(HB_VER_RELEASE)
|
|
|
|
ifeq ($(HB_PLATFORM),darwin)
|
|
# libharbour.2.1.0.dylib
|
|
# libharbour.2.1.dylib ->
|
|
# libharbour.dylib ->
|
|
HB_DYNLIB_POST := .$(HB_DYN_VER)
|
|
HB_DYNLIB_POSC := .$(HB_DYN_VERCPT)
|
|
else
|
|
ifneq ($(HB_PLATFORM),android)
|
|
# libharbour.s?.2.1.0
|
|
# libharbour.s?.2.1 ->
|
|
# libharbour.s? ->
|
|
HB_DYNLIB_PEXT := .$(HB_DYN_VER)
|
|
HB_DYNLIB_PEXC := .$(HB_DYN_VERCPT)
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
export HB_DYNLIB_POST
|
|
export HB_DYNLIB_PEXT
|
|
export HB_DYNLIB_POSC
|
|
export HB_DYNLIB_PEXC
|
|
|
|
export HB_DYNLIB_BASE := harbour$(HB_DYNLIB_PLOC)
|
|
|
|
ifeq ($(__HB_BUILD_DYN_2ND),yes)
|
|
export HB_DYNLIB_BASE_2ND := harbour2$(HB_DYNLIB_PLOC)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
CXX :=
|
|
CC_DIRSEPFROM :=
|
|
CC_DIRSEPTO :=
|
|
|
|
# export some variables to eliminate repeated setting in recursive calls
|
|
export HB_HOST_PLAT
|
|
export HB_HOST_CPU
|
|
export HB_HOST_BIN_DIR
|
|
export HB_HOST_BIN_EXT
|
|
|
|
# clear these options for an unambiguous Harbour environment
|
|
export HARBOUR :=
|
|
export HARBOURCMD :=
|
|
export CLIPPER :=
|
|
export CLIPPERCMD :=
|
|
|
|
# relevant only on non-*nix hosts where --print-directory is on by default
|
|
ifeq ($(findstring w,$(MAKEFLAGS)),)
|
|
MKFLAGS := --no-print-directory
|
|
endif
|
|
|
|
export HB_INIT_DONE := yes
|
|
|
|
include $(TOP)$(ROOT)config/$(HB_PLATFORM)/global.mk
|
|
include $(TOP)$(ROOT)config/globsh.mk
|
|
|
|
export HB_DYNLIB_EXT := $(DYN_EXT)
|
|
export HB_DYNLIB_DIR := $(DYN_DIR)
|
|
export HB_DYNLIB_PREF := $(DYN_PREF)
|
|
|
|
endif # GLOBAL_MK_
|