diff Makefile @ 1:e78566595089

initial import
author mandel
date Mon, 11 May 2009 16:01:50 +0000
parents
children e747af2e6b46
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Mon May 11 16:01:50 2009 +0000
@@ -0,0 +1,210 @@
+## TODO: CPP_SHARED is very experemental on posix.
+## TODO: "make clean" don`t work as expected.
+## TODO: add target "install"
+## TODO: delete 'lib' prefix from output library name under windows.
+
+## Read variable from shell.
+export QTDIR
+export QTDIR_INC
+export QTDIR_LIB
+## End. Read variable from shell.
+
+## Try identify system.
+ifeq ($(MAKE), mingw32-make) # TODO: add another system.
+SYSTEM = windows
+endif
+ifndef SYSTEM
+SYSTEM = posix
+endif
+## End, Try identify system.
+
+## Load system specify settings.
+include build/$(SYSTEM).makefile
+
+## Main settings.
+## D compiler.
+ifndef $(DC)
+DC = dmd
+endif
+## C++ compiler.
+ifndef $(CC)
+CC = g++
+endif
+## Archiver.
+ifndef $(AR)
+AR = ar
+endif
+## Set default target.
+ifndef $(BUILD_TYPE)
+BUILD_TYPE = release
+endif
+
+## Tmp path.
+ifndef $(TMP_PATH)
+TMP_PATH_ = tmp
+TMP_PATH = $(TMP_PATH_)$(SL)$(BUILD_TYPE)
+endif
+## Output path.
+ifndef $(OUTPUT_PATH)
+OUTPUT_PATH = lib
+endif
+## Prefix for lib name.
+ifndef $(NAME_PREFIX)
+NAME_PREFIX = qtd
+endif
+ifndef $(PACKAGES)
+PACKAGES = core gui
+endif
+LIB_PREFIX = lib
+CC_INCLUDE += include $(QTDIR_INC) $(QTDIR_INC)$(SL)Qt $(QTDIR_INC)$(SL)QtCore $(QTDIR_INC)$(SL)QtGui $(QTDIR_INC)$(SL)QtOpenGL $(QTDIR_INC)$(SL)QtSvg
+D_INCLUDE +=
+CC_LFLAGS += -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads
+CC_CFLAGS +=
+D_CFLAGS +=
+CC_LIB_PATH += $(QTDIR_LIB) $(TMP_PATH)
+D_LIB_PATH += $(TMP_PATH)
+
+## D target
+ifndef D_TARGET
+D_TARGET = d1-tango
+endif
+ifeq ($(D_TARGET), d1-tango)
+D_VERSION = 1
+else
+D_VERSION = 2
+endif
+
+#End. Main settings.
+
+## Flags for debug version.
+ifeq ($(BUILD_TYPE), debug)
+CC_CFLAGS += -O0
+D_CFLAGS += -debug -g -gc
+LIB_POSTFIX = d
+else ifeq ($(BUILD_TYPE), release)
+## End. Flags for debug version.
+## Flags for release version
+CC_CFLAGS += -O
+D_CFLAGS += -O -release -inline
+endif
+## End. Flags for release version.
+
+## Load classes list.
+## param 1 - package name.
+define MODULE_template
+    include build/$(1).makefile
+    qt_$(1)_lib_name = $$(qt_$(1)_name)$(QT_LIB_POSTFIX)
+    $(1)_cpp_files += $$($(1)_classes:%=cpp/qt_$(1)/%_shell.cpp)
+    $(1)_cpp_obj_files = $$($(1)_cpp_files:cpp/%.cpp=$(TMP_PATH)/%.o)
+    $(1)_d_files += $$($(1)_classes:%=qt/$(1)/%.d)
+endef
+$(foreach package,$(PACKAGES),$(eval $(call MODULE_template,$(package))))
+## End. Load classes list
+
+## DMD compile template bug fix
+ifeq ($(DC), dmd)
+NOT_SEPARATE_D_OBJ = true
+endif
+
+
+## CPP_SHARED options.
+ifeq ($(CPP_SHARED), true)
+CC_CFLAGS += -DCPP_SHARED
+GEN_OPT   += --cpp_shared
+endif
+## End. CPP_SHARED options.
+
+all: dgen build
+
+windows:
+	$(MAKE) SYSTEM=windows
+
+posix:
+	$(MAKE) SYSTEM=posix
+
+release: all
+
+debug:
+	$(MAKE) BUILD_TYPE=debug
+
+build: mkdir $(PACKAGES)
+
+## DGenerator
+make_gen:
+	cd generator && qmake && $(MAKE)
+
+dgen:  make_gen
+	cd generator && $(GEN) $(GEN_OPT) --d-target=$(D_TARGET) --output-directory=../ qtjambi_masterinclude.h build_opengl.txt
+## DGenerator ## end
+
+mkdir:
+	@$(MKDIR) $(TMP_PATH_)
+	@$(MKDIR) $(TMP_PATH)
+	@$(MKDIR) $(TMP_PATH)$(SL)qt_qtd
+	@$(MKDIR) $(TMP_PATH)$(SL)qtd
+	@$(MKDIR) $(OUTPUT_PATH)
+
+## Build cpp files.
+$(TMP_PATH)/%.o: cpp/%.cpp
+	$(CC) $(CC_CFLAGS) $(CC_INCLUDE:%=-I%) -c $(@:$(TMP_PATH)/%.o=cpp/%.cpp) -o$@
+
+## Build d files.
+$(TMP_PATH)/%_d.o: qt/%.d
+	$(DC) $(D_CFLAGS) -c $(@:$(TMP_PATH)/%_d.o=qt/%.d) -of$@
+
+## Build package.
+## param 1 - package name.
+define BUILD_template
+    ## mkdir
+    mkdir_$(1):
+	    @$(MKDIR) $(TMP_PATH)$(SL)qt_$(1)
+	    @$(MKDIR) $(TMP_PATH)$(SL)$(1)
+    ## End. mkdir
+    ## Build d part.
+    ifeq ($(NOT_SEPARATE_D_OBJ), true)
+    ## DMD compile template bug fix
+    $(1)_D_RULE =$(TMP_PATH)/$(1)_dobj.$(D_OBJ_EXT)
+    $$($(1)_D_RULE):
+	    $(DC) $(D_CFLAGS) $(D_INCLUDE) -c $$($(1)_d_files) -of$$($(1)_D_RULE)
+    else
+    $(1)_D_RULE = $$($(1)_d_files:qt/%.d=$(TMP_PATH)/%_d.o)
+    endif
+    ## End. Build d part.
+    ## Build cpp part.
+    ifeq ($(CPP_SHARED), true)
+    ifeq ($(SYSTEM), windows)
+    $(1)_CPP_DYN_LIB = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(DYN_LIB_EXT)
+    $$($(1)_CPP_DYN_LIB): $$($(1)_cpp_obj_files)
+	    $(CC) $(CC_LFLAGS) -shared $$($(1)_cpp_obj_files) -o $$($(1)_CPP_DYN_LIB) $(CC_LIB_PATH:%=-L%) -l$(qt_$(1)_lib_name) $$($(1)_link_cpp:%=-l%) -Wl,--out-implib,$(TMP_PATH)\$(LIB_PREFIX)$(NAME_PREFIX)$(1)_cpp.a
+    $(1)_CPP_RULE = $(TMP_PATH)\cpp_$(1).$(LIB_EXT)
+    $$($(1)_CPP_RULE): $$($(1)_CPP_DYN_LIB)
+	    $(IMPLIB) $$($(1)_CPP_RULE) $$($(1)_CPP_DYN_LIB)
+    else ## CPP_SHARED != true
+    $(1)_CPP_RULE = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(DYN_LIB_EXT)
+    $$($(1)_CPP_RULE): $$($(1)_cpp_obj_files)
+	    $(CC) $(CC_LFLAGS) $(QTDIR_LIB)/$(LIB_PREFIX)$(qt_$(1)_name).$(DYN_LIB_EXT) $$($(1)_link_cpp:%=-l%) $$($(1)_cpp_obj_files) -o $$($(1)_CPP_RULE)
+    endif ## CPP_SHARED
+    DELETE_FILES += $$($(1)_CPP_DYN_LIB) $$($(1)_cpp_obj_files) $(TMP_PATH)\$(LIB_PREFIX)$(NAME_PREFIX)$(1)_cpp.a
+    else
+    $(1)_CPP_RULE = $$($(1)_cpp_obj_files)
+    endif
+    ## End. Build cpp part.
+
+    DELETE_FILES += $$($(1)_D_RULE) $$($(1)_CPP_RULE) $(OUTPUT_PATH)/$(LIB_PREFIX)$$(qt_$(1)_name)D.$(LIB_EXT)
+    ## Implib link.
+    $(1)_LIB = $(OUTPUT_PATH)$(SL)$(LIB_PREFIX)$(NAME_PREFIX)$(1)$(LIB_POSTFIX).$(LIB_EXT)
+    ifeq ($(SYSTEM), windows)
+    $$($(1)_LIB): $$($(1)_D_RULE) $$($(1)_CPP_RULE)
+	    $(DC) $$($(1)_D_RULE) $$($(1)_CPP_RULE) $(D_LIB_PATH:%=-L-L%) $$($(1)_link_d:%=-L-l%) -lib -of$$($(1)_LIB)
+    else
+    $$($(1)_LIB): $$($(1)_D_RULE) $$($(1)_CPP_RULE)
+	    $(AR) rcs $$($(1)_LIB) $$($(1)_D_RULE) $$($(1)_CPP_RULE)
+    endif
+    # End. Implib link.
+    $(1): mkdir_$(1) $$($(1)_LIB)
+endef
+$(foreach package,$(PACKAGES),$(eval $(call BUILD_template,$(package))))
+## End. Build package.
+
+clean:
+	@$(RM) $(DELETE_FILES)