+ config/wasm/global.mk
+ config/wasm/libs.mk
+ config/wasm/emcc.mk
* utils/hbmk2/hbmk2.prg
* contrib/hbrun/hbrun.hbp
+ add basic support for build Harbour into JS/WebAssembly using
emscripten, using these settings:
HB_PLATFORM=wasm HB_COMPILER=emcc HB_BUILD_3RDEXT=no
* {abstr} is now a hbmk2 keyword to possibly group all
toolsets similar in flavour: WASI/clang, JS/emscripten
These most likely will be targeting plaforms which are not
full operating-systems, they are also commonly qualified as
sandbox solutions.
* introduced __PLATFORM__WASM and __PLATFORM__ABSTRACT .prg defines
* utils/hbmk2/hbmk2.prg
+ allow to specify hb_ProgName() value at build-time for platforms
where the function cannot return a meaningful value (f.e.
JS/WebAssembly)
; TODO: Add support for passing hb_ProgName() value command-line
parameter, f.e. `--hb:self=hbrun`
* config/global.mk
* include/hbsetup.h
* consider abstract/emscripten targets similar to linux-like
* src/rtl/arc4.c
! fix to build under emscripten (which is assumed to be a
linux-like environment)
; though platform/compiler names are not currently compatible
with origin, this WebAssembly platform support was guided by
Harbour 3.4:
2017-06-09 01:10 UTC Viktor Szakats (vszakats users.noreply.github.com)
as usual Viktor was here before, many thanks!
; example project, how to make a multi-platform GUI application which
also targets WebAssembly, can be found here:
https://github.com/alcz/harbour-cimgui-sokol-starterkit/
2235 lines
81 KiB
Makefile
2235 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
|
|
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),)
|
|
HB_PRGFLAGS += -D__ARCH64BIT__
|
|
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_
|