summaryrefslogtreecommitdiffstats
path: root/mkspecs
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs')
-rw-r--r--mkspecs/common/symbian/symbian-makefile.conf2
-rw-r--r--mkspecs/features/symbian/def_files.prf95
-rw-r--r--mkspecs/symbian/features/symbian_building.prf74
3 files changed, 123 insertions, 48 deletions
diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf
index ab2ef98..3801eff 100644
--- a/mkspecs/common/symbian/symbian-makefile.conf
+++ b/mkspecs/common/symbian/symbian-makefile.conf
@@ -13,6 +13,8 @@ QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
+QMAKE_ELF2E32_FLAGS +=
+
include(../../common/unix.conf)
QMAKE_PREFIX_SHLIB =
diff --git a/mkspecs/features/symbian/def_files.prf b/mkspecs/features/symbian/def_files.prf
index 48d91aa..a1f0c8d 100644
--- a/mkspecs/features/symbian/def_files.prf
+++ b/mkspecs/features/symbian/def_files.prf
@@ -3,32 +3,75 @@
CONFIG -= def_files_disabled
-# Firstly, if the MMP_RULES already contain a defBlock variable, don't generate another one
-# (this bit is slightly magic, because it depends upon everyone creating their DEFFILE statements
-# in a defBlock variable; but otherwise we have to expand MMP_RULES then scan for the DEFFILE keyword)
-!contains(MMP_RULES, defBlock) {
- # Apps are executables on Symbian, so don't have exports, and therefore don't have DEF files
- # Plugins use standard DEF files, which qmake generates, so shouldn't be using these DEFFILE
- # statements - they use the qmake generated statements instead
- # Static libraries obviously don't have DEF files, as they don't take part in dynamic linkage
- !contains(TEMPLATE, app):!contains(CONFIG, plugin):!contains(CONFIG, staticlib): {
- !isEmpty(defFilePath) {
- defBlock = \
- "$${LITERAL_HASH}ifdef WINSCW" \
- "DEFFILE $$defFilePath/bwins/$${TARGET}.def" \
- "$${LITERAL_HASH}elif defined EABI" \
- "DEFFILE $$defFilePath/eabi/$${TARGET}.def" \
- "$${LITERAL_HASH}endif"
- } else {
- # If defFilePath is not defined, then put the folders containing the DEF files at the
- # same level as the .pro (and generated MMP) file(s)
- defBlock = \
- "$${LITERAL_HASH}ifdef WINSCW" \
- "DEFFILE ./bwins/$${TARGET}.def" \
- "$${LITERAL_HASH}elif defined EABI" \
- "DEFFILE ./eabi/$${TARGET}.def" \
- "$${LITERAL_HASH}endif"
+symbian-abld|symbian-sbsv2 {
+ # Firstly, if the MMP_RULES already contain a defBlock variable, don't generate another one
+ # (this bit is slightly magic, because it depends upon everyone creating their DEFFILE statements
+ # in a defBlock variable; but otherwise we have to expand MMP_RULES then scan for the DEFFILE keyword)
+ !contains(MMP_RULES, defBlock) {
+ # Apps are executables on Symbian, so don't have exports, and therefore don't have DEF files
+ # Plugins use standard DEF files, which qmake generates, so shouldn't be using these DEFFILE
+ # statements - they use the qmake generated statements instead
+ # Static libraries obviously don't have DEF files, as they don't take part in dynamic linkage
+ !contains(TEMPLATE, app):!contains(CONFIG, plugin):!contains(CONFIG, staticlib): {
+ !isEmpty(DEF_FILE) {
+ defBlock = \
+ "$${LITERAL_HASH}ifdef WINSCW" \
+ "DEFFILE $$DEF_FILE/bwins/$${TARGET}.def" \
+ "$${LITERAL_HASH}elif defined EABI" \
+ "DEFFILE $$DEF_FILE/eabi/$${TARGET}.def" \
+ "$${LITERAL_HASH}endif"
+ } else:!isEmpty(defFilePath) {
+ defBlock = \
+ "$${LITERAL_HASH}ifdef WINSCW" \
+ "DEFFILE $$defFilePath/bwins/$${TARGET}.def" \
+ "$${LITERAL_HASH}elif defined EABI" \
+ "DEFFILE $$defFilePath/eabi/$${TARGET}.def" \
+ "$${LITERAL_HASH}endif"
+ } else {
+ # If defFilePath is not defined, then put the folders containing the DEF files at the
+ # same level as the .pro (and generated MMP) file(s)
+ defBlock = \
+ "$${LITERAL_HASH}ifdef WINSCW" \
+ "DEFFILE ./bwins/$${TARGET}.def" \
+ "$${LITERAL_HASH}elif defined EABI" \
+ "DEFFILE ./eabi/$${TARGET}.def" \
+ "$${LITERAL_HASH}endif"
+ }
+ MMP_RULES += defBlock
}
- MMP_RULES += defBlock
}
+
+} else:contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
+ !isEmpty(DEF_FILE) {
+ defFile = $$DEF_FILE
+ } else {
+ defFile = .
+ }
+ system("$$QMAKE_CHK_DIR_EXISTS $$_PRO_FILE_PWD_/$$defFile") {
+ !exists("$$_PRO_FILE_PWD_/$$defFile/eabi") {
+ system("$$QMAKE_MKDIR $$_PRO_FILE_PWD_/$$defFile/eabi")
+ }
+ elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile/eabi/$$basename(TARGET)u.def
+ } else {
+ elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile
+ }
+ QMAKE_ELF2E32_FLAGS += "`test -e $$elf2e32FileToAdd && echo --definput=$$elf2e32FileToAdd`"
+
+ symbianObjdir = $$OBJECTS_DIR
+ isEmpty(symbianObjdir):symbianObjdir = .
+
+ freeze_target.target = freeze
+ freeze_target.depends = first
+ # The perl part is to convert to unix line endings and remove comments, which the s60 tools refuse to do.
+ freeze_target.commands = perl -n -e \'next if (/; NEW/); s/\r//g; if (/MISSING:(.*)/x) { print(\"\$\$1 ABSENT\\n\"); } else { print; }\' < $$symbianObjdir/$${TARGET}.def > $$elf2e32FileToAdd
+ #QMAKE_EXTRA_TARGETS += freeze_target
+} else:contains(TEMPLATE, subdirs) {
+ freeze_target.target = freeze
+ freeze_target.CONFIG = recursive
+ freeze_target.recurse = $$SUBDIRS
+ #QMAKE_EXTRA_TARGETS += freeze_target
+} else {
+ freeze_target.target = freeze
+ freeze_target.commands =
+ #QMAKE_EXTRA_TARGETS += freeze_target
}
diff --git a/mkspecs/symbian/features/symbian_building.prf b/mkspecs/symbian/features/symbian_building.prf
index 5c1a16d..a7663af 100644
--- a/mkspecs/symbian/features/symbian_building.prf
+++ b/mkspecs/symbian/features/symbian_building.prf
@@ -21,31 +21,30 @@ contains(QMAKE_CFLAGS, "--thumb")|contains(QMAKE_CXXFLAGS, "--thumb")|contains(Q
DEFINES += __MARM_THUMB__
}
-for(library, LIBS) {
- library = $$replace(library, "\.dll$", ".dso")
+defineReplace(processSymbianLibraries) {
+ library = $$replace(1, "\.dll$", ".dso")
library = $$replace(library, "^-l", "")
isFullName = $$find(library, \.)
isEmpty(isFullName):library="$${library}.dso"
linux-gcce {
- newLIBS += "-l:$${library}"
+ newLIB = "-l:$${library}"
} else {
- newLIBS += "$${library}"
+ newLIB = "$${library}"
}
+ return($$newLIB)
+}
+
+for(libraries, LIBS) {
+ newLIBS += $$processSymbianLibraries($$libraries)
}
LIBS = $$newLIBS
+PRE_TARGETDEPS += $$replace(newLIBS, "-l", "")
newLIBS =
-for(library, QMAKE_LIBS) {
- library = $$replace(library, "\.dll$", ".dso")
- library = $$replace(library, "^-l", "")
- isFullName = $$find(library, \.)
- isEmpty(isFullName):library="$${library}.dso"
- linux-gcce {
- newLIBS += "-l:$${library}"
- } else {
- newLIBS += "$${library}"
- }
+for(libraries, QMAKE_LIBS) {
+ newLIBS += $$processSymbianLibraries($$libraries)
}
QMAKE_LIBS = $$newLIBS
+PRE_TARGETDEPS += $$replace(newLIBS, "-l", "")
linux-gcce {
QMAKE_LIBS += -l:usrt2_2.lib \
@@ -102,12 +101,32 @@ isEmpty(capability): capability = "None"
capability = "--capability=$$capability"
contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
- !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += &&
- QMAKE_POST_LINK += $$QMAKE_MOVE $$symbianDestdir/$${TARGET}.dll $$symbianDestdir/$${TARGET}.sym
- # the tee and grep at the end work around the issue that elf2e32 doesn't return non-null on error
- QMAKE_POST_LINK += && elf2e32 --version=$$decVersion --sid=$$TARGET.SID --uid1=0x10000079 --uid2=$$TARGET.UID2 --uid3=$$TARGET.UID3 --dlldata --heap=0x00020000,0x00800000 --stack=0x00014000 --fpu=softvfp --targettype=DLL --elfinput=$${symbianDestdir}/$${TARGET}.sym --output=$${symbianDestdir}/$${TARGET}.dll --dso=$$symbianDestdir/$${TARGET}.dso --defoutput=$$symbianObjdir/$${TARGET}.def --unfrozen --linkas=$${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll --compressionmethod bytepair $$elf2e32_LIBPATH --unpaged $$capability | tee elf2e32.log && test `grep -c 'Error:' elf2e32.log` = 0 && rm elf2e32.log
+ !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 --dlldata --heap=0x00020000,0x00800000 \
+ --stack=0x00014000 --fpu=softvfp --targettype=DLL \
+ --elfinput=$${symbianDestdir}/$${TARGET}.sym --output=$${symbianDestdir}/$${TARGET}.dll \
+ --dso=$$symbianObjdir/$${TARGET}.dso --defoutput=$$symbianObjdir/$${TARGET}.def \
+ --unfrozen --linkas=$${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll \
+ --compressionmethod bytepair $$elf2e32_LIBPATH --unpaged $$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: {
@@ -121,11 +140,22 @@ contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib) {
}
contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@.*") {
- !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += &&
-
- QMAKE_POST_LINK += $$QMAKE_MOVE $$symbianDestdir/$${TARGET} $$symbianDestdir/$${TARGET}.sym
+ !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 += && elf2e32 --version $$decVersion --sid=$$TARGET.SID --uid1=0x1000007a --uid2=$$TARGET.UID2 --uid3=$$TARGET.UID3 --dlldata --heap=0x00020000,0x00800000 --stack=0x00014000 --fpu=softvfp --targettype=EXE --elfinput=$${symbianDestdir}/$${TARGET}.sym --output=$${symbianDestdir}/$${TARGET}.exe --unfrozen --linkas=$${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe --compressionmethod bytepair $$elf2e32_LIBPATH --unpaged $$capability | tee elf2e32.log && test `grep -c 'Error:' elf2e32.log` = 0 && rm elf2e32.log
+ QMAKE_POST_LINK = $$QMAKE_MOVE $$symbianDestdir/$${TARGET} $$symbianDestdir/$${TARGET}.sym \
+ && elf2e32 --version $$decVersion --sid=$$TARGET.SID --uid1=0x1000007a \
+ --uid2=$$TARGET.UID2 --uid3=$$TARGET.UID3 --dlldata --heap=0x00020000,0x00800000 \
+ --stack=0x00014000 --fpu=softvfp --targettype=EXE \
+ --elfinput=$${symbianDestdir}/$${TARGET}.sym --output=$${symbianDestdir}/$${TARGET}.exe \
+ --unfrozen --linkas=$${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe \
+ --compressionmethod bytepair $$elf2e32_LIBPATH --unpaged $$capability \
+ $$QMAKE_ELF2E32_FLAGS \
+ | tee elf2e32.log && test `grep -c 'Error:' elf2e32.log` = 0 && rm elf2e32.log \
+ $$QMAKE_POST_LINK
QMAKE_POST_LINK += && ln "$${TARGET}.exe" "$$TARGET"
QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.sym
QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.exe