mkspecs/features/symbian/symbian_building.prf
changeset 30 5dc02b23752f
child 33 3e2da88830cd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mkspecs/features/symbian/symbian_building.prf	Tue Jul 06 15:10:48 2010 +0300
@@ -0,0 +1,297 @@
+# we have some module specific options (defined in qt.prf) lets add them
+!contains(TARGET, ".*[ -].*"):eval(TMPVAR = \$\$QMAKE_$${TARGET}_CXXFLAGS)
+!isEmpty(TMPVAR):QMAKE_CXXFLAGS += $$TMPVAR
+!contains(TARGET, ".*[ -].*"):eval(TMPVAR = \$\$QMAKE_$${TARGET}_LFLAGS)
+!isEmpty(TMPVAR) {
+    QMAKE_LFLAGS += $$TMPVAR
+} else :linux-gcce {  # lets provide a simple default. Without elf2e32 complains
+    QMAKE_LFLAGS += -Ttext 0x80000 -Tdata 0x400000
+}
+
+symbianObjdir=$$OBJECTS_DIR
+isEmpty(symbianObjdir) {
+    symbianObjdir = .
+}
+symbianDestdir=$$DESTDIR
+isEmpty(symbianDestdir) {
+    symbianDestdir = .
+}
+
+contains(QMAKE_CFLAGS, "--thumb")|contains(QMAKE_CXXFLAGS, "--thumb")|contains(QMAKE_CFLAGS, "-mthumb")|contains(QMAKE_CXXFLAGS, "-mthumb") {
+    DEFINES += __MARM_THUMB__
+}
+
+defineReplace(processSymbianLibraries) {
+    library = $$replace(1, "\.dll$", ".dso")
+    library = $$replace(library, "^-l", "")
+    isFullName = $$find(library, \.)
+    isEmpty(isFullName):library="$${library}.dso"
+    linux-gcce {
+        newLIB = "-l:$${library}"
+    } else {
+        newLIB = "$${library}"
+    }
+    contains(library, "\.dso$")|contains(library, ".lib$"):PRE_TARGETDEPS += $$library
+    return($$newLIB)
+}
+
+for(libraries, LIBS) {
+    newLIBS += $$processSymbianLibraries($$libraries)
+}
+LIBS = $$newLIBS
+newLIBS =
+for(libraries, QMAKE_LIBS) {
+    newLIBS += $$processSymbianLibraries($$libraries)
+}
+QMAKE_LIBS = $$newLIBS
+
+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("sh -c 'printf %02x $$member(splitVersion, 0)'")
+        hexPart2 = $$system("sh -c 'printf %02x $$member(splitVersion, 1)'")"
+        hexPart2 = $$hexPart2$$system("sh -c 'printf %02x $$member(splitVersion, 2)'")"
+        decVersion = $$system("sh -c 'printf %1d 0x$$hexVersion'").
+        hexVersion = $$hexVersion$$hexPart2
+        decVersion = $$decVersion$$system("sh -c '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) {
+    !isEmpty(QMAKE_POST_LINK) {
+        # No way to honor the '@' :-(
+        QMAKE_POST_LINK = $$replace(QMAKE_POST_LINK, "^@", "")
+        QMAKE_POST_LINK = && $$QMAKE_POST_LINK
+    }
+    # The tee and grep at the end work around the issue that elf2e32 doesn't return non-null on error.
+    # The comparison of dso files is to avoid extra building of modules that depend on this dso, in
+    # case it has not changed.
+    QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${TARGET}.dll $$symbianDestdir/$${TARGET}.sym \
+                      && elf2e32  --version=$$decVersion \
+                      --sid=$$TARGET.SID \
+                      --uid1=0x10000079 \
+                      --uid2=$$TARGET.UID2 \
+                      --uid3=$$TARGET.UID3 \
+                      --targettype=DLL \
+                      --elfinput=$${symbianDestdir}/$${TARGET}.sym \
+                      --output=$${symbianDestdir}/$${TARGET}.dll \
+                      --dso=$$symbianObjdir/$${TARGET}.dso \
+                      --defoutput=$$symbianObjdir/$${TARGET}.def \
+                      --linkas=$${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll \
+                      $$elf2e32_LIBPATH \
+                      $$capability \
+                      $$QMAKE_ELF2E32_FLAGS \
+                      | tee elf2e32.log && test `grep -c 'Error:' elf2e32.log` = 0 && rm elf2e32.log \
+                      && if ! diff -q $${symbianObjdir}/$${TARGET}.dso $${symbianDestdir}/$${TARGET}.dso \
+                      > /dev/null 2>&1; then \
+                          $$QMAKE_COPY $${symbianObjdir}/$${TARGET}.dso $${symbianDestdir}/$${TARGET}.dso; \
+                      fi \
+                      $$QMAKE_POST_LINK
+    QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.sym
+    QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.dso
+    QMAKE_CLEAN += $${symbianObjdir}/$${TARGET}.dso
+    QMAKE_CLEAN += $${symbianObjdir}/$${TARGET}.def
+
+    linux-armcc: {
+        LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\)
+        LIBS += -ledllstub.lib -ledll.lib\\(uc_dll_.o\\)
+    } else :linux-gcce {
+        LIBS += \
+            -l:edll.lib \
+            -l:usrt2_2.lib \
+            -l:dfpaeabi.dso \
+            -l:drtaeabi.dso \
+            -l:scppnwdl.dso \
+            -lsupc++ \
+            -lgcc
+    }
+
+    QMAKE_LFLAGS += --soname $${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll
+    DEFINES += __DLL__
+}
+
+contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@.*") {
+    !isEmpty(QMAKE_POST_LINK) {
+        # No way to honor the '@' :-(
+        QMAKE_POST_LINK = $$replace(QMAKE_POST_LINK, "^@", "")
+        QMAKE_POST_LINK = && $$QMAKE_POST_LINK
+    }
+    # the tee and grep at the end work around the issue that elf2e32 doesn't return non-null on error
+    QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${TARGET} $$symbianDestdir/$${TARGET}.sym \
+                      && elf2e32  --version $$decVersion \
+                      --sid=$$TARGET.SID \
+                      --uid1=0x1000007a \
+                      --uid2=$$TARGET.UID2 \
+                      --uid3=$$TARGET.UID3 \
+                      --targettype=EXE \
+                      --elfinput=$${symbianDestdir}/$${TARGET}.sym \
+                      --output=$${symbianDestdir}/$${TARGET}.exe \
+                      --linkas=$${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe \
+                      $$elf2e32_LIBPATH \
+                      $$capability \
+                      $$QMAKE_ELF2E32_FLAGS \
+                      | tee elf2e32.log && test `grep -c 'Error:' elf2e32.log` = 0 && rm elf2e32.log \
+                      && ln "$${symbianDestdir}/$${TARGET}.exe" "$${symbianDestdir}/$$TARGET" \
+                      $$QMAKE_POST_LINK
+    QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.sym
+    QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.exe
+    QMAKE_CLEAN += $${symbianDestdir}/$${TARGET}
+
+    linux-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"):contains(QT, "core") { #if linking with QtCore
+            QMAKE_LIBS += -lqtmain$${QT_LIBINFIX}.lib
+        } else {
+            QMAKE_LIBS += -llibcrt0.lib
+        }
+    } else :linux-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"):contains(QT, "core") { #if linking with QtCore
+            QMAKE_LIBS += -l:qtmain$${QT_LIBINFIX}.lib
+        } else {
+            QMAKE_LIBS += -l:libcrt0_gcce.lib
+        }
+        QMAKE_LIBS += \
+            -l:dfpaeabi.dso \
+            -l:drtaeabi.dso \
+            -l:scppnwdl.dso \
+            -lsupc++ \
+            -lgcc
+        QMAKE_LFLAGS += --shared
+    }
+
+    QMAKE_LFLAGS += --soname $${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe
+    DEFINES += __EXE__
+}
+
+# Symbian resource files
+linux-armcc: {
+    SYMBIAN_RVCT22INC=$$(RVCT22INC)
+    !isEmpty(SYMBIAN_RVCT22INC):symbian_resources_INCLUDES = -I$${SYMBIAN_RVCT22INC}
+}
+symbian_resources_INCLUDES = $$replace(symbian_resources_INCLUDES, ",", " -I")
+symbian_resources_INCLUDES += $$join(INCLUDEPATH, " -I", "-I")
+symbian_resources_DEFINES = $$join(DEFINES, " -D", "-D")
+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 \
+                            $$symbian_resources_INCLUDES \
+                            $$symbian_resources_DEFINES \
+                            ${QMAKE_FILE_NAME} \
+                            -o $${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}
+symbianresources.dependency_type = TYPE_C
+symbianresources.CONFIG = no_link target_predeps
+
+QMAKE_EXTRA_COMPILERS += symbianresources
+
+contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") {
+    baseTarget = $$basename(TARGET)
+    # If you change this, also see application_icon.prf
+    baseTarget = $$replace(baseTarget, " ",_)
+
+    # Make our own extra target in order to get dependencies for generated
+    # files right. This also avoids the warning about files not found.
+    symbianGenResource.target = $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg
+    symbianGenResource.commands = cpp -nostdinc -undef \
+                                  $$symbian_resources_INCLUDES \
+                                  $$symbian_resources_DEFINES \
+                                  $${baseTarget}.rss \
+                                  -o $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \
+                                  && rcomp -u -m045,046,047 \
+                                  -s$${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \
+                                  -o$${symbianDestdir}/$${baseTarget}.rsc \
+                                  -h$${symbian_resources_RCC_DIR}/$${baseTarget}.rsg \
+                                  -i$${baseTarget}.rss
+    symbianGenResource.depends = $${baseTarget}.rss
+    PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg
+    QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg
+    QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp
+    QMAKE_DISTCLEAN += $${baseTarget}.rss
+    QMAKE_DISTCLEAN += $${symbianDestdir}/$${baseTarget}.rsc
+
+    symbianGenRegResource.target = $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg
+    symbianGenRegResource.commands = cpp -nostdinc -undef \
+                                     $$symbian_resources_INCLUDES \
+                                     $$symbian_resources_DEFINES \
+                                     $${baseTarget}_reg.rss \
+                                     -o $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \
+                                     && rcomp -u -m045,046,047 \
+                                     -s$${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \
+                                     -o$${symbianDestdir}/$${baseTarget}_reg.rsc \
+                                     -h$${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg \
+                                     -i$${baseTarget}_reg.rss
+    symbianGenRegResource.depends = $${baseTarget}_reg.rss $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg
+    PRE_TARGETDEPS += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg
+    QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rsg
+    QMAKE_CLEAN += $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp
+    QMAKE_DISTCLEAN += $${TARGET}_reg.rss
+    QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}_reg.rsc
+
+    # 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_TARGETS += symbianGenResource symbianGenRegResource
+    QMAKE_EXTRA_COMPILERS += symbianRccDirCreation
+
+    QMAKE_DISTCLEAN += $${TARGET}.loc
+}
+
+# Generated pkg files
+
+QMAKE_DISTCLEAN += $${TARGET}_template.pkg