From 9f0899d86afcc2304c9de824c43e363d2a881339 Mon Sep 17 00:00:00 2001 From: Thomas Zander Date: Mon, 22 Feb 2010 13:52:39 +0100 Subject: Clone the symbian/armcc mkspec for symbian/gcce. Very first start. --- mkspecs/common/symbian/symbian-makefile.conf | 12 -- .../linux-armcc/features/symbian_building.prf | 13 +- .../symbian/linux-gcce/features/default_post.prf | 5 + mkspecs/symbian/linux-gcce/features/qt.prf | 29 +++ .../linux-gcce/features/symbian_building.prf | 207 +++++++++++++++++++++ mkspecs/symbian/linux-gcce/platformlibs.conf | 1 + mkspecs/symbian/linux-gcce/qmake.conf | 16 ++ mkspecs/symbian/linux-gcce/qplatformdefs.h | 2 + 8 files changed, 271 insertions(+), 14 deletions(-) create mode 100644 mkspecs/symbian/linux-gcce/features/default_post.prf create mode 100644 mkspecs/symbian/linux-gcce/features/qt.prf create mode 100644 mkspecs/symbian/linux-gcce/features/symbian_building.prf create mode 100644 mkspecs/symbian/linux-gcce/platformlibs.conf create mode 100644 mkspecs/symbian/linux-gcce/qmake.conf create mode 100644 mkspecs/symbian/linux-gcce/qplatformdefs.h diff --git a/mkspecs/common/symbian/symbian-makefile.conf b/mkspecs/common/symbian/symbian-makefile.conf index c8a88dd..8c2bb35 100644 --- a/mkspecs/common/symbian/symbian-makefile.conf +++ b/mkspecs/common/symbian/symbian-makefile.conf @@ -13,18 +13,6 @@ 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_CFLAGS += --dllimport_runtime --preinclude rvct2_2.h --diag_suppress 186,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --no_vfe --apcs /inter -QMAKE_CXXFLAGS += $$QMAKE_CFLAGS --no_parse_templates -QMAKE_LFLAGS += --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --rw-base 0x800000 --dll --no_scanlib -QMAKE_LFLAGS_APP += --entry _E32Startup -QMAKE_LFLAGS_SHLIB += --entry _E32Dll -QMAKE_CFLAGS_DEBUG += -g -QMAKE_CXXFLAGS_DEBUG += -g -QMAKE_CFLAGS_RELEASE += -O2 -Otime -QMAKE_CXXFLAGS_RELEASE += -O2 -Otime - -DEFINES += __SYMBIAN32__ EKA2 __S60_50__ __S60_3X__ __SERIES60_3X__ __EPOC32__ __MARM__ __EABI__ __ARMCC__ __ARMcc_2__ __ARMCC_2_2__ __MARM_ARMV5__ __MARM_INTERWORK__ __DLL__ _UNICODE __SUPPORT_CPP_EXCEPTIONS__ - include(../../common/unix.conf) QMAKE_PREFIX_SHLIB = diff --git a/mkspecs/symbian/linux-armcc/features/symbian_building.prf b/mkspecs/symbian/linux-armcc/features/symbian_building.prf index b0185d0..41d4325 100644 --- a/mkspecs/symbian/linux-armcc/features/symbian_building.prf +++ b/mkspecs/symbian/linux-armcc/features/symbian_building.prf @@ -1,5 +1,14 @@ -QMAKE_CFLAGS += $$QMAKE_CFLAGS.ARMCC -QMAKE_CXXFLAGS += $$QMAKE_CXXFLAGS.ARMCC +QMAKE_CFLAGS += --dllimport_runtime --preinclude rvct2_2.h --diag_suppress 186,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --no_vfe --apcs /inter $$QMAKE_CFLAGS.ARMCC +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS --no_parse_templates $$QMAKE_CXXFLAGS.ARMCC +QMAKE_LFLAGS += --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --rw-base 0x800000 --dll --no_scanlib +QMAKE_LFLAGS_APP += --entry _E32Startup +QMAKE_LFLAGS_SHLIB += --entry _E32Dll +QMAKE_CFLAGS_DEBUG += -g +QMAKE_CXXFLAGS_DEBUG += -g +QMAKE_CFLAGS_RELEASE += -O2 -Otime +QMAKE_CXXFLAGS_RELEASE += -O2 -Otime + +DEFINES += __SYMBIAN32__ EKA2 __S60_50__ __S60_3X__ __SERIES60_3X__ __EPOC32__ __MARM__ __EABI__ __ARMCC__ __ARMcc_2__ __ARMCC_2_2__ __MARM_ARMV5__ __MARM_INTERWORK__ __DLL__ _UNICODE __SUPPORT_CPP_EXCEPTIONS__ symbianObjdir=$$OBJECTS_DIR isEmpty(symbianObjdir) { diff --git a/mkspecs/symbian/linux-gcce/features/default_post.prf b/mkspecs/symbian/linux-gcce/features/default_post.prf new file mode 100644 index 0000000..7aa1f4d --- /dev/null +++ b/mkspecs/symbian/linux-gcce/features/default_post.prf @@ -0,0 +1,5 @@ +load(default_post.prf) + +# It is important that this config be executed last, +# and qmake does them in reverse order. +CONFIG = symbian_building $$CONFIG diff --git a/mkspecs/symbian/linux-gcce/features/qt.prf b/mkspecs/symbian/linux-gcce/features/qt.prf new file mode 100644 index 0000000..7c97368 --- /dev/null +++ b/mkspecs/symbian/linux-gcce/features/qt.prf @@ -0,0 +1,29 @@ +QMAKE_LIBDIR_QT += $${EPOCROOT}epoc32/release/armv5/lib + +INCLUDEPATH = $${EPOCROOT}epoc32/include/variant \ + $${EPOCROOT}epoc32/include/stdapis \ + $${EPOCROOT}epoc32/include/gcce \ + ${EPOCROOT}epoc32/include/stdapis/sys \ + ${EPOCROOT}epoc32/include/stdapis/stlport \ + $$INCLUDEPATH + +DEFINES *= __PRODUCT_INCLUDE__=\<$${EPOCROOT}epoc32/include/variant/symbian_os.hrh\> \ + __SYMBIAN32__ \ + __MARM_THUMB__ \ + __MARM_INTERWORK__ \ + NDEBUG \ + _UNICODE \ + __S60_50__ \ + __S60_3X__ \ + __SERIES60_3X__ \ + __GCCE__ \ + __EPOC32__ \ + __MARM__ \ + __EABI__ \ + __MARM_ARMV5__ \ + __EXE__ \ + UNICODE \ + _STLP_NO_EXCEPTION_HEADER \ + __SUPPORT_CPP_EXCEPTIONS__ + +load(qt) diff --git a/mkspecs/symbian/linux-gcce/features/symbian_building.prf b/mkspecs/symbian/linux-gcce/features/symbian_building.prf new file mode 100644 index 0000000..3e5324f --- /dev/null +++ b/mkspecs/symbian/linux-gcce/features/symbian_building.prf @@ -0,0 +1,207 @@ +gcceExtraFlags = --include=${EPOCROOT}epoc32/include/gcce/gcce.h -march=armv5t -mapcs -mthumb-interwork -nostdinc -c -fvisibility-inlines-hidden -mthumb -msoft-float -T script +QMAKE_CFLAGS += $${gcceExtraFlags} +QMAKE_CXXFLAGS += $${gcceExtraFlags} -x c++ -fexceptions -fno-unit-at-a-time + +# QMAKE_CFLAGS += --dllimport_runtime --preinclude rvct2_2.h --diag_suppress 186,654,1300 --thumb --fpu softvfp --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --no_vfe --apcs /inter $$QMAKE_CFLAGS.ARMCC +# QMAKE_CXXFLAGS += $$QMAKE_CFLAGS --no_parse_templates $$QMAKE_CXXFLAGS.ARMCC +# QMAKE_LFLAGS += --diag_suppress 6331,6780 --bpabi --reloc --datacompressor=off --split --rw-base 0x800000 --dll --no_scanlib +# QMAKE_LFLAGS_APP += --entry _E32Startup +# QMAKE_LFLAGS_SHLIB += --entry _E32Dll +# QMAKE_CFLAGS_DEBUG += -g +# QMAKE_CXXFLAGS_DEBUG += -g +# QMAKE_CFLAGS_RELEASE += -O2 -Otime +# QMAKE_CXXFLAGS_RELEASE += -O2 -Otime +# + +symbianObjdir=$$OBJECTS_DIR +isEmpty(symbianObjdir) { + symbianObjdir = . +} +symbianDestdir=$$DESTDIR +isEmpty(symbianDestdir) { + symbianDestdir = . +} + +contains(QMAKE_CFLAGS, "--thumb")|contains(QMAKE_CXXFLAGS, "--thumb") { + DEFINES += __MARM_THUMB__ +} + +for(libraries, LIBS) { + libraries = $$replace(libraries, "\.dll$", ".dso") + isFullName = $$find(libraries, \.) + isEmpty(isFullName) { + newLIBS += "$${libraries}.dso" + } else { + newLIBS += "$${libraries}" + } +} +LIBS = $$newLIBS +newLIBS = +for(libraries, QMAKE_LIBS) { + libraries = $$replace(libraries, "\.dll$", ".dso") + isFullName = $$find(libraries, \.) + isEmpty(isFullName) { + newLIBS += "$${libraries}.dso" + } else { + newLIBS += "$${libraries}" + } +} +QMAKE_LIBS = $$newLIBS + +# This needs to be done after the above LIBS mangling. +include(../platformlibs.conf) + +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, 1) { + # 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):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 + QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.sym + QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.dso + QMAKE_CLEAN += $${symbianObjdir}/$${TARGET}.def + + QMAKE_LIBS += -ledllstub.lib -ledll.lib\\(uc_dll_.o\\) + + QMAKE_LFLAGS += --symver_soname --soname $${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].dll +} + +contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@.*") { + !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK += && + + QMAKE_POST_LINK += $$QMAKE_MOVE $$symbianDestdir/$${TARGET} $$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=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 += && ln "$${TARGET}.exe" "$$TARGET" + QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.sym + QMAKE_DISTCLEAN += $${symbianDestdir}/$${TARGET}.exe + QMAKE_CLEAN += $${symbianDestdir}/$${TARGET} + + QMAKE_LIBS += -leexe.lib\\(uc_exe_.o\\) + + QMAKE_LFLAGS += --symver_soname --soname $${TARGET}\\{$${hexVersion}\\}\\[$${intUid3}\\].exe +} + +# Symbian resource files + +#linux-armcc:symbian_resources_INCLUDES = -I$$(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}.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}.rsc \ + -h$${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.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) + baseTarget = $$replace(baseTarget, -,_) + baseTarget = $$replace(baseTarget, :,_) + baseTarget = $$replace(baseTarget, \.,_) + baseTarget = $$replace(baseTarget, " ",_) + + # Make our own extra compiler target in order to get dependencies for generated + # files right. This also avoids the warning about files not found. + symbianGenResource.inputFile = $${baseTarget}.rss + symbianGenResource.input = symbianGenResource.inputFile + # Reuse the command from earlier. + symbianGenResource.commands = $$symbianresources.commands + symbianGenResource.output = $$symbianresources.output + symbianGenResource.CONFIG = no_link target_predeps + + symbianGenRegResource.inputFile = $${baseTarget}_reg.rss + symbianGenRegResource.input = symbianGenRegResource.inputFile + symbianGenRegResource.commands = $$symbianresources.commands + symbianGenRegResource.output = $$symbianresources.output + symbianGenRegResource.CONFIG = no_link target_predeps + symbianGenRegResource.depends = $${symbian_resources_RCC_DIR}/$${baseTarget}.rsg + + QMAKE_EXTRA_COMPILERS += symbianGenResource symbianGenRegResource + + QMAKE_DISTCLEAN += $${TARGET}.rss + QMAKE_DISTCLEAN += $${TARGET}.rsc + QMAKE_DISTCLEAN += $${TARGET}_reg.rss + QMAKE_DISTCLEAN += $${TARGET}_reg.rsc + QMAKE_DISTCLEAN += $${TARGET}.loc +} + +# Generated pkg files + +QMAKE_DISTCLEAN += $${TARGET}_template.pkg + +# Pre 2.6.23 Linux kernels have a limit on the environment size that can be passed to +# a forked process. We quite easily overstep this boundary when building big projects +# on Symbian, and since we depend on running the system() command, this causes the build +# to fail. Test here that system() can be successfully run. It is important that this +# check happens as late as possible, otherwise it will not be caught. +execve_sanity_test = $$system("echo testing") +!contains(execve_sanity_test, "testing") { + error("Running system() failed. Maybe your kernel is too old? (Linux kernels need at least version 2.6.23)") +} diff --git a/mkspecs/symbian/linux-gcce/platformlibs.conf b/mkspecs/symbian/linux-gcce/platformlibs.conf new file mode 100644 index 0000000..0a74ba9 --- /dev/null +++ b/mkspecs/symbian/linux-gcce/platformlibs.conf @@ -0,0 +1 @@ +QMAKE_LIBS += -lusrt2_2.lib -ldfpaeabi.dso -ldrtaeabi.dso -lscppnwdl.dso :lh_t__uf.l\\(switch8.o\\) diff --git a/mkspecs/symbian/linux-gcce/qmake.conf b/mkspecs/symbian/linux-gcce/qmake.conf new file mode 100644 index 0000000..e4b08c1 --- /dev/null +++ b/mkspecs/symbian/linux-gcce/qmake.conf @@ -0,0 +1,16 @@ +# +# qmake configuration for symbian/linux-gcce +# + +include(../../common/symbian/symbian-makefile.conf) + +include(../../common/g++.conf) + +QMAKE_CC = arm-none-symbianelf-gcc +QMAKE_CXX = arm-none-symbianelf-g++ +QMAKE_LINK = arm-none-symbianelf-g++ +QMAKE_LINK_SHLIB = arm-none-symbianelf-g++ +QMAKE_LINK_C = arm-none-symbianelf-gcc +QMAKE_LINK_C_SHLIB = arm-none-symbianelf-gcc +QMAKE_AR = arm-none-symbianelf-ar cqs + diff --git a/mkspecs/symbian/linux-gcce/qplatformdefs.h b/mkspecs/symbian/linux-gcce/qplatformdefs.h new file mode 100644 index 0000000..4a658c5 --- /dev/null +++ b/mkspecs/symbian/linux-gcce/qplatformdefs.h @@ -0,0 +1,2 @@ +#include "../../common/symbian/qplatformdefs.h" + -- cgit v0.12