summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta-tizen/meta-tizen-micro/COPYING.MIT17
-rw-r--r--meta-tizen/meta-tizen-micro/README64
-rw-r--r--meta-tizen/meta-tizen-micro/conf/layer.conf10
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch22
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs/no-registry.patch59
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs_0.12.7.bb80
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx-cross.patch218
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx-volatile.conf2
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.conf118
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.init52
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.service12
-rw-r--r--meta-tizen/meta-tizen-micro/recipes-httpd/nginx/nginx_1.9.5.bb131
-rwxr-xr-xmeta-tizen/meta-tizen-micro/recipes-image/raspberrypi2/rpi-hwup-image-tizen-micro.bb30
13 files changed, 815 insertions, 0 deletions
diff --git a/meta-tizen/meta-tizen-micro/COPYING.MIT b/meta-tizen/meta-tizen-micro/COPYING.MIT
new file mode 100644
index 0000000000..89de354795
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/COPYING.MIT
@@ -0,0 +1,17 @@
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/meta-tizen/meta-tizen-micro/README b/meta-tizen/meta-tizen-micro/README
new file mode 100644
index 0000000000..75d002bebf
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/README
@@ -0,0 +1,64 @@
+This README file contains information on the contents of the
+tizen-micro layer.
+
+Please see the corresponding sections below for details.
+
+
+Dependencies
+============
+
+This layer depends on:
+
+ URI: git://git.openembedded.org/bitbake
+ branch: master
+
+ URI: git://git.openembedded.org/openembedded-core
+ layers: meta
+ branch: master
+
+ URI: git://git.yoctoproject.org/xxxx
+ layers: xxxx
+ branch: master
+
+
+Patches
+=======
+
+Please submit any patches against the tizen-micro layer to the
+xxxx mailing list (xxxx@zzzz.org) and cc: the maintainer:
+
+Maintainer: XXX YYYYYY <xxx.yyyyyy@zzzzz.com>
+
+
+Table of Contents
+=================
+
+ I. Adding the tizen-micro layer to your build
+ II. Misc
+
+
+I. Adding the tizen-micro layer to your build
+=================================================
+
+--- replace with specific instructions for the tizen-micro layer ---
+
+In order to use this layer, you need to make the build system aware of
+it.
+
+Assuming the tizen-micro layer exists at the top-level of your
+yocto build tree, you can add it to the build system by adding the
+location of the tizen-micro layer to bblayers.conf, along with any
+other layers needed. e.g.:
+
+ BBLAYERS ?= " \
+ /path/to/yocto/meta \
+ /path/to/yocto/meta-yocto \
+ /path/to/yocto/meta-yocto-bsp \
+ /path/to/yocto/meta-tizen-micro \
+ "
+
+
+II. Misc
+========
+
+--- replace with specific information about the tizen-micro layer ---
diff --git a/meta-tizen/meta-tizen-micro/conf/layer.conf b/meta-tizen/meta-tizen-micro/conf/layer.conf
new file mode 100644
index 0000000000..8604b24cf5
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/conf/layer.conf
@@ -0,0 +1,10 @@
+# We have a conf and classes directory, append to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have a recipes directory containing .bb and .bbappend files, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes*/*/*.bb \
+ ${LAYERDIR}/recipes*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "tizen-micro"
+BBFILE_PATTERN_tizen-micro := "^${LAYERDIR}/"
+BBFILE_PRIORITY_tizen-micro = "9" \ No newline at end of file
diff --git a/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch b/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch
new file mode 100644
index 0000000000..cc7c9ab570
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs/enable-armv5e-build.patch
@@ -0,0 +1,22 @@
+Building for qemuarm without thumb enabled is using -march=armv5e which isn't
+recognized here. Fix it by adding __ARM_ARCH_5E__.
+
+v0.12.2 branch of node doesn't seem to be affected, because it's using
+different version of v8
+
+Upstream-Status: Pending
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+diff -uNr node-v0.12.2/deps/v8/src/base/atomicops_internals_arm_gcc.h node-v0.12.2-fix/deps/v8/src/base/atomicops_internals_arm_gcc.h
+--- node-v0.12.2/deps/v8/src/base/atomicops_internals_arm_gcc.h 2015-04-01 00:13:01.000000000 +0200
++++ node-v0.12.2-fix/deps/v8/src/base/atomicops_internals_arm_gcc.h 2015-04-28 14:30:43.119509207 +0200
+@@ -156,7 +156,7 @@
+
+ // This tests against any known ARMv5 variant.
+ #elif defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || \
+- defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
++ defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) || defined(__ARM_ARCH_5TEJ__)
+
+ // The kernel also provides a helper function to perform an atomic
+ // compare-and-swap operation at the hard-wired address 0xffff0fc0.
diff --git a/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs/no-registry.patch b/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs/no-registry.patch
new file mode 100644
index 0000000000..ed24738976
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs/no-registry.patch
@@ -0,0 +1,59 @@
+Bugfix for --no-registry in nodejs-v0.12.2
+
+diff -u -r node-v0.12.2_def/deps/npm/lib/cache/caching-client.js node-v0.12.2/deps/npm/lib/cache/caching-client.js
+--- node-v0.12.2_def/deps/npm/lib/cache/caching-client.js 2015-04-01 01:13:01.000000000 +0300
++++ node-v0.12.2/deps/npm/lib/cache/caching-client.js 2015-05-18 00:47:10.738599686 +0300
+@@ -67,6 +67,22 @@
+ var cacheBase = cacheFile(npm.config.get("cache"))(uri)
+ var cachePath = path.join(cacheBase, ".cache.json")
+
++ if (parsed.host === "noregistry") (function() {
++ var stat = null
++ var file = npm.config.get("cache") + parsed.pathname + "/.cache.json"
++ try {
++ stat = fs.statSync(cachePath)
++ } catch (ex) {}
++ if (!stat) try {
++ stat = fs.statSync(file)
++ cachePath = file
++ } catch (ex) {
++ stat = "Registry not defined and registry files not found: \"" +
++ cachePath + "\", \"" + file + "\"."
++ throw new Error(stat)
++ }
++ })()
++
+ // If the GET is part of a write operation (PUT or DELETE), then
+ // skip past the cache entirely, but still save the results.
+ if (uri.match(/\?write=true$/)) {
+@@ -83,12 +99,17 @@
+ }
+ catch (ex) {
+ data = null
++ if (parsed.host === "noregistry")
++ throw new Error("File \"" + cachePath+"\"" + " corrupted.")
+ }
+
+ params.stat = stat
+ params.data = data
+
+- get_.call(client, uri, cachePath, params, cb)
++ if (parsed.host === "noregistry")
++ cb(null, data, JSON.stringify(data), { statusCode : 304 })
++ else
++ get_.call(client, uri, cachePath, params, cb)
+ })
+ }
+ else {
+diff -u -r node-v0.12.2_def/deps/npm/lib/utils/map-to-registry.js node-v0.12.2/deps/npm/lib/utils/map-to-registry.js
+--- node-v0.12.2_def/deps/npm/lib/utils/map-to-registry.js 2015-04-01 01:13:01.000000000 +0300
++++ node-v0.12.2/deps/npm/lib/utils/map-to-registry.js 2015-05-18 01:15:10.030569613 +0300
+@@ -45,6 +45,8 @@
+
+ log.silly("mapToRegistry", "registry", registry)
+
++ if (!registry) return cb(null, "http://noregistry/" + name, {})
++
+ var auth = config.getCredentialsByURI(registry)
+
+ // normalize registry URL so resolution doesn't drop a piece of registry URL
diff --git a/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs_0.12.7.bb b/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs_0.12.7.bb
new file mode 100644
index 0000000000..41eb5eec87
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-devtools/nodejs/nodejs_0.12.7.bb
@@ -0,0 +1,80 @@
+DESCRIPTION = "nodeJS Evented I/O for V8 JavaScript"
+HOMEPAGE = "http://nodejs.org"
+LICENSE = "MIT & BSD & Artistic-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=14115ff11211df04b031ec7d40b6d31b"
+
+DEPENDS = "openssl"
+
+SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.gz \
+ file://enable-armv5e-build.patch \
+ file://no-registry.patch \
+"
+SRC_URI[md5sum] = "5523ec4347d7fe6b0f6dda1d1c7799d5"
+SRC_URI[sha256sum] = "b23d64df051c9c969b0c583f802d5d71de342e53067127a5061415be7e12f39d"
+
+S = "${WORKDIR}/node-v${PV}"
+
+# v8 errors out if you have set CCACHE
+CCACHE = ""
+
+def map_nodejs_arch(a, d):
+ import re
+
+ if re.match('p(pc|owerpc)(|64)', a): return 'ppc'
+ elif re.match('i.86$', a): return 'ia32'
+ elif re.match('x86_64$', a): return 'x64'
+ elif re.match('arm64$', a): return 'arm'
+ return a
+
+ARCHFLAGS_arm = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', '--with-arm-float-abi=hard', '--with-arm-float-abi=softfp', d)}"
+GYP_DEFINES_append_mipsel = " mips_arch_variant='r1' "
+ARCHFLAGS ?= ""
+
+# Node is way too cool to use proper autotools, so we install two wrappers to forcefully inject proper arch cflags to workaround gypi
+do_configure () {
+ export LD="${CXX}"
+ GYP_DEFINES="${GYP_DEFINES}" export GYP_DEFINES
+ # $TARGET_ARCH settings don't match --dest-cpu settings
+ ./configure --prefix=${prefix} --without-snapshot --shared-openssl \
+ --dest-cpu="${@map_nodejs_arch(d.getVar('TARGET_ARCH', True), d)}" \
+ --dest-os=linux \
+ ${ARCHFLAGS}
+}
+
+do_compile () {
+ export LD="${CXX}"
+ oe_runmake BUILDTYPE=Release
+}
+
+do_install () {
+ oe_runmake install DESTDIR=${D}
+}
+
+do_install_append_class-native() {
+ # use node from PATH instead of absolute path to sysroot
+ # node-v0.10.25/tools/install.py is using:
+ # shebang = os.path.join(node_prefix, 'bin/node')
+ # update_shebang(link_path, shebang)
+ # and node_prefix can be very long path to bindir in native sysroot and
+ # when it exceeds 128 character shebang limit it's stripped to incorrect path
+ # and npm fails to execute like in this case with 133 characters show in log.do_install:
+ # updating shebang of /home/jenkins/workspace/build-webos-nightly/device/qemux86/label/open-webos-builder/BUILD-qemux86/work/x86_64-linux/nodejs-native/0.10.15-r0/image/home/jenkins/workspace/build-webos-nightly/device/qemux86/label/open-webos-builder/BUILD-qemux86/sysroots/x86_64-linux/usr/bin/npm to /home/jenkins/workspace/build-webos-nightly/device/qemux86/label/open-webos-builder/BUILD-qemux86/sysroots/x86_64-linux/usr/bin/node
+ # /usr/bin/npm is symlink to /usr/lib/node_modules/npm/bin/npm-cli.js
+ # use sed on npm-cli.js because otherwise symlink is replaced with normal file and
+ # npm-cli.js continues to use old shebang
+ sed "1s^.*^#\!/usr/bin/env node^g" -i ${D}${exec_prefix}/lib/node_modules/npm/bin/npm-cli.js
+}
+
+do_install_append_class-target() {
+ sed "1s^.*^#\!${bindir}/env node^g" -i ${D}${exec_prefix}/lib/node_modules/npm/bin/npm-cli.js
+}
+
+PACKAGES =+ "${PN}-npm"
+FILES_${PN}-npm = "${exec_prefix}/lib/node_modules ${bindir}/npm"
+RDEPENDS_${PN}-npm = "bash python-shell python-datetime python-subprocess python-textutils"
+
+PACKAGES =+ "${PN}-systemtap"
+FILES_${PN}-systemtap = "${datadir}/systemtap"
+
+
+BBCLASSEXTEND = "native"
diff --git a/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx-cross.patch b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx-cross.patch
new file mode 100644
index 0000000000..46792ba067
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx-cross.patch
@@ -0,0 +1,218 @@
+We do not have capability to run binaries when cross compiling
+
+Upstream-Status: Pending
+
+
+diff -uraN nginx-1.0.11.orig/auto/feature nginx-1.0.11/auto/feature
+--- nginx-1.0.11.orig/auto/feature 2011-05-11 06:50:19.000000000 -0500
++++ nginx-1.0.11/auto/feature 2011-12-27 13:56:42.323370040 -0600
+@@ -48,12 +48,20 @@
+
+ if [ -x $NGX_AUTOTEST ]; then
+
++ if [ ".$NGX_CROSS_COMPILE" = ".yes" ]; then
++ NGX_AUTOTEST_EXEC="true"
++ NGX_FOUND_MSG=" (not tested, cross compiling)"
++ else
++ NGX_AUTOTEST_EXEC="$NGX_AUTOTEST"
++ NGX_FOUND_MSG=""
++ fi
++
+ case "$ngx_feature_run" in
+
+ yes)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+- echo " found"
++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; then
++ echo " found$NGX_FOUND_MSG"
+ ngx_found=yes
+
+ if test -n "$ngx_feature_name"; then
+@@ -67,17 +75,27 @@
+
+ value)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
+- echo " found"
++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; then
++ echo " found$NGX_FOUND_MSG"
+ ngx_found=yes
+
+- cat << END >> $NGX_AUTO_CONFIG_H
++ if [ ".$NGX_CROSS_COMPILE" = ".yes" ]; then
++ cat << END >> $NGX_AUTO_CONFIG_H
+
+ #ifndef $ngx_feature_name
+-#define $ngx_feature_name `$NGX_AUTOTEST`
++#define $ngx_feature_name $(eval "echo \$NGX_WITH_${ngx_feature_name}")
+ #endif
+
+ END
++ else
++ cat << END >> $NGX_AUTO_CONFIG_H
++
++#ifndef $ngx_feature_name
++#define $ngx_feature_name `$NGX_AUTOTEST_EXEC`
++#endif
++
++END
++ fi
+ else
+ echo " found but is not working"
+ fi
+@@ -85,7 +103,7 @@
+
+ bug)
+ # /bin/sh is used to intercept "Killed" or "Abort trap" messages
+- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
++ if /bin/sh -c $NGX_AUTOTEST_EXEC >> $NGX_AUTOCONF_ERR 2>&1; then
+ echo " not found"
+
+ else
+diff -uraN nginx-1.0.11.orig/auto/options nginx-1.0.11/auto/options
+--- nginx-1.0.11.orig/auto/options 2011-12-14 07:34:16.000000000 -0600
++++ nginx-1.0.11/auto/options 2011-12-27 13:56:42.323370040 -0600
+@@ -289,6 +289,18 @@
+ --test-build-rtsig) NGX_TEST_BUILD_RTSIG=YES ;;
+ --test-build-solaris-sendfilev) NGX_TEST_BUILD_SOLARIS_SENDFILEV=YES ;;
+
++ # cross compile support
++ --with-int=*) NGX_WITH_INT="$value" ;;
++ --with-long=*) NGX_WITH_LONG="$value" ;;
++ --with-long-long=*) NGX_WITH_LONG_LONG="$value" ;;
++ --with-ptr-size=*) NGX_WITH_PTR_SIZE="$value" ;;
++ --with-sig-atomic-t=*) NGX_WITH_SIG_ATOMIC_T="$value" ;;
++ --with-size-t=*) NGX_WITH_SIZE_T="$value" ;;
++ --with-off-t=*) NGX_WITH_OFF_T="$value" ;;
++ --with-time-t=*) NGX_WITH_TIME_T="$value" ;;
++ --with-sys-nerr=*) NGX_WITH_NGX_SYS_NERR="$value" ;;
++ --with-endian=*) NGX_WITH_ENDIAN="$value" ;;
++
+ *)
+ echo "$0: error: invalid option \"$option\""
+ exit 1
+@@ -434,6 +446,17 @@
+
+ --with-debug enable debug logging
+
++ --with-int=VALUE force int size
++ --with-long=VALUE force long size
++ --with-long-long=VALUE force long long size
++ --with-ptr-size=VALUE force pointer size
++ --with-sig-atomic-t=VALUE force sig_atomic_t size
++ --with-size-t=VALUE force size_t size
++ --with-off-t=VALUE force off_t size
++ --with-time-t=VALUE force time_t size
++ --with-sys-nerr=VALUE force sys_nerr value
++ --with-endian=VALUE force system endianess
++
+ END
+
+ exit 1
+@@ -455,6 +478,8 @@
+
+ if [ ".$NGX_PLATFORM" = ".win32" ]; then
+ NGX_WINE=$WINE
++elif [ ! -z "$NGX_PLATFORM" ]; then
++ NGX_CROSS_COMPILE="yes"
+ fi
+
+
+diff -uraN nginx-1.0.11.orig/auto/types/sizeof nginx-1.0.11/auto/types/sizeof
+--- nginx-1.0.11.orig/auto/types/sizeof 2006-06-28 11:00:26.000000000 -0500
++++ nginx-1.0.11/auto/types/sizeof 2011-12-27 13:56:42.323370040 -0600
+@@ -12,9 +12,12 @@
+
+ END
+
+-ngx_size=
++ngx_size=$(eval "echo \$NGX_WITH_${ngx_param}")
+
+-cat << END > $NGX_AUTOTEST.c
++if [ ".$ngx_size" != "." ]; then
++ echo " $ngx_size bytes"
++else
++ cat << END > $NGX_AUTOTEST.c
+
+ #include <sys/types.h>
+ #include <sys/time.h>
+@@ -33,20 +36,20 @@
+ END
+
+
+-ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
+- -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
++ ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
++ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
+
+-eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
++ eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
+
+
+-if [ -x $NGX_AUTOTEST ]; then
+- ngx_size=`$NGX_AUTOTEST`
+- echo " $ngx_size bytes"
+-fi
++ if [ -x $NGX_AUTOTEST ]; then
++ ngx_size=`$NGX_AUTOTEST`
++ echo " $ngx_size bytes"
++ fi
+
+
+-rm -rf $NGX_AUTOTEST*
+-
++ rm -rf $NGX_AUTOTEST*
++fi
+
+ case $ngx_size in
+ 4)
+diff -uraN nginx-1.0.11.orig/auto/unix nginx-1.0.11/auto/unix
+--- nginx-1.0.11.orig/auto/unix 2011-12-14 07:34:16.000000000 -0600
++++ nginx-1.0.11/auto/unix 2011-12-27 13:56:42.327370060 -0600
+@@ -393,13 +393,13 @@
+
+ # C types
+
+-ngx_type="int"; . auto/types/sizeof
++ngx_type="int"; ngx_param="INT"; . auto/types/sizeof
+
+-ngx_type="long"; . auto/types/sizeof
++ngx_type="long"; ngx_param="LONG"; . auto/types/sizeof
+
+-ngx_type="long long"; . auto/types/sizeof
++ngx_type="long long"; ngx_param="LONG_LONG"; . auto/types/sizeof
+
+-ngx_type="void *"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
++ngx_type="void *"; ngx_param="PTR_SIZE"; . auto/types/sizeof; ngx_ptr_size=$ngx_size
+ ngx_param=NGX_PTR_SIZE; ngx_value=$ngx_size; . auto/types/value
+
+
+@@ -416,7 +416,7 @@
+
+ ngx_type="uint64_t"; ngx_types="u_int64_t"; . auto/types/typedef
+
+-ngx_type="sig_atomic_t"; ngx_types="int"; . auto/types/typedef
++ngx_type="sig_atomic_t"; ngx_param="SIG_ATOMIC_T"; ngx_types="int"; . auto/types/typedef
+ . auto/types/sizeof
+ ngx_param=NGX_SIG_ATOMIC_T_SIZE; ngx_value=$ngx_size; . auto/types/value
+
+@@ -432,15 +432,15 @@
+
+ . auto/endianess
+
+-ngx_type="size_t"; . auto/types/sizeof
++ngx_type="size_t"; ngx_param="SIZE_T"; . auto/types/sizeof
+ ngx_param=NGX_MAX_SIZE_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
+ ngx_param=NGX_SIZE_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+
+-ngx_type="off_t"; . auto/types/sizeof
++ngx_type="off_t"; ngx_param="OFF_T"; . auto/types/sizeof
+ ngx_param=NGX_MAX_OFF_T_VALUE; ngx_value=$ngx_max_value; . auto/types/value
+ ngx_param=NGX_OFF_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+
+-ngx_type="time_t"; . auto/types/sizeof
++ngx_type="time_t"; ngx_param="TIME_T"; . auto/types/sizeof
+ ngx_param=NGX_TIME_T_SIZE; ngx_value=$ngx_size; . auto/types/value
+ ngx_param=NGX_TIME_T_LEN; ngx_value=$ngx_max_len; . auto/types/value
+
diff --git a/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx-volatile.conf b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx-volatile.conf
new file mode 100644
index 0000000000..93f3c66345
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx-volatile.conf
@@ -0,0 +1,2 @@
+d www www-data 0755 /run/nginx none
+d root root 0755 /var/log/nginx none
diff --git a/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.conf b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.conf
new file mode 100644
index 0000000000..fb7e4b65da
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.conf
@@ -0,0 +1,118 @@
+
+user www-data;
+worker_processes 1;
+
+error_log /var/log/nginx/error.log;
+#error_log logs/error.log notice;
+#error_log logs/error.log info;
+
+pid /run/nginx/nginx.pid;
+
+
+events {
+ worker_connections 1024;
+}
+
+
+http {
+ include mime.types;
+ default_type application/octet-stream;
+
+ log_format main '$remote_addr - $remote_user [$time_local] "$request" '
+ '$status $body_bytes_sent "$http_referer" '
+ '"$http_user_agent" "$http_x_forwarded_for"';
+
+ access_log /var/log/nginx/access.log main;
+
+ sendfile on;
+ #tcp_nopush on;
+
+ #keepalive_timeout 0;
+ keepalive_timeout 65;
+
+ #gzip on;
+
+ server {
+ listen 80;
+ server_name localhost;
+
+ #charset koi8-r;
+
+ #access_log logs/host.access.log main;
+
+ location / {
+ root /var/www/localhost/html;
+ index index.html index.htm;
+ }
+
+ #error_page 404 /404.html;
+
+ # redirect server error pages to the static page /50x.html
+ #
+ error_page 500 502 503 504 /50x.html;
+ location = /50x.html {
+ root /var/www/localhost/html;
+ }
+
+ # proxy the PHP scripts to Apache listening on 127.0.0.1:80
+ #
+ #location ~ \.php$ {
+ # proxy_pass http://127.0.0.1;
+ #}
+
+ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
+ #
+ #location ~ \.php$ {
+ # root html;
+ # fastcgi_pass 127.0.0.1:9000;
+ # fastcgi_index index.php;
+ # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
+ # include fastcgi_params;
+ #}
+
+ # deny access to .htaccess files, if Apache's document root
+ # concurs with nginx's one
+ #
+ #location ~ /\.ht {
+ # deny all;
+ #}
+ }
+
+
+ # another virtual host using mix of IP-, name-, and port-based configuration
+ #
+ #server {
+ # listen 8000;
+ # listen somename:8080;
+ # server_name somename alias another.alias;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+
+ # HTTPS server
+ #
+ #server {
+ # listen 443;
+ # server_name localhost;
+
+ # ssl on;
+ # ssl_certificate cert.pem;
+ # ssl_certificate_key cert.key;
+
+ # ssl_session_timeout 5m;
+
+ # ssl_protocols SSLv2 SSLv3 TLSv1;
+ # ssl_ciphers HIGH:!aNULL:!MD5;
+ # ssl_prefer_server_ciphers on;
+
+ # location / {
+ # root html;
+ # index index.html index.htm;
+ # }
+ #}
+
+}
diff --git a/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.init b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.init
new file mode 100644
index 0000000000..0f38b9cdb7
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.init
@@ -0,0 +1,52 @@
+#! /bin/sh
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+DAEMON=/usr/sbin/nginx
+NAME=nginx
+DESC=nginx
+PID=/var/run/nginx/nginx.pid
+
+test -x $DAEMON || exit 0
+
+# Include nginx defaults if available
+if [ -f /etc/default/nginx ] ; then
+ . /etc/default/nginx
+fi
+
+set -e
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon --start --quiet --pidfile $PID \
+ --name $NAME --exec $DAEMON -- $DAEMON_OPTS
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon -K --quiet --pidfile $PID \
+ --name $NAME
+ echo "$NAME."
+ ;;
+ restart|force-reload)
+ echo -n "Restarting $DESC: "
+ start-stop-daemon -K --quiet --pidfile $PID \
+ --name $NAME
+ sleep 1
+ start-stop-daemon --start --quiet --pidfile $PID \
+ --name $NAME --exec $DAEMON -- $DAEMON_OPTS
+ echo "$NAME."
+ ;;
+ reload)
+ echo -n "Reloading $DESC configuration: "
+ start-stop-daemon --stop --signal HUP --quiet --pidfile $PID \
+ --exec $DAEMON
+ echo "$NAME."
+ ;;
+ *)
+ N=/etc/init.d/$NAME
+ echo "Usage: $N {start|stop|restart|force-reload}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.service b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.service
new file mode 100644
index 0000000000..705450e471
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/files/nginx.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Nginx Server
+After=network.target
+[Service]
+Type=forking
+PIDFile=@SYSCONFDIR@/nginx/run/nginx.pid
+ExecStartPre=mkdir -p @LOCALSTATEDIR@/log/nginx
+ExecStart=@SYSCONFDIR@/init.d/nginx start
+ExecStop=@SYSCONFDIR@/init.d/nginx stop
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/nginx_1.9.5.bb b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/nginx_1.9.5.bb
new file mode 100644
index 0000000000..a251523bc8
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-httpd/nginx/nginx_1.9.5.bb
@@ -0,0 +1,131 @@
+SUMMARY = "HTTP and reverse proxy server"
+
+DESCRIPTION = "Nginx is a web server and a reverse proxy server for \
+HTTP, SMTP, POP3 and IMAP protocols, with a strong focus on high \
+concurrency, performance and low memory usage."
+
+HOMEPAGE = "http://nginx.org/"
+LICENSE = "BSD-2-Clause"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=3845852aedfa8d6d7765f55d06cc3ebd"
+SECTION = "net"
+
+DEPENDS = "libpcre gzip openssl"
+
+SRC_URI = " \
+ http://nginx.org/download/nginx-${PV}.tar.gz \
+ file://nginx-cross.patch \
+ file://nginx.conf \
+ file://nginx.init \
+ file://nginx-volatile.conf \
+ file://nginx.service \
+"
+SRC_URI[md5sum] = "2562320f1535e3e31d165e337ae94f21"
+SRC_URI[sha256sum] = "48e2787a6b245277e37cb7c5a31b1549a0bbacf288aa4731baacf9eaacdb481b"
+
+inherit update-rc.d useradd
+
+CFLAGS_append = " -fPIE -pie"
+CXXFLAGS_append = " -fPIE -pie"
+
+do_configure () {
+ if [ "${SITEINFO_BITS}" = "64" ]; then
+ PTRSIZE=8
+ else
+ PTRSIZE=4
+ fi
+
+ echo $CFLAGS
+ echo $LDFLAGS
+
+ ./configure \
+ --crossbuild=Linux:${TUNE_ARCH} \
+ --with-endian=${@base_conditional('SITEINFO_ENDIANNESS', 'le', 'little', 'big', d)} \
+ --with-int=4 \
+ --with-long=${PTRSIZE} \
+ --with-long-long=8 \
+ --with-ptr-size=${PTRSIZE} \
+ --with-sig-atomic-t=${PTRSIZE} \
+ --with-size-t=${PTRSIZE} \
+ --with-off-t=${PTRSIZE} \
+ --with-time-t=${PTRSIZE} \
+ --with-sys-nerr=132 \
+ --conf-path=${sysconfdir}/nginx/nginx.conf \
+ --http-log-path=${localstatedir}/log/nginx/access.log \
+ --error-log-path=${localstatedir}/log/nginx/error.log \
+ --pid-path=/run/nginx/nginx.pid \
+ --prefix=${prefix} \
+ --with-http_ssl_module \
+ --with-http_gzip_static_module
+}
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+ rm -fr ${D}${localstatedir}/run ${D}/run
+ if ${@base_contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
+ install -d ${D}${sysconfdir}/tmpfiles.d
+ echo "d /run/${BPN} - - - -" \
+ > ${D}${sysconfdir}/tmpfiles.d/${BPN}.conf
+ fi
+ install -d ${D}${sysconfdir}/${BPN}
+ ln -snf ${localstatedir}/run/${BPN} ${D}${sysconfdir}/${BPN}/run
+ install -d ${D}${localstatedir}/www/localhost
+ mv ${D}/usr/html ${D}${localstatedir}/www/localhost/
+ chown www:www-data -R ${D}${localstatedir}
+
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/nginx.init ${D}${sysconfdir}/init.d/nginx
+ sed -i 's,/usr/sbin/,${sbindir}/,g' ${D}${sysconfdir}/init.d/nginx
+ sed -i 's,/etc/,${sysconfdir}/,g' ${D}${sysconfdir}/init.d/nginx
+
+ install -d ${D}${sysconfdir}/nginx
+ install -m 0644 ${WORKDIR}/nginx.conf ${D}${sysconfdir}/nginx/nginx.conf
+ sed -i 's,/var/,${localstatedir}/,g' ${D}${sysconfdir}/nginx/nginx.conf
+ install -d ${D}${sysconfdir}/nginx/sites-enabled
+
+ install -d ${D}${sysconfdir}/default/volatiles
+ install -m 0644 ${WORKDIR}/nginx-volatile.conf ${D}${sysconfdir}/default/volatiles/99_nginx
+ sed -i 's,/var/,${localstatedir}/,g' ${D}${sysconfdir}/default/volatiles/99_nginx
+
+ if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)};then
+ install -d ${D}${systemd_unitdir}/system
+ install -m 0644 ${WORKDIR}/nginx.service ${D}${systemd_unitdir}/system/
+ sed -i -e 's,@SYSCONFDIR@,${sysconfdir},g' \
+ -e 's,@LOCALSTATEDIR@,${localstatedir},g' \
+ ${D}${systemd_unitdir}/system/nginx.service
+ fi
+}
+
+pkg_postinst_${PN} () {
+ if [ -z "$D" ]; then
+ if type systemd-tmpfiles >/dev/null; then
+ systemd-tmpfiles --create
+ elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then
+ ${sysconfdir}/init.d/populate-volatile.sh update
+ fi
+ fi
+}
+
+FILES_${PN} += "${localstatedir}/ \
+ ${systemd_unitdir}/system/nginx.service \
+ "
+
+CONFFILES_${PN} = "${sysconfdir}/nginx/nginx.conf \
+ ${sysconfdir}/nginx/fastcgi.conf\
+ ${sysconfdir}/nginx/fastcgi_params \
+ ${sysconfdir}/nginx/koi-utf \
+ ${sysconfdir}/nginx/koi-win \
+ ${sysconfdir}/nginx/mime.types \
+ ${sysconfdir}/nginx/scgi_params \
+ ${sysconfdir}/nginx/uwsgi_params \
+ ${sysconfdir}/nginx/win-utf \
+"
+
+INITSCRIPT_NAME = "nginx"
+INITSCRIPT_PARAMS = "defaults 92 20"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = " \
+ --system --no-create-home \
+ --home ${localstatedir}/www/localhost \
+ --groups www-data \
+ --user-group www"
diff --git a/meta-tizen/meta-tizen-micro/recipes-image/raspberrypi2/rpi-hwup-image-tizen-micro.bb b/meta-tizen/meta-tizen-micro/recipes-image/raspberrypi2/rpi-hwup-image-tizen-micro.bb
new file mode 100755
index 0000000000..6f130aabeb
--- /dev/null
+++ b/meta-tizen/meta-tizen-micro/recipes-image/raspberrypi2/rpi-hwup-image-tizen-micro.bb
@@ -0,0 +1,30 @@
+# Base this image on rpi-hwup-image
+include recipes-core/images/rpi-hwup-image.bb
+
+CORE_IMAGE_EXTRA_INSTALL += "nodejs"
+CORE_IMAGE_EXTRA_INSTALL += "nodejs-npm"
+CORE_IMAGE_EXTRA_INSTALL += "nginx"
+CORE_IMAGE_EXTRA_INSTALL += "wpa-supplicant"
+CORE_IMAGE_EXTRA_INSTALL += "openssh openssh-sftp-server"
+CORE_IMAGE_EXTRA_INSTALL += "systemd-serialgetty util-linux-agetty procps"
+CORE_IMAGE_EXTRA_INSTALL += "userland"
+
+# Set root password to "root"
+ROOTFS_POSTPROCESS_COMMAND += "set_root_passwd;"
+set_root_passwd() {
+ sed 's%^root:[^:]*:%root:wYNffsf6sozwE:%' \
+ < ${IMAGE_ROOTFS}/etc/shadow \
+ > ${IMAGE_ROOTFS}/etc/shadow.new;
+ mv ${IMAGE_ROOTFS}/etc/shadow.new ${IMAGE_ROOTFS}/etc/shadow ;
+}
+
+def get_kernelversion_file(p):
+ fn = p + '/kernel-abiversion'
+
+ try:
+ with open(fn, 'r') as f:
+ return f.readlines()[0].strip()
+ except IOError:
+ return None
+
+STAGING_KERNEL_BUILDDIR = "${TMPDIR}/work-shared/${MACHINE}/kernel-build-artifacts"