.PHONY: all clean realclean distclean emptyoutput prepinstall actualinstall install copyonlyinstall uninstall troubleshoot outputdirs bootstrap deps ecere ecerecom ecerevanilla ear compiler prepbinaries epj2make ide documentor eda prepcodeguard codeguard
.SILENT:
-include include.mk
+include crossplatform.mk
+include default.cf
+
+XBOOT := $(if $(CROSS_TARGET),GCC_PREFIX= TARGET_PLATFORM=$(HOST_PLATFORM) PLATFORM=$(HOST_PLATFORM),)
LIBVER := .0.44
-ifdef WINDOWS
+ifdef WINDOWS_HOST
+HOST_SOV := $(HOST_SO)
+else
+HOST_SOV := $(HOST_SO)$(LIBVER)
+endif
+
+ifdef WINDOWS_TARGET
SOV := $(SO)
endif
-else # WINDOWS
+else # WINDOWS_TARGET
SOV := $(SO)$(LIBVER)
ifndef LIBDIR
ifeq "$(HOSTTYPE)" "x86_64"
export LIBDIR=$(DESTDIR)$(prefix)/lib32
+export PREFIXLIBDIR=$(prefix)/lib32
else
export LIBDIR=$(DESTDIR)$(prefix)/lib
+export PREFIXLIBDIR=$(prefix)/lib
endif
endif
OBJDIR := obj$(OBJALT)/
OBJBINDIR := $(OBJDIR)$(PLATFORM)/bin/
OBJLIBDIR := $(OBJDIR)$(PLATFORM)/lib/
+XOBJDIR := obj$(OBJALT)/
+XOBJBINDIR := $(OBJDIR)$(HOST_PLATFORM)/bin/
+XOBJLIBDIR := $(OBJDIR)$(HOST_PLATFORM)/lib/
all: prepbinaries ide epj2make documentor eda codeguard
@$(call echo,The Ecere SDK is fully built.)
$(if $(wildcard $(OBJDIR)),,$(call mkdirq,$(OBJDIR)))
$(if $(wildcard $(OBJBINDIR)),,$(call mkdirq,$(OBJBINDIR)))
$(if $(wildcard $(OBJLIBDIR)),,$(call mkdirq,$(OBJLIBDIR)))
+ifdef CROSS_TARGET
+ $(if $(wildcard $(XOBJDIR)),,$(call mkdirq,$(XOBJDIR)))
+ $(if $(wildcard $(XOBJBINDIR)),,$(call mkdirq,$(XOBJBINDIR)))
+ $(if $(wildcard $(XOBJLIBDIR)),,$(call mkdirq,$(XOBJLIBDIR)))
+endif
bootstrap: outputdirs
- cd compiler && $(MAKE) bootstrap
+ cd compiler && $(MAKE) $(XBOOT) bootstrap
deps:
+ifdef CROSS_TARGET
+ @$(call echo,Building dependencies (host)...)
+ cd deps && $(MAKE) $(XBOOT)
+endif
@$(call echo,Building dependencies...)
cd deps && $(MAKE)
ecere: bootstrap deps
+ifdef CROSS_TARGET
+ @$(call echo,Building 2nd stage ecere (host)...)
+else
@$(call echo,Building 2nd stage ecere...)
- cd ecere && $(MAKE) nores
- cd ear && $(MAKE) nores
+endif
+ cd ecere && $(MAKE) nores $(XBOOT)
+ cd ear && $(MAKE) nores $(XBOOT)
cd ecere && $(MAKE) cleantarget
+ifdef CROSS_TARGET
+ @$(call echo,Building 2nd stage ecere...)
+endif
cd ecere && $(MAKE)
ecerecom: bootstrap
+ifdef CROSS_TARGET
+ @$(call echo,Building eC Core Runtime (host)...)
+ cd ecere && $(MAKE) -f Makefile.ecereCOM $(XBOOT)
+endif
@$(call echo,Building eC Core Runtime...)
cd ecere && $(MAKE) -f Makefile.ecereCOM
cd ear && $(MAKE)
compiler: ecere ear
+ifdef CROSS_TARGET
+ @$(call echo,Building 2nd stage compiler (host))
+ cd compiler && $(MAKE) $(XBOOT)
+endif
@$(call echo,Building 2nd stage compiler)
cd compiler && $(MAKE)
prepbinaries: compiler ecerecom
@$(call echo,Enabling 2nd stage binaries...)
-ifdef WINDOWS
+ifdef WINDOWS_TARGET
$(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJBINDIR))
$(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJBINDIR))
$(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJBINDIR))
endif
-ifdef LINUX
+ifdef LINUX_TARGET
$(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJLIBDIR))
$(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJLIBDIR))
$(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJLIBDIR))
ln -sf $(LP)ecereCOM$(SOV) $(OBJLIBDIR)$(LP)ecereCOM$(SO)
ln -sf $(LP)ec$(SOV) $(OBJLIBDIR)$(LP)ec$(SO)
endif
-ifndef WINDOWS
-ifndef LINUX
+ifndef WINDOWS_TARGET
+ifndef LINUX_TARGET
$(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJLIBDIR))
$(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJLIBDIR))
$(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJLIBDIR))
$(call cpq,compiler/ecp/obj/release.$(PLATFORM)/ecp$(E),$(OBJBINDIR))
$(call cpq,compiler/ecs/obj/release.$(PLATFORM)/ecs$(E),$(OBJBINDIR))
+ifdef CROSS_TARGET
+
+ifdef WINDOWS_HOST
+ $(call cpq,ecere/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ecere$(HOST_SOV),$(XOBJBINDIR))
+ $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)/$(HOST_LP)ecereCOM$(HOST_SOV),$(XOBJBINDIR))
+ $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ec$(HOST_SOV),$(XOBJBINDIR))
+endif
+ifdef WINDOWS_HOST
+ $(call cpq,ecere/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ecere$(HOST_SOV),$(XOBJLIBDIR))
+ $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)/$(HOST_LP)ecereCOM$(HOST_SOV),$(XOBJLIBDIR))
+ $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ec$(HOST_SOV),$(XOBJLIBDIR))
+ ln -sf $(HOST_LP)ecere$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecere$(HOST_SO).0
+ ln -sf $(HOST_LP)ecereCOM$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecereCOM$(HOST_SO).0
+ ln -sf $(HOST_LP)ec$(HOST_SOV) $(XOBJLIBDIR)$(LP)ec$(HOST_SO).0
+ ln -sf $(HOST_LP)ecere$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecere$(HOST_SO)
+ ln -sf $(HOST_LP)ecereCOM$(HOST_SOV) $(XOBJLIBDIR)$(LP)ecereCOM$(HOST_SO)
+ ln -sf $(HOST_LP)ec$(HOST_SOV) $(XOBJLIBDIR)$(LP)ec$(HOST_SO)
+endif
+ifndef WINDOWS_HOST
+ifndef LINUX_HOST
+ $(call cpq,ecere/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ecere$(HOST_SO),$(XOBJLIBDIR))
+ $(call cpq,ecere/obj/ecereCOM.release.$(HOST_PLATFORM)/$(HOST_LP)ecereCOM$(HOST_SO),$(XOBJLIBDIR))
+ $(call cpq,compiler/libec/obj/release.$(HOST_PLATFORM)/$(HOST_LP)ec$(HOST_SO),$(XOBJLIBDIR))
+endif
+endif
+ $(call cpq,ear/cmd/obj/release.$(HOST_PLATFORM)/ear$(HOST_E),$(XOBJBINDIR))
+ $(call cpq,compiler/ecc/obj/release.$(HOST_PLATFORM)/ecc$(HOST_E),$(XOBJBINDIR))
+ $(call cpq,compiler/ecp/obj/release.$(HOST_PLATFORM)/ecp$(HOST_E),$(XOBJBINDIR))
+ $(call cpq,compiler/ecs/obj/release.$(HOST_PLATFORM)/ecs$(HOST_E),$(XOBJBINDIR))
+
+endif
+
epj2make: prepbinaries
@$(call echo,Building epj2make...)
cd epj2make && $(MAKE)
prepcodeguard: eda
ifdef CodeGuard
-ifdef WINDOWS
+ifdef WINDOWS_TARGET
$(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJBINDIR))
endif
-ifdef LINUX
+ifdef LINUX_TARGET
$(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SOV),$(OBJLIBDIR))
ln -sf $(LP)EDA$(SOV) $(OBJLIBDIR)$(LP)EDA$(SO).0
ln -sf $(LP)EDA$(SOV) $(OBJLIBDIR)$(LP)EDA$(SO)
endif
-ifndef WINDOWS
-ifndef LINUX
+ifndef WINDOWS_TARGET
+ifndef LINUX_TARGET
$(call cpq,eda/libeda/obj/release.$(PLATFORM)/$(LP)EDA$(SO),$(OBJLIBDIR))
endif
endif
ifdef EDASQLiteCipher
$(call rmq,$(SODESTDIR)$(LP)EDASQLiteCipher$(SO))
endif
-ifdef LINUX
+ifdef LINUX_TARGET
$(call rmq,$(SODESTDIR)$(LP)ecere$(SO).0)
$(call rmq,$(SODESTDIR)$(LP)ecereCOM$(SO).0)
$(call rmq,$(SODESTDIR)$(LP)ec$(SO).0)
# Binaries (always in $(OBJBINDIR)) and Static Libraries (always in $(OBJLIBDIR))
prepinstall: $(DOC) $(BINARIES) outputdirs
-ifdef WINDOWS
+ifdef WINDOWS_TARGET
$(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJBINDIR))
$(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJBINDIR))
$(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJBINDIR))
endif
endif
-ifdef LINUX
+ifdef LINUX_TARGET
$(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SOV),$(OBJLIBDIR))
$(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SOV),$(OBJLIBDIR))
$(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SOV),$(OBJLIBDIR))
endif
endif
-ifndef WINDOWS
-ifndef LINUX
+ifndef WINDOWS_TARGET
+ifndef LINUX_TARGET
$(call cpq,ecere/obj/release.$(PLATFORM)/$(LP)ecere$(SO),$(OBJLIBDIR))
$(call cpq,ecere/obj/ecereCOM.release.$(PLATFORM)/$(LP)ecereCOM$(SO),$(OBJLIBDIR))
$(call cpq,compiler/libec/obj/release.$(PLATFORM)/$(LP)ec$(SO),$(OBJLIBDIR))
@$(call echo,The Ecere SDK has been installed. copyonlyinstall.)
actualinstall:
-ifdef WINDOWS
+ifdef WINDOWS_TARGET
$(call mkdirq,"$(BINDIR)/")
$(call mkdirq,"$(SLIBDIR)/")
$(call mkdirq,"$(DOCDIR)/")
$(call cpq,doc/EDA.eCdoc,"$(DOCDIR)/")
endif
-ifdef OSX
+ifdef OSX_TARGET
install $(OBJLIBDIR)$(LP)ecere$(SO) $(LIBDIR)/
install $(OBJLIBDIR)$(LP)ecereCOM$(SO) $(LIBDIR)/
install $(OBJLIBDIR)$(LP)ec$(SO) $(LIBDIR)/
cp -pRf extras/* $(EXTRASDIR)
endif
-ifndef OSX
-ifndef WINDOWS
-ifdef LINUX
+ifndef OSX_TARGET
+ifndef WINDOWS_TARGET
+ifdef LINUX_TARGET
install -D $(OBJLIBDIR)$(LP)ecere$(SOV) $(LIBDIR)/$(LP)ecere$(SOV)
install -D $(OBJLIBDIR)$(LP)ecereCOM$(SOV) $(LIBDIR)/$(LP)ecereCOM$(SOV)
install -D $(OBJLIBDIR)$(LP)ec$(SOV) $(LIBDIR)/$(LP)ec$(SOV)
ln -sf $(LP)EDA$(SOV) $(LIBDIR)/$(LP)EDA$(SO)
ln -sf $(LP)EDASQLite$(SOV) $(LIBDIR)/$(LP)EDASQLite$(SO)
mkdir -p -m 777 $(DESTDIR)$(prefix)/lib/ec
- ln -sf $(LIBDIR)/$(LP)ecere$(SOV) $(prefix)/lib/ec/$(LP)ecere$(SO)
- ln -sf $(LIBDIR)/$(LP)ecereCOM$(SOV) $(prefix)/lib/ec/$(LP)ecereCOM$(SO)
- ln -sf $(LIBDIR)/$(LP)ec$(SOV) $(prefix)/lib/ec/$(LP)ec$(SO)
- ln -sf $(LIBDIR)/$(LP)EDA$(SOV) $(prefix)/lib/ec/$(LP)EDA$(SO)
- ln -sf $(LIBDIR)/$(LP)EDASQLite$(SOV) $(prefix)/lib/ec/$(LP)EDASQLite$(SO)
+ ln -sf $(PREFIXLIBDIR)/$(LP)ecere$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)ecere$(SO)
+ ln -sf $(PREFIXLIBDIR)/$(LP)ecereCOM$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)ecereCOM$(SO)
+ ln -sf $(PREFIXLIBDIR)/$(LP)ec$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)ec$(SO)
+ ln -sf $(PREFIXLIBDIR)/$(LP)EDA$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)EDA$(SO)
+ ln -sf $(PREFIXLIBDIR)/$(LP)EDASQLite$(SOV) $(DESTDIR)$(prefix)/lib/ec/$(LP)EDASQLite$(SO)
ifdef EDASQLiteCipher
ln -sf $(LP)EDASQLiteCipher$(SOV) $(LIBDIR)/$(LP)EDASQLiteCipher$(SO)
endif
mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-dev
ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-dev/
mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-extras
- ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-extras/
+ cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-extras/
mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-samples
- ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-samples/
+ cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-samples/
mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/ecere-sdk
- ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-sdk/
+ cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/ecere-sdk/
mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libec0
ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libec0/
mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libecerecom0
- ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libecerecom0/
+ cp $(DESTDIR)$(prefix)/share/doc/libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libecerecom0/
mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libeda0
ln -sf ../libecere0/changelog.gz $(DESTDIR)$(prefix)/share/doc/libeda0/
mkdir -p -m 777 $(DESTDIR)$(prefix)/share/doc/libedasqlite0
$(call rmq,"$(DOCDIR)/ecere.eCdoc")
$(call rmq,"$(DOCDIR)/ecereCOM.eCdoc")
$(call rmq,"$(DOCDIR)/EDA.eCdoc")
-ifdef LINUX
+ifdef LINUX_TARGET
$(call rmq,"$(LIBDIR)/$(LP)ecere$(SO).0")
$(call rmq,"$(LIBDIR)/$(LP)ecereCOM$(SO).0")
$(call rmq,"$(LIBDIR)/$(LP)ec$(SO).0")
$(call rmdirq,"$(LIBDIR)/")
$(call rmdirq,"$(SLIBDIR)/")
$(call rmdirq,"$(DOCDIR)/")
-ifdef WINDOWS
+ifdef WINDOWS_TARGET
$(call rmdirq,"$(DESTDIR)/")
endif
@$(call echo,The Ecere SDK has been uninstalled.)
troubleshoot:
@$(call echo,Printing values of some variables.)
+ @$(call echo,HOST_PLATFORM=$(HOST_PLATFORM))
+ @$(call echo,TARGET_PLATFORM=$(HOST_PLATFORM))
+ @$(call echo,PLATFORM=$(PLATFORM))
+ @$(call echo,LINUX_HOST=$(LINUX_HOST))
+ @$(call echo,LINUX_TARGET=$(LINUX_TARGET))
+ @$(call echo,OSX_HOST=$(OSX_HOST))
+ @$(call echo,OSX_TARGET=$(OSX_TARGET))
+ @$(call echo,WINDOWS_HOST=$(WINDOWS_HOST))
+ @$(call echo,WINDOWS_TARGET=$(WINDOWS_TARGET))
+ @$(call echo,BSD_HOST=$(BSD_HOST))
+ @$(call echo,BSD_TARGET=$(BSD_TARGET))
@$(call echo,CCACHE=$(CCACHE))
@$(call echo,CCACHE_COMPILE=$(CCACHE_COMPILE))
@$(call echo,CCACHE_PREFIX=$(CCACHE_PREFIX))
@$(call echo,DISTCC=$(DISTCC))
+ @$(call echo,GCC_PREFIX=$(GCC_PREFIX))
@$(call echo,CC=$(CC))
@$(call echo,CPP=$(CPP))
@$(call echo,ECP=$(ECP))