qt5base-lts/mkspecs/features/symbian/symbian_building.prf
Qt by Nokia 38be0d1383 Initial import from the monolithic Qt.
This is the beginning of revision history for this module. If you
want to look at revision history older than this, please refer to the
Qt Git wiki for how to use Git history grafting. At the time of
writing, this wiki is located here:

http://qt.gitorious.org/qt/pages/GitIntroductionWithQt

If you have already performed the grafting and you don't see any
history beyond this commit, try running "git log" with the "--follow"
argument.

Branched from the monolithic repo, Qt master branch, at commit
896db169ea224deb96c59ce8af800d019de63f12
2011-04-27 12:05:43 +02:00

370 lines
17 KiB
Plaintext

symbian-armcc {
QMAKE_CFLAGS += $$QMAKE_CFLAGS.ARMCC
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.ARMCC
QMAKE_LFLAGS += $$QMAKE_LFLAGS.ARMCC
# This is to prevent inclusion of the shipped RVCT headers, which are often in the
# environment variable RVCTxxINC by default. -J prevents the searching of that location,
# but needs a path, so just specify somewhere guaranteed not to contain header files.
QMAKE_CFLAGS += -J$${EPOCROOT}epoc32/ignore_this_path
QMAKE_CXXFLAGS += -J$${EPOCROOT}epoc32/ignore_this_path
} else:symbian-gcce {
QMAKE_CFLAGS += $$QMAKE_CFLAGS.GCCE
QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.GCCE
QMAKE_LFLAGS += $$QMAKE_LFLAGS.GCCE
}
# We need a target name without the INFIX'ed part, since flags are not infixed.
equals(QMAKE_TARGET_PRODUCT, Qt4):clean_TARGET = $$replace(TARGET, "$${QT_LIBINFIX}$", "")
else:clean_TARGET = $$TARGET
# we have some module specific options (defined in qt.prf) lets add them
!contains(clean_TARGET, ".*[ -/].*"):eval(TMPVAR = \$\$QMAKE_$${clean_TARGET}_CXXFLAGS)
!isEmpty(TMPVAR):QMAKE_CXXFLAGS += $$TMPVAR
!contains(clean_TARGET, ".*[ -/].*"):eval(TMPVAR = \$\$QMAKE_$${clean_TARGET}_LFLAGS)
!isEmpty(TMPVAR) {
QMAKE_LFLAGS += $$TMPVAR
} else :symbian-gcce { # lets provide a simple default. Without elf2e32 complains
QMAKE_LFLAGS += -Ttext 0x80000 -Tdata 0x400000
}
qtPrepareTool(QMAKE_ELF2E32_WRAPPER, elf2e32_qtwrapper)
isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000
isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x020000 0x800000
epoc_heap_size = $$split(TARGET.EPOCHEAPSIZE, " ")
epoc_heap_size = $$join(epoc_heap_size, ",")
symbianObjdir=$$OBJECTS_DIR
isEmpty(symbianObjdir) {
symbianObjdir = .
}
symbianDestdir=$$DESTDIR
isEmpty(symbianDestdir) {
symbianDestdir = .
}
baseTarget = $$symbianRemoveSpecialCharacters($$basename(TARGET))
!equals(TARGET, "$$baseTarget"):symbianDestdir = $$symbianDestdir/$$dirname(TARGET)
contains(QMAKE_CFLAGS, "--thumb")|contains(QMAKE_CXXFLAGS, "--thumb")|contains(QMAKE_CFLAGS, "-mthumb")|contains(QMAKE_CXXFLAGS, "-mthumb") {
DEFINES += __MARM_THUMB__
}
defineReplace(processSymbianLibrary) {
qt_library = $$replace(1, "\\.dll$", ".dso")
qt_library = $$replace(qt_library, "^-l", "")
isFullName = $$find(qt_library, \\.)
isEmpty(isFullName):qt_library="$${qt_library}.dso"
return($$qt_library)
}
# This part turn "-llibc" into "libc.dso", and moves -L entries to QMAKE_LIBDIR.
libsToProcess = LIBS LIBS_PRIVATE QMAKE_LIBS
for(libToProcess, libsToProcess) {
qt_libraries = $$split($$libToProcess, " ")
eval($$libToProcess =)
for(qt_library, qt_libraries) {
contains(qt_library, "^-L.*") {
qt_library = $$replace(qt_library, "^-L", "")
QMAKE_LIBDIR += $$qt_library
} else {
qt_newLib = $$processSymbianLibrary($$qt_library)
contains(qt_newLib, ".*\\.dso$")|contains(qt_newLib, ".*\\.lib$"):PRE_TARGETDEPS += $$qt_newLib
symbian-gcce:qt_newLib = "-l:$$qt_newLib"
eval($$libToProcess *= \$\$qt_newLib)
}
}
}
elf2e32_LIBPATH =
for(libPath, QMAKE_LIBDIR) {
elf2e32_LIBPATH += "--libpath=$$libPath"
}
isEmpty(VERSION) {
VERSION = $$QT_VERSION
}
# Check for version validity.
!isEmpty(VERSION):!contains(VERSION, "[0-9]+"):!contains(VERSION, "[0-9]+\\.[0-9]+")!contains(VERSION, "[0-9]+(\\.[0-9]+){2}") {
error("Invalid VERSION for Symbian: $$VERSION")
}
splitVersion = $$split(VERSION, ".")
count(splitVersion, 0) {
# Default Symbian version if none is specified.
hexVersion = "000a0000"
decVersion = "10.0"
} else {
count(splitVersion, 3) {
hexVersion = $$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 0))\"")
hexPart2 = $$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 1))\"")
hexPart2 = $$hexPart2$$system("perl -e \"printf (\\\"%02x\\\", $$member(splitVersion, 2))\"")
decVersion = $$system("perl -e \"printf (\\\"%1d\\\", 0x$$hexVersion)\"").
hexVersion = $$hexVersion$$hexPart2
decVersion = $$decVersion$$system("perl -e \"printf (\\\"%d\\\", 0x$$hexPart2)\"")
!contains(hexVersion, "[0-9a-f]{8}"):hexVersion = "00$${hexVersion}"
} else { # app code may have different numbering...
hexVersion = $$VERSION
decVersion = $$VERSION
}
}
#error ("hexVersion: $$hexVersion, decVersion: $$decVersion")
intUid3 = $$lower($$replace(TARGET.UID3, "^0x", ""))
isEmpty(TARGET.SID):TARGET.SID = $$TARGET.UID3
isEmpty(TARGET.UID2):TARGET.UID2 = 0x00000000
capability = $$replace(TARGET.CAPABILITY, " ", "+")
capability = $$join(capability, "+")
capability = $$replace(capability, "\\+-", "-")
isEmpty(capability): capability = "None"
capability = "--capability=$$capability"
contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
contains(CONFIG, plugin):QMAKE_ELF2E32_FLAGS += --definput=plugin_commonu.def
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK
moveCmd = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget}.dll $$symbianDestdir/$${baseTarget}.sym
contains(QMAKE_HOST.os,Windows):moveCmd = $$replace(moveCmd, /, \\)
QMAKE_POST_LINK = $$moveCmd \
&& $$QMAKE_ELF2E32_WRAPPER --version=$$decVersion \
--sid=$$TARGET.SID \
--uid1=0x10000079 \
--uid2=$$TARGET.UID2 \
--uid3=$$TARGET.UID3 \
--targettype=DLL \
--elfinput=$${symbianDestdir}/$${baseTarget}.sym \
--output=$${symbianDestdir}/$${baseTarget}.dll \
--tmpdso=$${symbianObjdir}/$${baseTarget}.dso \
--dso=$${symbianDestdir}/$${baseTarget}.dso \
--defoutput=$$symbianObjdir/$${baseTarget}.def \
--linkas=\"$${baseTarget}{$${hexVersion}}[$${intUid3}].dll\" \
--heap=$$epoc_heap_size \
--stack=$$TARGET.EPOCSTACKSIZE \
$$elf2e32_LIBPATH \
$$capability \
$$QMAKE_ELF2E32_FLAGS \
$$QMAKE_POST_LINK
silent:QMAKE_POST_LINK = @echo postlinking $@ && $$QMAKE_POST_LINK
QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.sym
QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.dso
QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.dso
QMAKE_CLEAN += $${symbianObjdir}/$${baseTarget}.def
symbian-armcc: {
LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso
# Quotation unfortunately is different on Windows and unix.
contains(QMAKE_HOST.os, Windows) {
LIBS += \"h_t__uf.l(switch8.o)\" edllstub.lib \"edll.lib(uc_dll_.o)\"
} else {
LIBS += h_t__uf.l\\(switch8.o\\) edllstub.lib edll.lib\\(uc_dll_.o\\)
}
} else :symbian-gcce {
LIBS += \
-l:edllstub.lib \
-l:edll.lib \
-l:usrt2_2.lib \
-l:dfpaeabi.dso \
-l:drtaeabi.dso \
-l:scppnwdl.dso \
-lsupc++ \
-lgcc
}
QMAKE_LFLAGS += --soname \"$${baseTarget}{$${hexVersion}}[$${intUid3}].dll\"
DEFINES += __DLL__
}
contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") {
!isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$escape_expand(\\n\\t)$$QMAKE_POST_LINK
moveCmd = $$QMAKE_MOVE $$symbianDestdir/$${baseTarget} $$symbianDestdir/$${baseTarget}.sym
contains(QMAKE_HOST.os,Windows):moveCmd = $$replace(moveCmd, /, \\)
QMAKE_POST_LINK = $$moveCmd \
&& $$QMAKE_ELF2E32_WRAPPER --version $$decVersion \
--sid=$$TARGET.SID \
--uid1=0x1000007a \
--uid2=$$TARGET.UID2 \
--uid3=$$TARGET.UID3 \
--targettype=EXE \
--elfinput=$${symbianDestdir}/$${baseTarget}.sym \
--output=$${symbianDestdir}/$${baseTarget}.exe \
--linkas=\"$${baseTarget}{$${hexVersion}}[$${intUid3}].exe\" \
--heap=$$epoc_heap_size \
--stack=$$TARGET.EPOCSTACKSIZE \
$$elf2e32_LIBPATH \
$$capability \
$$QMAKE_ELF2E32_FLAGS \
&& $$QMAKE_COPY "$${symbianDestdir}/$${baseTarget}.exe" "$${symbianDestdir}/$${baseTarget}" \
$$QMAKE_POST_LINK
silent:QMAKE_POST_LINK = @echo postlinking $@ && $$QMAKE_POST_LINK
QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.sym
QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.exe
QMAKE_CLEAN += $${symbianDestdir}/$${baseTarget}
symbian-armcc: {
QMAKE_LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\)
QMAKE_LIBS += -leexe.lib\\(uc_exe_.o\\)
contains(CONFIG, "qt") {
QMAKE_LIBS -= $$QMAKE_LIBS_QT_ENTRY
QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY
} else {
QMAKE_LIBS -= $$QMAKE_LIBS_NO_QT_ENTRY
QMAKE_LIBS += $$QMAKE_LIBS_NO_QT_ENTRY
}
} else :symbian-gcce {
# notice that we can't merge these as ordering of arguments is important.
QMAKE_LIBS += \
-l:eexe.lib \
-l:usrt2_2.lib
contains(CONFIG, "qt") {
modified_entry = $$replace(QMAKE_LIBS_QT_ENTRY, "^-l", "-l:")
QMAKE_LIBS -= $$modified_entry
QMAKE_LIBS += $$modified_entry
} else {
modified_entry = $$replace(QMAKE_LIBS_NO_QT_ENTRY, "^-l", "-l:")
QMAKE_LIBS -= $$modified_entry
modified_entry = $$replace(QMAKE_LIBS_NO_QT_ENTRY_GCCE, "^-l", "-l:")
QMAKE_LIBS -= $$modified_entry
QMAKE_LIBS += $$modified_entry
}
QMAKE_LIBS += \
-l:dfpaeabi.dso \
-l:drtaeabi.dso \
-l:scppnwdl.dso \
-lsupc++ \
-lgcc
QMAKE_LFLAGS += --shared
}
QMAKE_LFLAGS += --soname \"$${baseTarget}{$${hexVersion}}[$${intUid3}].exe\"
DEFINES += __EXE__
}
# Symbian resource files
symbian_resources_INCLUDES = $$join(INCLUDEPATH, " -I", "-I")
symbian_resources_DEFINES = $$join(DEFINES, " -D", "-D")
symbian_resources_DEFINES += -D__QT_SYMBIAN_RESOURCE__
symbian_resources_RCC_DIR = $$replace(RCC_DIR, "/$", "")
symbian_resources_INCLUDES += "-I$$symbian_resources_RCC_DIR"
for(symbian_resource, SYMBIAN_RESOURCES) {
symbian_resource = $$basename(symbian_resource)
symbian_resource_clean = $$replace(symbian_resource, "\\.rss$", ".rsc")
QMAKE_DISTCLEAN += $${symbianDestdir}/$${symbian_resource_clean}
symbian_resource_clean = $$replace(symbian_resource, "\\.rss$", ".rpp")
QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${symbian_resource_clean}
}
symbianresources.input = SYMBIAN_RESOURCES
symbianresources.output = $$symbian_resources_RCC_DIR/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsg
symbianresources.commands = cpp -nostdinc -undef \
-include $$QMAKE_SYMBIAN_INCLUDES \
$$symbian_resources_INCLUDES \
$$symbian_resources_DEFINES \
${QMAKE_FILE_NAME} \
> $${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.rpp \
&& rcomp -u -m045,046,047 \
-s$${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.rpp \
-o$${symbianDestdir}/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsc \
-h$${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsg \
-i${QMAKE_FILE_NAME}
silent:symbianresources.commands = @echo rcomp $< && $$symbianresources.commands
symbianresources.dependency_type = TYPE_C
symbianresources.CONFIG = no_link target_predeps
QMAKE_EXTRA_COMPILERS += symbianresources
# This section generates the rsg and rsc files for symbian.
contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") {
# Look for extra languages for the resources, and then generate a target for each one.
localize_deployment:symbianGenResourceLanguages = $$SYMBIAN_MATCHED_LANGUAGES default
else:symbianGenResourceLanguages = default
for(language, symbianGenResourceLanguages) {
# Special languages get their language number appended to the filename.
contains(language, default) {
symbianGenResource_DEFINES = $$symbian_resources_DEFINES
rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp
rsc = $${symbianDestdir}/$${baseTarget}.rsc
rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg
} else {
languageNo = $$eval(SYMBIAN_LANG.$$language)
symbianGenResource_DEFINES = $$symbian_resources_DEFINES -DLANGUAGE_$${languageNo}
rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_$${languageNo}.rpp
rsc = $${symbianDestdir}/$${baseTarget}.r$${languageNo}
rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_$${languageNo}.rsg
}
# Make our own extra target in order to get dependencies for generated
# files right. This also avoids the warning about files not found.
eval(symbianGenResource_$${language}.target = $$rsg)
eval(symbianGenResource_$${language}.commands = cpp -nostdinc -undef \
-include $$QMAKE_SYMBIAN_INCLUDES \
$$symbian_resources_INCLUDES \
$$symbianGenResource_DEFINES \
$${baseTarget}.rss \
> $$rpp \
&& rcomp -u -m045,046,047 \
-s$$rpp \
-o$$rsc \
-h$$rsg \
-i$${baseTarget}.rss)
silent:eval(symbianGenResource_$${language}.commands = @echo rcomp $${baseTarget}.rss && $$eval(symbianGenResource_$${language}.commands))
eval(symbianGenResource_$${language}.depends = $${baseTarget}.rss)
PRE_TARGETDEPS += $$rsg
QMAKE_CLEAN += $$rsg $$rpp
QMAKE_DISTCLEAN += $$rsc
QMAKE_EXTRA_TARGETS += symbianGenResource_$${language}
# Note that we depend on the base rsg file, even if dealing with a specific language.
# hence we don't use $$rsg on the next line.
eval(symbianGenRegResource_$${language}.depends = $${baseTarget}_reg.rss $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg)
contains(language, default) {
rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp
rsc = $${symbianDestdir}/$${baseTarget}_reg.rsc
rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg
} else {
rpp = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg_$${languageNo}.rpp
rsc = $${symbianDestdir}/$${baseTarget}_reg.r$${languageNo}
rsg = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg_$${languageNo}.rsg
}
eval(symbianGenRegResource_$${language}.target = $$rsg)
eval(symbianGenRegResource_$${language}.commands = cpp -nostdinc -undef \
-include $$QMAKE_SYMBIAN_INCLUDES \
$$symbian_resources_INCLUDES \
$$symbianGenResource_DEFINES \
$${baseTarget}_reg.rss \
> $$rpp \
&& rcomp -u -m045,046,047 \
-s$$rpp \
-o$$rsc \
-h$$rsg \
-i$${baseTarget}_reg.rss)
silent:eval(symbianGenRegResource_$${language}.commands = @echo rcomp $${baseTarget}_reg.rss && $$eval(symbianGenRegResource_$${language}.commands))
PRE_TARGETDEPS += $$rsg
QMAKE_CLEAN += $$rsg $$rpp
QMAKE_DISTCLEAN += $$rsc
QMAKE_EXTRA_TARGETS += symbianGenRegResource_$${language}
}
# Trick to get qmake to create the RCC_DIR for us.
symbianRccDirCreation.input = SOURCES
symbianRccDirCreation.commands =
symbianRccDirCreation.output = $${symbian_resources_RCC_DIR}/symbian_resource_dummy
symbianRccDirCreation.CONFIG = no_link combine
QMAKE_EXTRA_COMPILERS += symbianRccDirCreation
QMAKE_DISTCLEAN += $${baseTarget}.rss \
$${baseTarget}_reg.rss \
$${baseTarget}.loc
}
# Generated pkg files
QMAKE_DISTCLEAN += $${baseTarget}_template.pkg \
$${baseTarget}_installer.pkg \
$${baseTarget}_stub.pkg