mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-28 09:38:53 +00:00
130 lines
3.9 KiB
PHP
130 lines
3.9 KiB
PHP
|
# prevent import file to be included twice, for example via import-qt5_gui.mk
|
||
|
# and import-qt5_core.mk
|
||
|
|
||
|
ifeq ($(QT5_IMPORTED),)
|
||
|
QT5_IMPORTED = true
|
||
|
|
||
|
# identify the qt5 repository by searching for a file that is unique for qt5
|
||
|
QT5_REP_DIR := $(call select_from_repositories,lib/import/import-qt5.inc)
|
||
|
QT5_REP_DIR := $(realpath $(dir $(QT5_REP_DIR))../..)
|
||
|
|
||
|
include $(QT5_REP_DIR)/lib/mk/qt5_version.inc
|
||
|
|
||
|
QT5_INC_DIR := $(QT5_REP_DIR)/src/lib/qt5/qtbase/mkspecs/genode-g++ \
|
||
|
$(QT5_REP_DIR)/src/lib/qt5/qtbase/src/corelib/global \
|
||
|
$(QT5_REP_DIR)/include/qt5 \
|
||
|
$(QT5_REP_DIR)/contrib/$(QT5)/qtbase/include \
|
||
|
|
||
|
INC_DIR += $(QT5_INC_DIR)
|
||
|
|
||
|
# extracted from qt.prf
|
||
|
QT_DEFINES += -DQT_STATICPLUGIN
|
||
|
|
||
|
QT_DEFINES += -D__GENODE__
|
||
|
|
||
|
#
|
||
|
# Prevent inclusion of non-existent 'features.h' from 'bits/os_defines.h'
|
||
|
# header that comes with the Codesourcery ARM tool chain.
|
||
|
#
|
||
|
QT_DEFINES += -D_GLIBCXX_OS_DEFINES
|
||
|
|
||
|
#
|
||
|
# When using the Codesourcery tool chain for ARM, the compiler provides a
|
||
|
# built-in definition for '__linux__', which is obviously wrong when using the
|
||
|
# compiler for Genode. Unfortunately, Webkit tests for this definition in
|
||
|
# 'JavaScriptCore/wtf/Platform.h'. To prevent webkit from drawing wrong
|
||
|
# conclusions, we explicitly undefine '__linux__'.
|
||
|
#
|
||
|
QT_DEFINES += -U__linux__
|
||
|
|
||
|
CC_OPT += $(QT_DEFINES)
|
||
|
|
||
|
SOURCES_FILTERED = $(filter-out $(SOURCES_FILTER_OUT), $(SOURCES))
|
||
|
HEADERS_FILTERED = $(filter-out $(HEADERS_FILTER_OUT), $(HEADERS))
|
||
|
|
||
|
# add sources defined in qmake project files
|
||
|
SRC_CC += $(SOURCES_FILTERED)
|
||
|
|
||
|
# handle moc-headers, resources and ui descriptions
|
||
|
$(SRC_CC:.cpp=.o): $(addprefix ui_,$(FORMS:.ui=.h))
|
||
|
|
||
|
SRC_CC_QT_GENERATED = $(addprefix moc_,$(HEADERS_FILTERED:.h=.cpp)) \
|
||
|
$(addprefix qrc_,$(RESOURCES:.qrc=.cpp))
|
||
|
|
||
|
.SECONDARY: $(SRC_CC_QT_GENERATED)
|
||
|
SRC_CC += $(SRC_CC_QT_GENERATED)
|
||
|
|
||
|
#
|
||
|
# Locations of moc, rcc, and uic binaries
|
||
|
#
|
||
|
# These binaries are created by calling 'make' in the 'tool' directory, which
|
||
|
# should have happened before starting to build QT5 applications.
|
||
|
#
|
||
|
MOC = $(QT5_REP_DIR)/tool/qt5/moc/moc
|
||
|
RCC = $(QT5_REP_DIR)/tool/qt5/rcc/rcc
|
||
|
UIC = $(QT5_REP_DIR)/tool/qt5/uic/uic
|
||
|
|
||
|
$(MOC) $(RCC) $(UIC):
|
||
|
@echo
|
||
|
@echo "Attempting to build QT5 application without having built the QT5 tools."
|
||
|
@echo "Please execute 'make prepare PKG=qt5' in the root of the 'libports' repository."
|
||
|
@echo
|
||
|
@false
|
||
|
|
||
|
# moc rules
|
||
|
moc_%.cpp: %.h $(MOC)
|
||
|
$(MSG_CONVERT)$@
|
||
|
$(VERBOSE) $(MOC) $(QT_DEFINES) $(addprefix -I,$(QT5_INC_DIR)) $< -o $@
|
||
|
|
||
|
%.moc: %.cpp $(MOC)
|
||
|
$(MSG_CONVERT)$@
|
||
|
$(VERBOSE) $(MOC) $(QT_DEFINES) $(addprefix -I,$(QT5_INC_DIR)) $< -o $@
|
||
|
|
||
|
# rcc rule
|
||
|
qrc_%.cpp: %.qrc $(RCC)
|
||
|
$(MSG_CONVERT)$@
|
||
|
$(VERBOSE) $(RCC) -name $(basename $(notdir $<)) $< -o $@
|
||
|
|
||
|
# uic rule
|
||
|
ui_%.h: %.ui $(UIC)
|
||
|
$(MSG_CONVERT)$@
|
||
|
$(VERBOSE) $(UIC) $< -o $@
|
||
|
|
||
|
# add include dirs for QT5-specific genode addons
|
||
|
INC_DIR += $(QT5_REP_DIR)/include/qt5/genode
|
||
|
|
||
|
# add C++ include dirs and libs
|
||
|
#
|
||
|
# We cannot just extend the 'LIBS' variable here because 'import-*.mk' are
|
||
|
# included (in 'base/mk/lib.mk') by iterating through the elements of the
|
||
|
# 'LIBS' variable. Hence, we also need to manually import the stdlib snippet.
|
||
|
#
|
||
|
LIBS += stdcxx
|
||
|
include $(call select_from_repositories,lib/import/import-stdcxx.mk)
|
||
|
|
||
|
# custom main() thread stack size support via main() wrapper
|
||
|
ifeq ($(findstring -DQT_MAIN_STACK_SIZE, $(CC_CXX_OPT)), -DQT_MAIN_STACK_SIZE)
|
||
|
CC_CXX_OPT += -Dmain=qt_main
|
||
|
SRC_CC += qt_main.cc
|
||
|
vpath qt_main.cc $(QT5_REP_DIR)/src/lib/qt5
|
||
|
endif
|
||
|
|
||
|
# set QT_ARCH definition according to the SPECS variable
|
||
|
ifneq ($(filter x86_32,$(SPECS)),)
|
||
|
QT_DEFINES += -DQT_ARCH_I386
|
||
|
endif
|
||
|
ifneq ($(filter x86_64,$(SPECS)),)
|
||
|
QT_DEFINES += -DQT_ARCH_X86_64
|
||
|
endif
|
||
|
ifneq ($(filter arm,$(SPECS)),)
|
||
|
QT_DEFINES += -DQT_ARCH_ARMV6
|
||
|
endif
|
||
|
|
||
|
# remove generated files in clean rules
|
||
|
clean cleanall: clean_rule
|
||
|
clean_rule:
|
||
|
$(VERBOSE)$(RM) -f $(SRC_CC_QT_GENERATED)
|
||
|
$(VERBOSE)$(RM) -f $(SOURCES_FILTERED:.cpp=.moc)
|
||
|
$(VERBOSE)$(RM) -f $(addprefix ui_,$(FORMS:.ui=.h))
|
||
|
endif
|