commit 39d5113478566f16580cd4e479e07898125d331d Author: Christopher Larson Date: Fri Jul 6 11:39:08 2012 -0400 Initial commit. Signed-off-by: Christopher Larson diff --git a/conf/distro/include/tcmode-external-sourcery.inc b/conf/distro/include/tcmode-external-sourcery.inc new file mode 100644 index 0000000..18bddbe --- /dev/null +++ b/conf/distro/include/tcmode-external-sourcery.inc @@ -0,0 +1,130 @@ +# +# Configuration to use external Sourcery G++ toolchain +# + +EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}" + +TOOLCHAIN_PATH_ADD = "${EXTERNAL_TOOLCHAIN}/bin:" +PATH =. "${TOOLCHAIN_PATH_ADD}" + +CSL_TARGET_SYS_powerpc ?= "powerpc-linux-gnu" +CSL_TARGET_SYS_powerpc64 ?= "powerpc-linux-gnu" +CSL_TARGET_SYS_arm ?= "arm-none-linux-gnueabi" +CSL_TARGET_SYS_mips ?= "mips-linux-gnu" +CSL_TARGET_SYS_mipsel ?= "mips-linux-gnu" +CSL_TARGET_SYS_mips64 ?= "mips-linux-gnu" +CSL_TARGET_SYS_i686 ?= "i686-pc-linux-gnu" +CSL_TARGET_SYS_i586 ?= "i686-pc-linux-gnu" +CSL_TARGET_SYS = "${TARGET_SYS}" + +TARGET_PREFIX = "${CSL_TARGET_SYS}-" + +PREFERRED_PROVIDER_linux-libc-headers = "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc ?= "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs = "external-sourcery-toolchain" +PREFERRED_PROVIDER_libgcc = "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/libc ?= "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/libintl ?= "external-sourcery-toolchain" +PREFERRED_PROVIDER_virtual/libiconv ?= "external-sourcery-toolchain" +PREFERRED_PROVIDER_gdbserver = "external-sourcery-toolchain" + +# No need to re-compile the locale files +GLIBC_INTERNAL_USE_BINARY_LOCALE = "precompiled" +ENABLE_BINARY_LOCALE_GENERATION = "" + +TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}" + +# Point to the appropriate multilib sysroot from the external toolchain, whose +# files will be extracted into the OE sysroot +def exttc_run(d, cmd): + try: + return bb.process.run(cmd, shell=True, env={'PATH': d.getVar('PATH', True)})[0].rstrip() + except (OSError, bb.process.CmdError): + return '' + +EXTERNAL_TOOLCHAIN_SYSROOT_CMD = "${TARGET_PREFIX}gcc ${TARGET_CC_ARCH} -print-sysroot" +EXTERNAL_TOOLCHAIN_SYSROOT ??= "${@exttc_run(d, EXTERNAL_TOOLCHAIN_SYSROOT_CMD)}" + +# These bits are here temporarily to sidestep the need to use a separate set +# of tune files to pass the appropriate multilib selection arguments to the +# sourcery toolchain, as is needed to extract the sysroot content. +TUNE_CCARGS_append_x86 = " -msgxx-glibc" + +CSL_MULTILIB_ARGS[ppce500] = "-te500v1" +CSL_MULTILIB_ARGS[ppce500v2] = "-te500v2" +CSL_MULTILIB_ARGS[ppce600] = "-te600" +CSL_MULTILIB_ARGS[ppce500mc] = "-te500mc" + +def csl_multilib_arg(d): + argument = d.getVarFlag('CSL_MULTILIB_ARGS', d.getVar('DEFAULTTUNE', True) or '') + if argument: + return argument + else: + return '' + +#TUNE_CCARGS += " ${@csl_multilib_arg(d)}" +#EXTERNAL_TOOLCHAIN_SYSROOT_CMD += "${@csl_multilib_arg(d)}" + + +# Unfortunately, the CSL ia32 toolchain has non-prefixed binaries in its +# bindir (e.g. gcc, ld). To avoid this messing up our build, we avoid adding +# this bindir to our PATH, and instead add symlinks to the prefixed binaries +# to our staging toolchain bindir. + +python toolchain_metadata_setup () { + if not isinstance(e, bb.event.ConfigParsed): + return + + d = e.data + + l = d.createCopy() + l.finalize() + if os.path.exists(bb.data.expand('${EXTERNAL_TOOLCHAIN}/bin/gcc', l)): + d.setVar('TOOLCHAIN_PATH_ADD', '') +} +addhandler toolchain_metadata_setup + +python toolchain_setup () { + if not isinstance(e, bb.event.BuildStarted): + return + + d = e.data + + if not d.getVar('TOOLCHAIN_PATH_ADD', True): + populate_toolchain_links(d) +} +addhandler toolchain_setup + +def populate_toolchain_links(d): + import errno + import os + from glob import glob + + d = d.createCopy() + d.finalize() + + pattern = d.expand('${EXTERNAL_TOOLCHAIN}/bin/${TARGET_PREFIX}*') + files = glob(pattern) + if not files: + bb.fatal("Unable to populate toolchain binary symlinks in %s" % pattern) + + bindir = d.getVar('STAGING_BINDIR_TOOLCHAIN', True) + bb.mkdirhier(bindir) + for f in files: + base = os.path.basename(f) + newpath = os.path.join(bindir, base) + try: + os.symlink(f, newpath) + except OSError as exc: + if exc.errno == errno.EEXIST: + break + bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (newpath, exc)) + +require conf/distro/include/csl-versions.inc + +BUILDCFG_VARS += "CSL_VER_MAIN" diff --git a/conf/layer.conf b/conf/layer.conf new file mode 100644 index 0000000..bb85be0 --- /dev/null +++ b/conf/layer.conf @@ -0,0 +1,6 @@ +BBPATH .= ":${LAYERDIR}" +BBFILES += "${LAYERDIR}/recipes/*/*.bb \ + ${LAYERDIR}/recipes/*/*.bbappend" +BBFILE_COLLECTIONS += "sourcery" +BBFILE_PRIORITY_sourcery = "10" +BBFILE_PATTERN_sourcery = "^${LAYERDIR}/" diff --git a/conf/machine/include/tune-ppce500.inc b/conf/machine/include/tune-ppce500.inc new file mode 100644 index 0000000..9f69a8b --- /dev/null +++ b/conf/machine/include/tune-ppce500.inc @@ -0,0 +1,19 @@ +DEFAULTTUNE ?= "ppce500" + +require conf/machine/include/powerpc/arch-powerpc.inc + +TUNEVALID[ppce500] = "Enable ppce500 specific processor optimizations" +TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "ppce500", "-te500", "", d)}" + +# Note that SPE is implied by the ppce500 feature +TARGET_FPU .= "${@bb.utils.contains("TUNE_FEATURES", "ppce500", "ppc-efs", "", d)}" + +# spe is defined potentially in two places, so we want to be sure it will +# only write spe once to the ABIEXTENSIONS field. +SPEABIEXTENSION = "${@bb.utils.contains("TUNE_FEATURES", "ppce500", "spe", "", d)}" +ABIEXTENSION .= "${SPEABIEXTENSION}" + +AVAILTUNES += "ppce500" +TUNE_FEATURES_tune-ppce500 = "m32 ppce500" +TUNE_PKGARCH_tune-ppce500 = "ppce500" +PACKAGE_EXTRA_ARCHS_tune-ppce500 = "ppce500" diff --git a/conf/machine/include/tune-ppce500mc.inc b/conf/machine/include/tune-ppce500mc.inc new file mode 100644 index 0000000..1242bfc --- /dev/null +++ b/conf/machine/include/tune-ppce500mc.inc @@ -0,0 +1,14 @@ +DEFAULTTUNE ?= "ppce500mc" + +require conf/machine/include/powerpc/arch-powerpc.inc + +TUNEVALID[ppce500mc] = "Enable ppce500mc specific processor optimizations" +TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "ppce500mc", "-te500mc", "", d)}" + +AVAILTUNES += "ppce500mc" +TUNE_FEATURES_tune-ppce500mc = "m32 fpu-hard ppce500mc" +TUNE_PKGARCH_tune-ppce500mc = "ppce500mc" +PACKAGE_EXTRA_ARCHS_tune-ppce500mc = "${PACKAGE_EXTRA_ARCHS_tune-powerpc} ppce500mc" + +# glibc configure options to get e500mc specific library (for sqrt) +GLIBC_EXTRA_OECONF += "${@bb.utils.contains("TUNE_FEATURES", "ppce500mc", "-with-cpu=e500mc", "", d)}" diff --git a/conf/machine/include/tune-ppce500v2.inc b/conf/machine/include/tune-ppce500v2.inc new file mode 100644 index 0000000..695da0c --- /dev/null +++ b/conf/machine/include/tune-ppce500v2.inc @@ -0,0 +1,19 @@ +DEFAULTTUNE ?= "ppce500v2" + +require conf/machine/include/powerpc/arch-powerpc.inc + +TUNEVALID[ppce500v2] = "Enable ppce500v2 specific processor optimizations" +TUNE_CCARGS += "${@bb.utils.contains("TUNE_FEATURES", "ppce500v2", "-te500v2", "", d)}" + +# Note that SPE is implied by the ppce500v2 feature +TARGET_FPU .= "${@bb.utils.contains("TUNE_FEATURES", "ppce500v2", "ppc-efd", "", d)}" + +# spe is defined potentially in two places, so we want to be sure it will +# only write spe once to the ABIEXTENSIONS field. +SPEABIEXTENSION = "${@bb.utils.contains("TUNE_FEATURES", "ppce500v2", "spe", "", d)}" +ABIEXTENSION .= "${SPEABIEXTENSION}" + +AVAILTUNES += "ppce500v2" +TUNE_FEATURES_tune-ppce500v2 = "m32 ppce500v2" +TUNE_PKGARCH_tune-ppce500v2 = "ppce500v2" +PACKAGE_EXTRA_ARCHS_tune-ppce500v2 = "ppce500v2" diff --git a/recipes/eglibc/eglibc-sourcery.bb b/recipes/eglibc/eglibc-sourcery.bb new file mode 100644 index 0000000..2afdd8b --- /dev/null +++ b/recipes/eglibc/eglibc-sourcery.bb @@ -0,0 +1,55 @@ +require recipes-core/eglibc/eglibc.inc + +TOOLCHAIN_OPTIONS = "" + +# sourceryg++-${CSL_VER_MAIN}-${CSL_TARGET_SYS}.src.tar.bz2 +CSL_SRC_URI ??= "" +SRC_URI = "${CSL_SRC_URI} \ + file://etc/ld.so.conf \ + file://generate-supported.mk" + +LIC_FILES_CHKSUM = "file://LICENSES;md5=98a1128c4b58120182cbea3b1752d8b9 \ + file://COPYING;md5=393a5ca445f6965873eca0259a17f833 \ + file://posix/rxspencer/COPYRIGHT;md5=dc5485bb394a13b2332ec1c785f5d83a \ + file://COPYING.LIB;md5=bbb461211a33b134d42ed5ee802b37ff " + +S = "${WORKDIR}/glibc-${PV}" +B = "${WORKDIR}/build-${TARGET_SYS}" +LIBC_VER_MAIN = "${@'-'.join(CSL_VER_MAIN.split('-')[:-1])}" +PV = "${CSL_VER_LIBC}-${LIBC_VER_MAIN}" +PR = "r0" + +do_unpack[vardeps] += "unpack_libc" +do_unpack[postfuncs] += "unpack_libc" + +unpack_libc () { + rm -rf ${S} + tar jxf */glibc-${CSL_VER_MAIN}.tar.bz2 + if tar jxf */glibc_ports-${CSL_VER_MAIN}.tar.bz2; then + mv glibc-ports-${PV}/ ${S}/ports + fi +} +unpack_libc[dirs] = "${WORKDIR}" + +TUNE_CCARGS_mips := "${@oe_filter_out('-march=mips32', '${TUNE_CCARGS}', d)}" +CPPFLAGS[unexport] = "1" +LDFLAGS[unexport] = "1" +BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}" +TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}" + +export libc_cv_slibdir = "${base_libdir}" +EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \ + --without-cvs --disable-profile --disable-debug --without-gd \ + --enable-clocale=gnu \ + --enable-add-ons \ + --with-headers=${STAGING_INCDIR} \ + --without-selinux \ + ${GLIBC_EXTRA_OECONF}" + +EXTRA_OECONF += "${@get_libc_fpu_setting(bb, d)}" + +do_configure () { + CPPFLAGS="" oe_runconf +} + +require recipes-core/eglibc/eglibc-package.inc diff --git a/recipes/eglibc/etc/ld.so.conf b/recipes/eglibc/etc/ld.so.conf new file mode 100644 index 0000000..e69de29 diff --git a/recipes/eglibc/generate-supported.mk b/recipes/eglibc/generate-supported.mk new file mode 100644 index 0000000..d2a28c2 --- /dev/null +++ b/recipes/eglibc/generate-supported.mk @@ -0,0 +1,11 @@ +#!/usr/bin/make + +include $(IN) + +all: + rm -f $(OUT) + touch $(OUT) + for locale in $(SUPPORTED-LOCALES); do \ + [ $$locale = true ] && continue; \ + echo $$locale | sed 's,/, ,' >> $(OUT); \ + done diff --git a/recipes/meta/external-sourcery-toolchain.bb b/recipes/meta/external-sourcery-toolchain.bb new file mode 100644 index 0000000..ed9063d --- /dev/null +++ b/recipes/meta/external-sourcery-toolchain.bb @@ -0,0 +1,155 @@ +require recipes-core/eglibc/eglibc-package.inc + +INHIBIT_DEFAULT_DEPS = "1" + +# License applies to this recipe code, not the toolchain itself +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \ + file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" + +DEPENDS += "${@base_conditional('PREFERRED_PROVIDER_linux-libc-headers', PN, '', 'linux-libc-headers', d)}" +PROVIDES = "\ + virtual/${TARGET_PREFIX}gcc \ + virtual/${TARGET_PREFIX}g++ \ + virtual/${TARGET_PREFIX}gcc-initial \ + virtual/${TARGET_PREFIX}gcc-intermediate \ + virtual/${TARGET_PREFIX}binutils \ + virtual/${TARGET_PREFIX}compilerlibs \ + ${@base_conditional('PREFERRED_PROVIDER_linux-libc-headers', PN, 'linux-libc-headers', '', d)} \ + ${@base_conditional('PREFERRED_PROVIDER_virtual/libc', PN, 'virtual/libc virtual/libiconv virtual/libintl virtual/${TARGET_PREFIX}libc-for-gcc', '', d)} \ + libgcc \ +" +PV = "${CSL_VER_MAIN}" +PR = "r9" + +#SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/${CSL_TARGET_SYS}/arm-${PV}-${TARGET_PREFIX}i686-pc-linux-gnu.tar.bz2" + +SRC_URI = "file://SUPPORTED" + +do_install() { + # Use optimized files if available + sysroot="$(${TARGET_PREFIX}gcc ${TARGET_CC_ARCH} -print-sysroot)" + + cp -a $sysroot${base_libdir}/. ${D}${base_libdir} + cp -a $sysroot/etc/. ${D}${sysconfdir} + cp -a $sysroot/sbin/. ${D}${base_sbindir} + + install -d ${D}/usr + for usr_element in bin libexec sbin share ${base_libdir}; do + usr_path=$sysroot/usr/$usr_element + cp -a $usr_path ${D}/usr/ + done + + for datadir_element in man info; do + datadir_path=$sysroot/usr/$datadir_element + if [ -e $datadir_path ]; then + cp -a $datadir_path ${D}${datadir}/ + fi + done + + # Some toolchains have headers under the core specific area + if [ -e $sysroot/usr/include ]; then + cp -a $sysroot/usr/include/. ${D}${includedir} + else + cp -a $sysroot/../usr/include/. ${D}${includedir} + fi + + ${@base_conditional('PREFERRED_PROVIDER_linux-libc-headers', PN, '', 'rm -rf ${D}${includedir}/linux ${D}${includedir}/asm*', d)} + rm ${D}${sysconfdir}/rpc + rm -r ${D}${datadir}/zoneinfo + + cp -a ${D}${libdir}/bin/. ${D}${bindir}/ + rm ${D}${libdir}/bin/* + ln -s ../../bin/gdbserver ${D}${libdir}/bin/sysroot-gdbserver + + including_libc="${@base_conditional('PREFERRED_PROVIDER_virtual/libc', PN, '1', '', d)}" + if [ -n "$including_libc" ]; then + sed -i -e "s# ${base_libdir}# ../..${base_libdir}#g" -e "s# ${libdir}# .#g" ${D}${libdir}/libc.so + sed -i -e "s# ${base_libdir}# ../..${base_libdir}#g" -e "s# ${libdir}# .#g" ${D}${libdir}/libpthread.so + else + rm -f ${D}${base_libdir}/*.so* ${D}${libdir}/*.so* + cp -a $sysroot${base_libdir}/libgcc* ${D}${base_libdir} + cp -a $sysroot${libdir}/libstdc++* ${D}${libdir} + fi + + sed -i -e 's/__packed/__attribute__ ((packed))/' ${D}${includedir}/mtd/ubi-user.h +} + +SYSROOT_PREPROCESS_FUNCS += "external_toolchain_sysroot_adjust" +external_toolchain_sysroot_adjust() { + dest_sysroot="$(${CC} -print-sysroot | sed -e's,^${STAGING_DIR_HOST},,; s,/$,,')" + if [ -n "$dest_sysroot" ]; then + rm -f ${SYSROOT_DESTDIR}/$dest_sysroot + ln -s . ${SYSROOT_DESTDIR}/$dest_sysroot + fi + + # If the usr/lib directory doesn't exist, the toolchain fails to even + # try to find crti.o in a completely different directory (usr/lib64) + install -d ${SYSROOT_DESTDIR}/usr/lib +} + +PACKAGES =+ "libgcc libgcc-dev libstdc++ libstdc++-dev libstdc++-staticdev gdbserver gdbserver-dbg" +PACKAGES =+ "${@base_conditional('PREFERRED_PROVIDER_linux-libc-headers', PN, 'linux-libc-headers linux-libc-headers-dev', '', d)}" + +# This test should be fixed to ignore .a files in .debug dirs +INSANE_SKIP_${PN}-dbg = "staticdev" + +# We don't care about GNU_HASH in prebuilt binaries +INSANE_SKIP_${PN}-utils += "ldflags" +INSANE_SKIP_libstdc++ += "ldflags" +INSANE_SKIP_libgcc += "ldflags" +INSANE_SKIP_gdbserver += "ldflags" + +RPROVIDES_${PN}-dbg += "${TCLIBC}-dbg glibc-dbg" +RPROVIDES_${PN}-utils += "${TCLIBC}-utils glibc-utils" +RPROVIDES_${PN}-thread-db += "${TCLIBC}-thread-db glibc-thread-db" + +PKG_${PN} = "eglibc" +PKG_${PN}-dev = "eglibc-dev" +PKG_${PN}-staticdev = "eglibc-staticdev" +PKG_${PN}-doc = "eglibc-doc" +PKG_${PN}-dbg = "eglibc-dbg" +PKG_${PN}-pic = "eglibc-pic" +PKG_${PN}-utils = "eglibc-utils" +PKG_${PN}-gconv = "eglibc-gconv" +PKG_${PN}-extra-nss = "eglibc-extra-nss" +PKG_${PN}-thread-db = "eglibc-thread-db" +PKG_${PN}-pcprofile = "eglibc-pcprofile" + +PKGV = "${CSL_VER_LIBC}" +PKGV_libgcc = "${CSL_VER_GCC}" +PKGV_libgcc-dev = "${CSL_VER_GCC}" +PKGV_libstdc++ = "${CSL_VER_GCC}" +PKGV_libstdc++-dev = "${CSL_VER_GCC}" +PKGV_libstdc++-staticdev = "${CSL_VER_GCC}" +PKGV_linux-libc-headers = "${CSL_VER_KERNEL}" +PKGV_linux-libc-headers-dev = "${CSL_VER_KERNEL}" +PKGV_gdbserver = "${CSL_VER_GDB}" +PKGV_gdbserver-dbg = "${CSL_VER_GDB}" + +FILES_libgcc = "${base_libdir}/libgcc_s.so.1" +FILES_libgcc-dev = "${base_libdir}/libgcc_s.so" +FILES_libstdc++ = "${libdir}/libstdc++.so.*" +FILES_libstdc++-dev = "${includedir}/c++/${PV} \ + ${libdir}/libstdc++.so \ + ${libdir}/libstdc++.la \ + ${libdir}/libsupc++.la" +FILES_libstdc++-staticdev = "${libdir}/libstdc++.a ${libdir}/libsupc++.a" +FILES_linux-libc-headers = "${includedir}/asm* \ + ${includedir}/linux \ + ${includedir}/mtd \ + ${includedir}/rdma \ + ${includedir}/scsi \ + ${includedir}/sound \ + ${includedir}/video \ +" +FILES_gdbserver = "${bindir}/gdbserver ${libdir}/bin/sysroot-gdbserver" +FILES_gdbserver-dbg = "${bindir}/.debug/gdbserver" + +CSL_VER_MAIN ??= "" + +python () { + if not d.getVar("CSL_VER_MAIN"): + raise bb.parse.SkipPackage("External CSL toolchain not configured (CSL_VER_MAIN not set).") +} + diff --git a/recipes/meta/external-sourcery-toolchain/SUPPORTED b/recipes/meta/external-sourcery-toolchain/SUPPORTED new file mode 100644 index 0000000..3f2e010 --- /dev/null +++ b/recipes/meta/external-sourcery-toolchain/SUPPORTED @@ -0,0 +1,436 @@ +aa_DJ.UTF-8 UTF-8 +aa_DJ ISO-8859-1 +aa_ER UTF-8 +aa_ER@saaho UTF-8 +aa_ET UTF-8 +af_ZA.UTF-8 UTF-8 +af_ZA ISO-8859-1 +am_ET UTF-8 +an_ES.UTF-8 UTF-8 +an_ES ISO-8859-15 +ar_AE.UTF-8 UTF-8 +ar_AE ISO-8859-6 +ar_BH.UTF-8 UTF-8 +ar_BH ISO-8859-6 +ar_DZ.UTF-8 UTF-8 +ar_DZ ISO-8859-6 +ar_EG.UTF-8 UTF-8 +ar_EG ISO-8859-6 +ar_IN UTF-8 +ar_IQ.UTF-8 UTF-8 +ar_IQ ISO-8859-6 +ar_JO.UTF-8 UTF-8 +ar_JO ISO-8859-6 +ar_KW.UTF-8 UTF-8 +ar_KW ISO-8859-6 +ar_LB.UTF-8 UTF-8 +ar_LB ISO-8859-6 +ar_LY.UTF-8 UTF-8 +ar_LY ISO-8859-6 +ar_MA.UTF-8 UTF-8 +ar_MA ISO-8859-6 +ar_OM.UTF-8 UTF-8 +ar_OM ISO-8859-6 +ar_QA.UTF-8 UTF-8 +ar_QA ISO-8859-6 +ar_SA.UTF-8 UTF-8 +ar_SA ISO-8859-6 +ar_SD.UTF-8 UTF-8 +ar_SD ISO-8859-6 +ar_SY.UTF-8 UTF-8 +ar_SY ISO-8859-6 +ar_TN.UTF-8 UTF-8 +ar_TN ISO-8859-6 +ar_YE.UTF-8 UTF-8 +ar_YE ISO-8859-6 +az_AZ UTF-8 +as_IN UTF-8 +ast_ES.UTF-8 UTF-8 +ast_ES ISO-8859-15 +be_BY.UTF-8 UTF-8 +be_BY CP1251 +be_BY@latin UTF-8 +bem_ZM UTF-8 +ber_DZ UTF-8 +ber_MA UTF-8 +bg_BG.UTF-8 UTF-8 +bg_BG CP1251 +bho_IN UTF-8 +bn_BD UTF-8 +bn_IN UTF-8 +bo_CN UTF-8 +bo_IN UTF-8 +br_FR.UTF-8 UTF-8 +br_FR ISO-8859-1 +br_FR@euro ISO-8859-15 +brx_IN UTF-8 +bs_BA.UTF-8 UTF-8 +bs_BA ISO-8859-2 +byn_ER UTF-8 +ca_AD.UTF-8 UTF-8 +ca_AD ISO-8859-15 +ca_ES.UTF-8 UTF-8 +ca_ES ISO-8859-1 +ca_ES@euro ISO-8859-15 +ca_FR.UTF-8 UTF-8 +ca_FR ISO-8859-15 +ca_IT.UTF-8 UTF-8 +ca_IT ISO-8859-15 +crh_UA UTF-8 +cs_CZ.UTF-8 UTF-8 +cs_CZ ISO-8859-2 +csb_PL UTF-8 +cv_RU UTF-8 +cy_GB.UTF-8 UTF-8 +cy_GB ISO-8859-14 +da_DK.UTF-8 UTF-8 +da_DK ISO-8859-1 +de_AT.UTF-8 UTF-8 +de_AT ISO-8859-1 +de_AT@euro ISO-8859-15 +de_BE.UTF-8 UTF-8 +de_BE ISO-8859-1 +de_BE@euro ISO-8859-15 +de_CH.UTF-8 UTF-8 +de_CH ISO-8859-1 +de_DE.UTF-8 UTF-8 +de_DE ISO-8859-1 +de_DE@euro ISO-8859-15 +de_LU.UTF-8 UTF-8 +de_LU ISO-8859-1 +de_LU@euro ISO-8859-15 +dv_MV UTF-8 +dz_BT UTF-8 +el_GR.UTF-8 UTF-8 +el_GR ISO-8859-7 +el_CY.UTF-8 UTF-8 +el_CY ISO-8859-7 +en_AG UTF-8 +en_AU.UTF-8 UTF-8 +en_AU ISO-8859-1 +en_BW.UTF-8 UTF-8 +en_BW ISO-8859-1 +en_CA.UTF-8 UTF-8 +en_CA ISO-8859-1 +en_DK.UTF-8 UTF-8 +en_DK ISO-8859-1 +en_GB.UTF-8 UTF-8 +en_GB ISO-8859-1 +en_HK.UTF-8 UTF-8 +en_HK ISO-8859-1 +en_IE.UTF-8 UTF-8 +en_IE ISO-8859-1 +en_IE@euro ISO-8859-15 +en_IN UTF-8 +en_NG UTF-8 +en_NZ.UTF-8 UTF-8 +en_NZ ISO-8859-1 +en_PH.UTF-8 UTF-8 +en_PH ISO-8859-1 +en_SG.UTF-8 UTF-8 +en_SG ISO-8859-1 +en_US.UTF-8 UTF-8 +en_US ISO-8859-1 +en_ZA.UTF-8 UTF-8 +en_ZA ISO-8859-1 +en_ZM UTF-8 +en_ZW.UTF-8 UTF-8 +en_ZW ISO-8859-1 +es_AR.UTF-8 UTF-8 +es_AR ISO-8859-1 +es_BO.UTF-8 UTF-8 +es_BO ISO-8859-1 +es_CL.UTF-8 UTF-8 +es_CL ISO-8859-1 +es_CO.UTF-8 UTF-8 +es_CO ISO-8859-1 +es_CR.UTF-8 UTF-8 +es_CR ISO-8859-1 +es_CU UTF-8 +es_DO.UTF-8 UTF-8 +es_DO ISO-8859-1 +es_EC.UTF-8 UTF-8 +es_EC ISO-8859-1 +es_ES.UTF-8 UTF-8 +es_ES ISO-8859-1 +es_ES@euro ISO-8859-15 +es_GT.UTF-8 UTF-8 +es_GT ISO-8859-1 +es_HN.UTF-8 UTF-8 +es_HN ISO-8859-1 +es_MX.UTF-8 UTF-8 +es_MX ISO-8859-1 +es_NI.UTF-8 UTF-8 +es_NI ISO-8859-1 +es_PA.UTF-8 UTF-8 +es_PA ISO-8859-1 +es_PE.UTF-8 UTF-8 +es_PE ISO-8859-1 +es_PR.UTF-8 UTF-8 +es_PR ISO-8859-1 +es_PY.UTF-8 UTF-8 +es_PY ISO-8859-1 +es_SV.UTF-8 UTF-8 +es_SV ISO-8859-1 +es_US.UTF-8 UTF-8 +es_US ISO-8859-1 +es_UY.UTF-8 UTF-8 +es_UY ISO-8859-1 +es_VE.UTF-8 UTF-8 +es_VE ISO-8859-1 +et_EE.UTF-8 UTF-8 +et_EE ISO-8859-1 +et_EE.ISO-8859-15 ISO-8859-15 +eu_ES.UTF-8 UTF-8 +eu_ES ISO-8859-1 +eu_ES@euro ISO-8859-15 +fa_IR UTF-8 +ff_SN UTF-8 +fi_FI.UTF-8 UTF-8 +fi_FI ISO-8859-1 +fi_FI@euro ISO-8859-15 +fil_PH UTF-8 +fo_FO.UTF-8 UTF-8 +fo_FO ISO-8859-1 +fr_BE.UTF-8 UTF-8 +fr_BE ISO-8859-1 +fr_BE@euro ISO-8859-15 +fr_CA.UTF-8 UTF-8 +fr_CA ISO-8859-1 +fr_CH.UTF-8 UTF-8 +fr_CH ISO-8859-1 +fr_FR.UTF-8 UTF-8 +fr_FR ISO-8859-1 +fr_FR@euro ISO-8859-15 +fr_LU.UTF-8 UTF-8 +fr_LU ISO-8859-1 +fr_LU@euro ISO-8859-15 +fur_IT UTF-8 +fy_NL UTF-8 +fy_DE UTF-8 +ga_IE.UTF-8 UTF-8 +ga_IE ISO-8859-1 +ga_IE@euro ISO-8859-15 +gd_GB.UTF-8 UTF-8 +gd_GB ISO-8859-15 +gez_ER UTF-8 +gez_ER@abegede UTF-8 +gez_ET UTF-8 +gez_ET@abegede UTF-8 +gl_ES.UTF-8 UTF-8 +gl_ES ISO-8859-1 +gl_ES@euro ISO-8859-15 +gu_IN UTF-8 +gv_GB.UTF-8 UTF-8 +gv_GB ISO-8859-1 +ha_NG UTF-8 +he_IL.UTF-8 UTF-8 +he_IL ISO-8859-8 +hi_IN UTF-8 +hne_IN UTF-8 +hr_HR.UTF-8 UTF-8 +hr_HR ISO-8859-2 +hsb_DE ISO-8859-2 +hsb_DE.UTF-8 UTF-8 +ht_HT UTF-8 +hu_HU.UTF-8 UTF-8 +hu_HU ISO-8859-2 +hy_AM UTF-8 +hy_AM.ARMSCII-8 ARMSCII-8 +id_ID.UTF-8 UTF-8 +id_ID ISO-8859-1 +ig_NG UTF-8 +ik_CA UTF-8 +is_IS.UTF-8 UTF-8 +is_IS ISO-8859-1 +it_CH.UTF-8 UTF-8 +it_CH ISO-8859-1 +it_IT.UTF-8 UTF-8 +it_IT ISO-8859-1 +it_IT@euro ISO-8859-15 +iu_CA UTF-8 +iw_IL.UTF-8 UTF-8 +iw_IL ISO-8859-8 +ja_JP.EUC-JP EUC-JP +ja_JP.UTF-8 UTF-8 +ka_GE.UTF-8 UTF-8 +ka_GE GEORGIAN-PS +kk_KZ.UTF-8 UTF-8 +kk_KZ PT154 +kl_GL.UTF-8 UTF-8 +kl_GL ISO-8859-1 +km_KH UTF-8 +kn_IN UTF-8 +ko_KR.EUC-KR EUC-KR +ko_KR.UTF-8 UTF-8 +kok_IN UTF-8 +ks_IN UTF-8 +ks_IN@devanagari UTF-8 +ku_TR.UTF-8 UTF-8 +ku_TR ISO-8859-9 +kw_GB.UTF-8 UTF-8 +kw_GB ISO-8859-1 +ky_KG UTF-8 +lb_LU UTF-8 +lg_UG.UTF-8 UTF-8 +lg_UG ISO-8859-10 +li_BE UTF-8 +li_NL UTF-8 +lij_IT UTF-8 +lo_LA UTF-8 +lt_LT.UTF-8 UTF-8 +lt_LT ISO-8859-13 +lv_LV.UTF-8 UTF-8 +lv_LV ISO-8859-13 +mag_IN UTF-8 +mai_IN UTF-8 +mg_MG.UTF-8 UTF-8 +mg_MG ISO-8859-15 +mhr_RU UTF-8 +mi_NZ.UTF-8 UTF-8 +mi_NZ ISO-8859-13 +mk_MK.UTF-8 UTF-8 +mk_MK ISO-8859-5 +ml_IN UTF-8 +mn_MN UTF-8 +mr_IN UTF-8 +ms_MY.UTF-8 UTF-8 +ms_MY ISO-8859-1 +mt_MT.UTF-8 UTF-8 +mt_MT ISO-8859-3 +my_MM UTF-8 +nan_TW@latin UTF-8 +nb_NO.UTF-8 UTF-8 +nb_NO ISO-8859-1 +nds_DE UTF-8 +nds_NL UTF-8 +ne_NP UTF-8 +nl_AW UTF-8 +nl_BE.UTF-8 UTF-8 +nl_BE ISO-8859-1 +nl_BE@euro ISO-8859-15 +nl_NL.UTF-8 UTF-8 +nl_NL ISO-8859-1 +nl_NL@euro ISO-8859-15 +nn_NO.UTF-8 UTF-8 +nn_NO ISO-8859-1 +nr_ZA UTF-8 +nso_ZA UTF-8 +oc_FR.UTF-8 UTF-8 +oc_FR ISO-8859-1 +om_ET UTF-8 +om_KE.UTF-8 UTF-8 +om_KE ISO-8859-1 +or_IN UTF-8 +os_RU UTF-8 +pa_IN UTF-8 +pa_PK UTF-8 +pap_AN UTF-8 +pl_PL.UTF-8 UTF-8 +pl_PL ISO-8859-2 +ps_AF UTF-8 +pt_BR.UTF-8 UTF-8 +pt_BR ISO-8859-1 +pt_PT.UTF-8 UTF-8 +pt_PT ISO-8859-1 +pt_PT@euro ISO-8859-15 +ro_RO.UTF-8 UTF-8 +ro_RO ISO-8859-2 +ru_RU.KOI8-R KOI8-R +ru_RU.UTF-8 UTF-8 +ru_RU ISO-8859-5 +ru_UA.UTF-8 UTF-8 +ru_UA KOI8-U +rw_RW UTF-8 +sa_IN UTF-8 +sc_IT UTF-8 +sd_IN UTF-8 +sd_IN@devanagari UTF-8 +se_NO UTF-8 +shs_CA UTF-8 +si_LK UTF-8 +sid_ET UTF-8 +sk_SK.UTF-8 UTF-8 +sk_SK ISO-8859-2 +sl_SI.UTF-8 UTF-8 +sl_SI ISO-8859-2 +so_DJ.UTF-8 UTF-8 +so_DJ ISO-8859-1 +so_ET UTF-8 +so_KE.UTF-8 UTF-8 +so_KE ISO-8859-1 +so_SO.UTF-8 UTF-8 +so_SO ISO-8859-1 +sq_AL.UTF-8 UTF-8 +sq_AL ISO-8859-1 +sq_MK UTF-8 +sr_ME UTF-8 +sr_RS UTF-8 +sr_RS@latin UTF-8 +ss_ZA UTF-8 +st_ZA.UTF-8 UTF-8 +st_ZA ISO-8859-1 +sv_FI.UTF-8 UTF-8 +sv_FI ISO-8859-1 +sv_FI@euro ISO-8859-15 +sv_SE.UTF-8 UTF-8 +sv_SE ISO-8859-1 +sw_KE UTF-8 +sw_TZ UTF-8 +ta_IN UTF-8 +ta_LK UTF-8 +te_IN UTF-8 +tg_TJ.UTF-8 UTF-8 +tg_TJ KOI8-T +th_TH.UTF-8 UTF-8 +th_TH TIS-620 +ti_ER UTF-8 +ti_ET UTF-8 +tig_ER UTF-8 +tk_TM UTF-8 +tl_PH.UTF-8 UTF-8 +tl_PH ISO-8859-1 +tn_ZA UTF-8 +tr_CY.UTF-8 UTF-8 +tr_CY ISO-8859-9 +tr_TR.UTF-8 UTF-8 +tr_TR ISO-8859-9 +ts_ZA UTF-8 +tt_RU UTF-8 +tt_RU@iqtelif UTF-8 +ug_CN UTF-8 +uk_UA.UTF-8 UTF-8 +uk_UA KOI8-U +unm_US UTF-8 +ur_IN UTF-8 +ur_PK UTF-8 +uz_UZ ISO-8859-1 +uz_UZ@cyrillic UTF-8 +ve_ZA UTF-8 +vi_VN UTF-8 +wa_BE ISO-8859-1 +wa_BE@euro ISO-8859-15 +wa_BE.UTF-8 UTF-8 +wae_CH UTF-8 +wal_ET UTF-8 +wo_SN UTF-8 +xh_ZA.UTF-8 UTF-8 +xh_ZA ISO-8859-1 +yi_US.UTF-8 UTF-8 +yi_US CP1255 +yo_NG UTF-8 +yue_HK UTF-8 +zh_CN.GB18030 GB18030 +zh_CN.GBK GBK +zh_CN.UTF-8 UTF-8 +zh_CN GB2312 +zh_HK.UTF-8 UTF-8 +zh_HK BIG5-HKSCS +zh_SG.UTF-8 UTF-8 +zh_SG.GBK GBK +zh_SG GB2312 +zh_TW.EUC-TW EUC-TW +zh_TW.UTF-8 UTF-8 +zh_TW BIG5 +zu_ZA.UTF-8 UTF-8 +zu_ZA ISO-8859-1