(7838,17728,'2015-02-19 23:03:11','2015-02-19 23:03:11','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page is organized into the following sections:</p>\n\n<ul>\n<li><a href=\"#intro\">Introduction to ArrayFire</a></li>\n<li><a href=\"#require\">Requirements for Students</a></li>\n<li><a href=\"#ideas\">List of Ideas</a> \n\n<ul>\n<li><a href=\"#ml\">GPU accelerated Machine Learning</a></li>\n<li><a href=\"#bindings\">Language bindings for ArrayFire</a></li>\n<li><a href=\"#graphics\">Visualization using OpenGL</a></li>\n</ul></li>\n</ul>\n\n<p><a name=\"intro\" /></p>\n\n<h4>Introduction to ArrayFire</h4>\n\n<p><a name=\"require\" /></p>\n\n<h4>Requirements for Students</h4>\n\n<p><a name=\"ideas\" /></p>\n\n<h4>List of Ideas</h4>\n\n<p><a name=\"ml\" /></p>\n\n<h5>GPU accelerated Machine Learning</h5>\n\n<p><a name=\"graphics\" /></p>\n\n<h5>Visualization using OpenGL</h5>\n\n<p><a name=\"bindings\" /></p>\n\n<h5>Language bindings for ArrayFire</h5>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:03:11','2015-02-19 23:03:11','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7839,17728,'2015-02-19 23:03:31','2015-02-19 23:03:31','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page is organized into the following sections:</p>\n\n<ul>\n<li><a href=\"#intro\">Introduction to ArrayFire</a></li>\n<li><a href=\"#require\">Requirements for Students</a></li>\n<li><a href=\"#ideas\">List of Ideas</a> \n\n<ul>\n<li><a href=\"#ml\">GPU accelerated Machine Learning</a></li>\n<li><a href=\"#bindings\">Language bindings for ArrayFire</a></li>\n<li><a href=\"#graphics\">Visualization using OpenGL</a></li>\n</ul></li>\n</ul>\n\n<p><a name=\"intro\" /></p>\n\n<h4>Introduction to ArrayFire</h4>\n\n<p><a name=\"require\" /></p>\n\n<h4>Requirements for Students</h4>\n\n<p><a name=\"ideas\" /></p>\n\n<h4>List of Ideas</h4>\n\n<p><a name=\"ml\" /></p>\n\n<ul>\n<li>##### GPU accelerated Machine Learning</li>\n</ul>\n\n<p><a name=\"graphics\" /></p>\n\n<ul>\n<li>##### Visualization using OpenGL</li>\n</ul>\n\n<p><a name=\"bindings\" /></p>\n\n<ul>\n<li>##### Language bindings for ArrayFire</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:03:31','2015-02-19 23:03:31','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7840,17728,'2015-02-19 23:03:51','2015-02-19 23:03:51','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page is organized into the following sections:</p>\n\n<ul>\n<li><a href=\"#intro\">Introduction to ArrayFire</a></li>\n<li><a href=\"#require\">Requirements for Students</a></li>\n<li><a href=\"#ideas\">List of Ideas</a> \n\n<ul>\n<li><a href=\"#ml\">GPU accelerated Machine Learning</a></li>\n<li><a href=\"#bindings\">Language bindings for ArrayFire</a></li>\n<li><a href=\"#graphics\">Visualization using OpenGL</a></li>\n</ul></li>\n</ul>\n\n<p><a name=\"intro\" /></p>\n\n<h4>Introduction to ArrayFire</h4>\n\n<p><a name=\"require\" /></p>\n\n<h4>Requirements for Students</h4>\n\n<p><a name=\"ideas\" /></p>\n\n<h4>List of Ideas</h4>\n\n<p><a name=\"ml\" /></p>\n\n<ol>\n<li>##### GPU accelerated Machine Learning</li>\n</ol>\n\n<p><a name=\"graphics\" /></p>\n\n<ol>\n<li>##### Visualization using OpenGL</li>\n</ol>\n\n<p><a name=\"bindings\" /></p>\n\n<ol>\n<li>##### Language bindings for ArrayFire</li>\n</ol>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:03:51','2015-02-19 23:03:51','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7841,17728,'2015-02-19 23:04:15','2015-02-19 23:04:15','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page is organized into the following sections:</p>\n\n<ul>\n<li><a href=\"#intro\">Introduction to ArrayFire</a></li>\n<li><a href=\"#require\">Requirements for Students</a></li>\n<li><a href=\"#ideas\">List of Ideas</a> \n\n<ul>\n<li><a href=\"#ml\">GPU accelerated Machine Learning</a></li>\n<li><a href=\"#bindings\">Language bindings for ArrayFire</a></li>\n<li><a href=\"#graphics\">Visualization using OpenGL</a></li>\n</ul></li>\n</ul>\n\n<p><a name=\"intro\" /></p>\n\n<h4>Introduction to ArrayFire</h4>\n\n<p><a name=\"require\" /></p>\n\n<h4>Requirements for Students</h4>\n\n<p><a name=\"ideas\" /></p>\n\n<h4>List of Ideas</h4>\n\n<p><a name=\"ml\" /></p>\n\n<h6>GPU accelerated Machine Learning</h6>\n\n<p><a name=\"graphics\" /></p>\n\n<h6>Visualization using OpenGL</h6>\n\n<p><a name=\"bindings\" /></p>\n\n<h6>Language bindings for ArrayFire</h6>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:04:15','2015-02-19 23:04:15','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7843,17728,'2015-02-19 23:39:18','2015-02-19 23:39:18','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page is organized into the following sections:</p>\n\n<ul>\n<li><a href=\"#intro\">Introduction to ArrayFire</a></li>\n<li><a href=\"#require\">Requirements for Students</a></li>\n<li><a href=\"#ideas\">List of Ideas</a> \n\n<ul>\n<li><a href=\"#ml\">GPU accelerated Machine Learning</a></li>\n<li><a href=\"#bindings\">Language bindings for ArrayFire</a></li>\n<li><a href=\"#graphics\">Visualization using OpenGL</a></li>\n</ul></li>\n</ul>\n\n<p><a name=\"intro\" /></p>\n\n<h4>Introduction to ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.\n<a name=\"require\" /></p>\n\n<h4>Requirements for Students</h4>\n\n<p><a name=\"ideas\" /></p>\n\n<h4>List of Ideas</h4>\n\n<p><a name=\"ml\" /></p>\n\n<h6>GPU accelerated Machine Learning</h6>\n\n<p><a name=\"graphics\" /></p>\n\n<h6>Visualization using OpenGL</h6>\n\n<p><a name=\"bindings\" /></p>\n\n<h6>Language bindings for ArrayFire</h6>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:39:18','2015-02-19 23:39:18','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7844,17728,'2015-02-19 23:49:47','2015-02-19 23:49:47','','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:49:47','2015-02-19 23:49:47','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7845,17728,'2015-02-19 23:50:27','2015-02-19 23:50:27','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page is organized into the following sections:</p>\n\n<ul>\n<li><a href=\"#intro\">Introduction to ArrayFire</a></li>\n<li><a href=\"#require\">Requirements for Students</a></li>\n<li><a href=\"#ideas\">List of Ideas</a> \n\n<ul>\n<li><a href=\"#ml\">GPU accelerated Machine Learning</a></li>\n<li><a href=\"#bindings\">Language bindings for ArrayFire</a></li>\n<li><a href=\"#graphics\">Visualization using OpenGL</a></li>\n</ul></li>\n</ul>\n\n<p><a name=\"intro\" /></p>\n\n<h4>Introduction to ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.\n<a name=\"require\" /></p>\n\n<h4>Requirements for Students</h4>\n\n<p><a name=\"ideas\" /></p>\n\n<h4>List of Ideas</h4>\n\n<p><a name=\"ml\" /></p>\n\n<h6>GPU accelerated Machine Learning</h6>\n\n<p><a name=\"graphics\" /></p>\n\n<h6>Visualization using OpenGL</h6>\n\n<p><a name=\"bindings\" /></p>\n\n<h6>Language bindings for ArrayFire</h6>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:50:27','2015-02-19 23:50:27','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7846,17728,'2015-02-19 23:54:13','2015-02-19 23:54:13','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li>Information about ArrayFire</li>\n<li>Suggested and required skills for students</li>\n<li>Ideas for projects</li>\n</ul>\n\n<h3>Information about ArrayFire</h3>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>&lt;</p>\n\n<p>p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:54:13','2015-02-19 23:54:13','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7847,17728,'2015-02-19 23:54:36','2015-02-19 23:54:36','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li><a href=\"information-about-arrayfire\">Information about ArrayFire</a></li>\n<li>Suggested and required skills for students</li>\n<li>Ideas for projects</li>\n</ul>\n\n<h3>Information about ArrayFire</h3>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:54:36','2015-02-19 23:54:36','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7848,17728,'2015-02-19 23:54:51','2015-02-19 23:54:51','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li><a href=\"#information-about-arrayfire\">Information about ArrayFire</a></li>\n<li>Suggested and required skills for students</li>\n<li>Ideas for projects</li>\n</ul>\n\n<h3>Information about ArrayFire</h3>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:54:51','2015-02-19 23:54:51','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7849,17728,'2015-02-19 23:58:57','2015-02-19 23:58:57','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li>Information for students\n\n<ul>\n<li>About ArrayFire</li>\n<li>Requirements</li>\n<li>Guidelines</li>\n</ul></li>\n<li>Ideas for projects</li>\n</ul>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n\n<h4>#</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:58:57','2015-02-19 23:58:57','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7850,17728,'2015-02-19 23:59:01','2015-02-19 23:59:01','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li>Information for students \n\n<ul>\n<li>About ArrayFire</li>\n<li>Requirements</li>\n<li>Guidelines</li>\n</ul></li>\n<li>Ideas for projects</li>\n</ul>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n\n<h4>#</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-19 23:59:01','2015-02-19 23:59:01','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7851,17728,'2015-02-20 00:01:51','2015-02-20 00:01:51','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li>Information for students \n\n<ul>\n<li>About ArrayFire</li>\n<li>Requirements</li>\n<li>Guidelines</li>\n</ul></li>\n<li>Ideas for projects</li>\n</ul>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n\n<h4>Requirements</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:01:51','2015-02-20 00:01:51','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7852,17728,'2015-02-20 00:04:23','2015-02-20 00:04:23','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li>Information for students \n\n<ul>\n<li>About ArrayFire</li>\n<li>Requirements</li>\n<li>Guidelines</li>\n</ul></li>\n<li>Project Ideas</li>\n</ul>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n\n<h4>Requirements</h4>\n\n<h4>Guidelines</h4>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:04:23','2015-02-20 00:04:23','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7853,17728,'2015-02-20 00:05:13','2015-02-20 00:05:13','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li>Information for students \n\n<ul>\n<li>About ArrayFire</li>\n<li>Requirements</li>\n<li>Guidelines</li>\n</ul></li>\n<li>Project Ideas\n\n<ul>\n<li>GPU accelerated Machine Learning</li>\n<li>Visualization using OpenGL</li>\n<li>Language Bindings for ArrayFire</li>\n</ul></li>\n</ul>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n\n<h4>Requirements</h4>\n\n<h4>Guidelines</h4>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:05:13','2015-02-20 00:05:13','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7854,17728,'2015-02-20 00:05:16','2015-02-20 00:05:16','<p>Welcome to ArrayFire\'s home page for GSOC 2015. This page contains:</p>\n\n<ul>\n<li>Information for students \n\n<ul>\n<li>About ArrayFire</li>\n<li>Requirements</li>\n<li>Guidelines</li>\n</ul></li>\n<li>Project Ideas \n\n<ul>\n<li>GPU accelerated Machine Learning</li>\n<li>Visualization using OpenGL</li>\n<li>Language Bindings for ArrayFire</li>\n</ul></li>\n</ul>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code, saving you valuable time and lowering development costs.</p>\n\n<h4>Requirements</h4>\n\n<h4>Guidelines</h4>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:05:16','2015-02-20 00:05:16','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7855,17728,'2015-02-20 00:17:25','2015-02-20 00:17:25','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. If you need help</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<h4>Guidelines</h4>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:17:25','2015-02-20 00:17:25','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7856,17728,'2015-02-20 00:19:04','2015-02-20 00:19:04','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<h4>Guidelines</h4>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:19:04','2015-02-20 00:19:04','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7857,17728,'2015-02-20 00:29:13','2015-02-20 00:29:13','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in C and C++. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, python, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:29:13','2015-02-20 00:29:13','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7858,17728,'2015-02-20 00:30:10','2015-02-20 00:30:10','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:30:10','2015-02-20 00:30:10','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7859,17728,'2015-02-20 00:36:34','2015-02-20 00:36:34','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 00:36:34','2015-02-20 00:36:34','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7860,11,'2015-02-20 03:18:37','2015-02-20 03:18:37','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>The ArrayFire Graphics Library</h4>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h5>Sub-projects under this heading include:</h5>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h5>Requirements for these project are as follows:</h5>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-autosave-v1','','','2015-02-20 03:18:37','2015-02-20 03:18:37','',7812,'http://sandbox.arrayfire.com/7812-autosave-v1/',0,'revision','',0),(7861,11,'2015-02-20 03:13:19','2015-02-20 03:13:19','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to:\n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (expect what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<p>Subprojects under this heading include:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes\n\n<ul>\n<li>improvements to OpenGL code</li>\n<li>data copy performance in ArrayFire</li>\n<li>using multi-threading to run OpenGL on an independent thread</li>\n<li>porting the library to OpenGL ES and/or WebGL</li>\n</ul></li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<p>Requirements for these project are as follows:</p>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 03:13:19','2015-02-20 03:13:19','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7862,11,'2015-02-20 03:14:11','2015-02-20 03:14:11','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (expect what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<p>Subprojects under this heading include:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<p>Requirements for these project are as follows:</p>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 03:14:11','2015-02-20 03:14:11','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7863,11,'2015-02-20 03:17:33','2015-02-20 03:17:33','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>Visualization using OpenGL</h4>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h5>Sub-projects under this heading include:</h5>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h5>Requirements for these project are as follows:</h5>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 03:17:33','2015-02-20 03:17:33','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7864,11,'2015-02-20 03:19:49','2015-02-20 03:19:49','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>Project Ideas</h2>\n\n<h4>GPU accelerated Machine Learning</h4>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h5>Sub-projects under this heading include:</h5>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h5>Requirements for these project are as follows:</h5>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 03:19:49','2015-02-20 03:19:49','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7865,17728,'2015-02-20 14:11:07','2015-02-20 14:11:07','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<h4>GPU accelerated Machine Learning library</h4>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h5>Suggested ideas for GSOC15 for this project include:</h5>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h5>Requirements for these project are as follows:</h5>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 14:11:07','2015-02-20 14:11:07','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7866,17728,'2015-02-20 14:12:00','2015-02-20 14:12:00','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<h4>GPU accelerated Machine Learning library</h4>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 14:12:00','2015-02-20 14:12:00','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7867,17728,'2015-02-20 14:15:18','2015-02-20 14:15:18','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p>ArrayFire is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<h4>GPU accelerated Machine Learning library</h4>\n\n<p><strong>Mentors:</strong> Umar Arshad, Pavan Yalamanchili</p>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 14:15:18','2015-02-20 14:15:18','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7868,17728,'2015-02-20 14:15:33','2015-02-20 14:15:33','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<h4>GPU accelerated Machine Learning library</h4>\n\n<p><strong>Mentors:</strong> Umar Arshad, Pavan Yalamanchili</p>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 14:15:33','2015-02-20 14:15:33','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7869,17728,'2015-02-20 14:19:22','2015-02-20 14:19:22','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android ARM devices</li>\n<li>Do any necessary changes to OpenCL backend to make it work</li>\n</ul>\n\n<h4>GPU accelerated Machine Learning library</h4>\n\n<p><strong>Mentors:</strong> Umar Arshad, Pavan Yalamanchili</p>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 14:19:22','2015-02-20 14:19:22','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7870,17728,'2015-02-20 14:34:02','2015-02-20 14:34:02','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h4>GPU accelerated Machine Learning library</h4>\n\n<p><strong>Mentors:</strong> Umar Arshad, Pavan Yalamanchili</p>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 14:34:02','2015-02-20 14:34:02','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7872,17728,'2015-02-20 15:12:10','2015-02-20 15:12:10','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library.</p>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of visualization options. Primarily using OpenGL, the library is targeted towards cross-platform as well as backend-independent.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>The library will not process any data (except what is required to display). The processing is to be done by ArrayFire (or other user code) and passed to the ArrayFire Graphics library for diplaying.</li>\n<li>The library must be backend independent. That is, it must not be dependent on whether the user code is written using x86, CUDA or OpenCL backends.</li>\n<li>Allow the user to create multiple windows with a variety of display options.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<p>The library will create, manage and destroy windowing and OpenGL data structures. A standard code flow would be:</p>\n\n<ul>\n<li>Create Window and display options.</li>\n<li>Process data and pass it to ArrayFire Graphics (takes place outside the purview of the library)</li>\n<li>Display the data given to the library.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:12:10','2015-02-20 15:12:10','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7873,17728,'2015-02-20 15:13:26','2015-02-20 15:13:26','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library.</p>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:13:26','2015-02-20 15:13:26','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7874,17728,'2015-02-20 15:20:37','2015-02-20 15:20:37','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:20:37','2015-02-20 15:20:37','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7875,17728,'2015-02-20 15:26:04','2015-02-20 15:26:04','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:26:04','2015-02-20 15:26:04','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7876,17728,'2015-02-20 15:27:07','2015-02-20 15:27:07','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:27:07','2015-02-20 15:27:07','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7877,17728,'2015-02-20 15:44:20','2015-02-20 15:44:20','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important.\n* Logistic and Linear regression\n* Expectation Minimization\n* Principal Component Analysis</p>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:44:20','2015-02-20 15:44:20','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7878,17728,'2015-02-20 15:44:23','2015-02-20 15:44:23','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. * Logistic and Linear regression * Expectation Minimization * Principal Component Analysis</p>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:44:23','2015-02-20 15:44:23','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7879,17728,'2015-02-20 15:45:11','2015-02-20 15:45:11','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. \nThis project will include the implementation of the following algorithms:</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Minimization </li>\n<li>Principal Component Analysis</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:45:11','2015-02-20 15:45:11','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7880,17728,'2015-02-20 15:47:07','2015-02-20 15:47:07','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following algorithms using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:47:07','2015-02-20 15:47:07','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7881,17728,'2015-02-20 15:48:02','2015-02-20 15:48:02','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following algorithms using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:48:02','2015-02-20 15:48:02','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7882,17728,'2015-02-20 15:48:59','2015-02-20 15:48:59','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Umar Arshad, Pradeep Garigipati</p>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:48:59','2015-02-20 15:48:59','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7883,17728,'2015-02-20 15:56:37','2015-02-20 15:56:37','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<p>The current version of ArrayFire\'s CPU backend is a not vectorized and runs on a single thread. A successful project will implement the following tasks.</p>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<p>ArrayFire\'s OpenCL backend is portable across a variety of OpenCL devices. However it has been developed and tested primarily on desktop GPUs. A sucessful project will implement the following tasks:</p>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h6>Language Bindings for ArrayFire</h6>\n\n<p>ArrayFire\'s C API allows it to be easily wrapped into other higher level languages. A successful project will implement any one of the following tasks:</p>\n\n<ul>\n<li>Get feature parity between ArrayFire\'s Java wrapper and C++ API.</li>\n<li>Get feature parity between ArrayFire\'s R wrapper and C++ API.</li>\n<li>Wrapper for a new language: implement functions from <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h\">arith.h</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h\">algorithm.h</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h\">blas.h</a></li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:56:37','2015-02-20 15:56:37','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7884,17728,'2015-02-20 15:57:40','2015-02-20 15:57:40','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<p>The current version of ArrayFire\'s CPU backend is a not vectorized and runs on a single thread. A successful project will implement the following tasks.</p>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<p>ArrayFire\'s OpenCL backend is portable across a variety of OpenCL devices. However it has been developed and tested primarily on desktop GPUs. A successful project will implement the following tasks:</p>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n<li>Platforms of interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h6>Language Bindings for ArrayFire</h6>\n\n<p>ArrayFire\'s C API allows it to be easily wrapped into other higher level languages. A successful project will implement any one of the following tasks:</p>\n\n<ul>\n<li>Get feature parity between ArrayFire\'s Java wrapper and C++ API.</li>\n<li>Get feature parity between ArrayFire\'s R wrapper and C++ API.</li>\n<li>Wrapper for a new language: implement functions from <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h\">arith.h</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h\">algorithm.h</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h\">blas.h</a></li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<p>A successful project will include any one of the following:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 15:57:40','2015-02-20 15:57:40','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7885,17728,'2015-02-20 16:28:13','2015-02-20 16:28:13','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<p>This project focuses on performance improvements to ArrayFire\'s CPU backend. This is done by adding both vectorization and multi-threading support.</p>\n\n<p>A successful project will implement the following tasks.</p>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<p>ArrayFire\'s OpenCL backend is portable across a variety of OpenCL devices. However it has been developed and tested primarily on desktop GPUs. This project focuses on porting the OpenCL backend to mobile GPUs. Platforms of particular interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs. The necessary hardware will be provided by us.</p>\n\n<p>A successful project will implement the following tasks:</p>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h6>Computer vision algorithms for ArrayFire.</h6>\n\n<p>These algorithms will be written in CUDA or OpenCL, along with a CPU implementation (serial), using ArrayFire existing functionality when available. A successful project will implement any one of the following tasks in CUDA or OpenCL plus a CPU implementation in C++:</p>\n\n<ul>\n<li><a href=\"http://personal.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html\">Tracking-Learning-Detection</a> (TLD)</li>\n<li>Accelerated-KAZE Features (AKAZE): http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p>There are a lot of Scientists and Engineers using higher level languages for scientific computing. ArrayFire\'s C API allows us to write wrappers for high level languages fairly easily. GSOC students can pick a language of their choice and wrap ArrayFire in that language. Our suggestions include the following.</p>\n\n<h6>Java Wrapper for ArrayFire</h6>\n\n<p>A Java wrapper already exists for ArrayFire. However it does not have feature parity with the C/C++ version. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++.</li>\n<li>Test the wrapper on Linux, Windows and OSX.</li>\n<li>Write two new examples demonstrating the wrapper.</li>\n</ul>\n\n<h6>R wrapper for ArrayFire</h6>\n\n<p>As with the Java wrapper, the R wrapper does not have feature parity. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++</li>\n<li>Test the wrapper on Linux and OSX</li>\n<li>Benchmark ArrayFire\'s algorithms with standard implementations in R.</li>\n</ul>\n\n<h6>Other language wrappers.</h6>\n\n<p>Suggested languages include: C#, lua and javascript. If you prefer a different language, contact us. A successful project will implement the following.</p>\n\n<ul>\n<li>implement functions from <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h\">arith.h</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h\">algorithm.h</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h\">blas.h</a>.</li>\n<li>Test the wrapper on Linux.</li>\n<li>Write at least one example demonstrating the wrapper.</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<p>A successful project will include any one of the following:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-autosave-v1','','','2015-02-20 16:28:13','2015-02-20 16:28:13','',7812,'http://sandbox.arrayfire.com/7812-autosave-v1/',0,'revision','',0),(7886,17728,'2015-02-20 16:03:29','2015-02-20 16:03:29','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<p>This project focuses on performance improvements to ArrayFire\'s CPU backend. This is done by adding both vectorization and multi-threading support.</p>\n\n<p>A successful project will implement the following tasks.</p>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<p>ArrayFire\'s OpenCL backend is portable across a variety of OpenCL devices. However it has been developed and tested primarily on desktop GPUs. This project focuses on porting the OpenCL backend to mobile GPUs. Platforms of particular interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs. The necessary hardware will be provided by us.</p>\n\n<p>A successful project will implement the following tasks:</p>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h6>Language Bindings for ArrayFire</h6>\n\n<p>ArrayFire\'s C API allows it to be easily wrapped into other higher level languages. A successful project will implement any one of the following tasks:</p>\n\n<ul>\n<li>Get feature parity between ArrayFire\'s Java wrapper and C++ API.</li>\n<li>Get feature parity between ArrayFire\'s R wrapper and C++ API.</li>\n<li>Wrapper for a new language: implement functions from <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h\">arith.h</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h\">algorithm.h</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h\">blas.h</a></li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<p>A successful project will include any one of the following:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 16:03:29','2015-02-20 16:03:29','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7887,17728,'2015-02-20 16:26:24','2015-02-20 16:26:24','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<p>This project focuses on performance improvements to ArrayFire\'s CPU backend. This is done by adding both vectorization and multi-threading support.</p>\n\n<p>A successful project will implement the following tasks.</p>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<p>ArrayFire\'s OpenCL backend is portable across a variety of OpenCL devices. However it has been developed and tested primarily on desktop GPUs. This project focuses on porting the OpenCL backend to mobile GPUs. Platforms of particular interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs. The necessary hardware will be provided by us.</p>\n\n<p>A successful project will implement the following tasks:</p>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p>There are a lot of Scientists and Engineers using higher level languages for scientific computing. ArrayFire\'s C API allows us to write wrappers for high level languages fairly easily. GSOC students can pick a language of their choice and wrap ArrayFire in that language. Our suggestions include the following.</p>\n\n<h6>Java Wrapper for ArrayFire</h6>\n\n<p>A Java wrapper already exists for ArrayFire. However it does not have feature parity with the C/C++ version. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++.</li>\n<li>Test the wrapper on Linux, Windows and OSX.</li>\n<li>Write two new examples demonstrating the wrapper.</li>\n</ul>\n\n<h6>R wrapper for ArrayFire</h6>\n\n<p>As with the Java wrapper, the R wrapper does not have feature parity. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++</li>\n<li>Test the wrapper on Linux and OSX</li>\n<li>Benchmark ArrayFire\'s algorithms with standard implementations in R.</li>\n</ul>\n\n<h6>Other language wrappers.</h6>\n\n<p>Suggested languages include: C#, lua and javascript. If you prefer a different language, contact us. A successful project will implement the following.</p>\n\n<ul>\n<li>implement functions from <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h\">arith.h</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h\">algorithm.h</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h\">blas.h</a>.</li>\n<li>Test the wrapper on Linux.</li>\n<li>Write at least one example demonstrating the wrapper.</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<p>A successful project will include any one of the following:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 16:26:24','2015-02-20 16:26:24','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7888,17728,'2015-02-20 16:28:23','2015-02-20 16:28:23','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<p>This project focuses on performance improvements to ArrayFire\'s CPU backend. This is done by adding both vectorization and multi-threading support.</p>\n\n<p>A successful project will implement the following tasks.</p>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<p>ArrayFire\'s OpenCL backend is portable across a variety of OpenCL devices. However it has been developed and tested primarily on desktop GPUs. This project focuses on porting the OpenCL backend to mobile GPUs. Platforms of particular interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs. The necessary hardware will be provided by us.</p>\n\n<p>A successful project will implement the following tasks:</p>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h6>Computer vision algorithms for ArrayFire.</h6>\n\n<p>These algorithms will be written in CUDA or OpenCL, along with a CPU implementation (serial), using ArrayFire existing functionality when available. A successful project will implement any one of the following tasks in CUDA or OpenCL plus a CPU implementation in C++:</p>\n\n<ul>\n<li><a href=\"http://personal.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html\">Tracking-Learning-Detection</a> (TLD)</li>\n<li><a href=\"http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html\">Accelerated-KAZE Features</a> (AKAZE)</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p>There are a lot of Scientists and Engineers using higher level languages for scientific computing. ArrayFire\'s C API allows us to write wrappers for high level languages fairly easily. GSOC students can pick a language of their choice and wrap ArrayFire in that language. Our suggestions include the following.</p>\n\n<h6>Java Wrapper for ArrayFire</h6>\n\n<p>A Java wrapper already exists for ArrayFire. However it does not have feature parity with the C/C++ version. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++.</li>\n<li>Test the wrapper on Linux, Windows and OSX.</li>\n<li>Write two new examples demonstrating the wrapper.</li>\n</ul>\n\n<h6>R wrapper for ArrayFire</h6>\n\n<p>As with the Java wrapper, the R wrapper does not have feature parity. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++</li>\n<li>Test the wrapper on Linux and OSX</li>\n<li>Benchmark ArrayFire\'s algorithms with standard implementations in R.</li>\n</ul>\n\n<h6>Other language wrappers.</h6>\n\n<p>Suggested languages include: C#, lua and javascript. If you prefer a different language, contact us. A successful project will implement the following.</p>\n\n<ul>\n<li>implement functions from <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h\">arith.h</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h\">algorithm.h</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h\">blas.h</a>.</li>\n<li>Test the wrapper on Linux.</li>\n<li>Write at least one example demonstrating the wrapper.</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<p>A successful project will include any one of the following:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 16:28:23','2015-02-20 16:28:23','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7889,17728,'2015-02-20 16:29:08','2015-02-20 16:29:08','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<p>This project focuses on performance improvements to ArrayFire\'s CPU backend. This is done by adding both vectorization and multi-threading support.</p>\n\n<p>A successful project will implement the following tasks.</p>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<p>ArrayFire\'s OpenCL backend is portable across a variety of OpenCL devices. However it has been developed and tested primarily on desktop GPUs. This project focuses on porting the OpenCL backend to mobile GPUs. Platforms of particular interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs. The necessary hardware will be provided by us.</p>\n\n<p>A successful project will implement the following tasks:</p>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h6>Computer vision algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written in CUDA or OpenCL, along with a CPU implementation (serial), using ArrayFire existing functionality when available. A successful project will implement any one of the following tasks in CUDA or OpenCL plus a CPU implementation in C++:</p>\n\n<ul>\n<li><a href=\"http://personal.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html\">Tracking-Learning-Detection</a> (TLD)</li>\n<li><a href=\"http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html\">Accelerated-KAZE Features</a> (AKAZE)</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p>There are a lot of Scientists and Engineers using higher level languages for scientific computing. ArrayFire\'s C API allows us to write wrappers for high level languages fairly easily. GSOC students can pick a language of their choice and wrap ArrayFire in that language. Our suggestions include the following.</p>\n\n<h6>Java Wrapper for ArrayFire</h6>\n\n<p>A Java wrapper already exists for ArrayFire. However it does not have feature parity with the C/C++ version. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++.</li>\n<li>Test the wrapper on Linux, Windows and OSX.</li>\n<li>Write two new examples demonstrating the wrapper.</li>\n</ul>\n\n<h6>R wrapper for ArrayFire</h6>\n\n<p>As with the Java wrapper, the R wrapper does not have feature parity. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++</li>\n<li>Test the wrapper on Linux and OSX</li>\n<li>Benchmark ArrayFire\'s algorithms with standard implementations in R.</li>\n</ul>\n\n<h6>Other language wrappers.</h6>\n\n<p>Suggested languages include: C#, lua and javascript. If you prefer a different language, contact us. A successful project will implement the following.</p>\n\n<ul>\n<li>implement functions from <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h\">arith.h</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h\">algorithm.h</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h\">blas.h</a>.</li>\n<li>Test the wrapper on Linux.</li>\n<li>Write at least one example demonstrating the wrapper.</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<p>A successful project will include any one of the following:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 16:29:08','2015-02-20 16:29:08','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7890,17728,'2015-02-20 16:30:04','2015-02-20 16:30:04','<p>Welcome to ArrayFire\'s home page for GSOC 2015. Please read this document and <a href=\"http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2014/help_page#1._Are_there_any_age_restrictions_on\">GSOC\'s FAQ</a> before making a proposal. You can contact ArrayFire developers and mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> for more information.</p>\n\n<h2>Information for students</h2>\n\n<h4>About ArrayFire</h4>\n\n<p><a href=\"https://github.com/arrayfire/arrayfire\">ArrayFire</a> is a high performance software library for parallel computing with an easy-to-use API. Its array based function set makes parallel programming simple.</p>\n\n<p>ArrayFire\'s multiple backends (CUDA, OpenCL and native CPU) make it platform independent and highly portable. A few lines of code in ArrayFire can replace dozens of lines of parallel computing code.</p>\n\n<h4>Requirements</h4>\n\n<p>While none of the following requirements are mandatory, we do a lot of development in <strong>C</strong> and <strong>C++</strong>. Familiarity with those languages would go a long way in addition to the following domains.</p>\n\n<ul>\n<li>Statistics / Machine Learning tools and libraries (e.g. R, scikit, numpy, etc.)</li>\n<li>Image processing and Computer Vision</li>\n<li>Experience programming on GPUs (CUDA / OpenCL, or OpenGL / DirectX)</li>\n<li>Version Control systems (git)</li>\n<li>Or a general interest in scientific computing.</li>\n</ul>\n\n<h4>Guidelines</h4>\n\n<p>If a project listed here interests you, or if you want to propose a new project, contact the mentors using our <a href=\"https://groups.google.com/forum/#!forum/arrayfire-users\">mailing list</a> with your project proposal.</p>\n\n<h2>ArrayFire Projects and Ideas</h2>\n\n<p>We will provide remote access to the hardware relevant to the project if necessary.</p>\n\n<h4>Improvements to the ArrayFire Library</h4>\n\n<p><strong>Mentors:</strong> Pavan Yalamanchili, Pradeep Garigipati, Shehzan Mohammed</p>\n\n<p>ArrayFire aims to be a portable, high performance scientific computing library. Key areas in ArrayFire can be improved include:</p>\n\n<ul>\n<li>Improving the performance of existing functions</li>\n<li>Adding support for more hardware and backends</li>\n<li>Adding a new domain of functions</li>\n</ul>\n\n<p>With these in mind, we suggest the follow ideas for prospective GSOC15 students.</p>\n\n<h6>Implement parallel version of ArrayFire\'s CPU backend.</h6>\n\n<p>This project focuses on performance improvements to ArrayFire\'s CPU backend. This is done by adding both vectorization and multi-threading support.</p>\n\n<p>A successful project will implement the following tasks.</p>\n\n<ul>\n<li>Use existing libraries (MKL, ACML, IPP etc) to accelerate when possible.</li>\n<li>Use SSE instructions to vectorize key algorithms</li>\n<li>Use OpenMP to enable multi-threading support.</li>\n</ul>\n\n<h6>Porting ArrayFire OpenCL backend to work on Mobile Platforms</h6>\n\n<p>ArrayFire\'s OpenCL backend is portable across a variety of OpenCL devices. However it has been developed and tested primarily on desktop GPUs. This project focuses on porting the OpenCL backend to mobile GPUs. Platforms of particular interest include ARM Mali GPUs, and Qualcomm\'s Adreno GPUs. The necessary hardware will be provided by us.</p>\n\n<p>A successful project will implement the following tasks:</p>\n\n<ul>\n<li>Setup cmake framework to work on ArrayFire for Android devices</li>\n<li>Make changes to ArrayFire\'s OpenCL backend to work on mobile devices</li>\n<li>Make changes to ArrayFire\'s Java wrapper necessary for Android</li>\n</ul>\n\n<h6>Machine learning algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written using existing functionality. While no knowledge of CUDA or OpenCL is necessary, familiarity with vectorization concepts important. A successful project will implement any three of the following tasks using ArrayFire.</p>\n\n<ul>\n<li>Logistic and Linear regression</li>\n<li>Expectation Maximization </li>\n<li>Principal Component Analysis</li>\n<li>Support Vector Machines</li>\n<li>Hidden Markov Models</li>\n<li>Self Organizing Maps</li>\n<li>Performance improvements to existing Machine Learning algorithms</li>\n</ul>\n\n<h6>Computer vision algorithms for ArrayFire</h6>\n\n<p>These algorithms will be written in CUDA or OpenCL, along with a CPU implementation (serial), using ArrayFire existing functionality when available. A successful project will implement any one of the following tasks in CUDA or OpenCL plus a CPU implementation in C++:</p>\n\n<ul>\n<li><a href=\"http://personal.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html\">Tracking-Learning-Detection</a> (TLD)</li>\n<li><a href=\"http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html\">Accelerated-KAZE Features</a> (AKAZE)</li>\n</ul>\n\n<h4>Language Bindings for ArrayFire</h4>\n\n<p>There are a lot of Scientists and Engineers using higher level languages for scientific computing. ArrayFire\'s C API allows us to write wrappers for high level languages fairly easily. GSOC students can pick a language of their choice and wrap ArrayFire in that language. Our suggestions include the following.</p>\n\n<h6>Java Wrapper for ArrayFire</h6>\n\n<p>A Java wrapper already exists for ArrayFire. However it does not have feature parity with the C/C++ version. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++.</li>\n<li>Test the wrapper on Linux, Windows and OSX.</li>\n<li>Write two new examples demonstrating the wrapper.</li>\n</ul>\n\n<h6>R wrapper for ArrayFire</h6>\n\n<p>As with the Java wrapper, the R wrapper does not have feature parity. A successful project will implement the following.</p>\n\n<ul>\n<li>Get feature parity with ArrayFire C/C++</li>\n<li>Test the wrapper on Linux and OSX</li>\n<li>Benchmark ArrayFire\'s algorithms with standard implementations in R.</li>\n</ul>\n\n<h6>Other language wrappers.</h6>\n\n<p>Suggested languages include: C#, lua and rust. If you prefer a different language, contact us. A successful project will implement the following.</p>\n\n<ul>\n<li>implement functions from <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/algorithm.h\">arith.h</a>, <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/arith.h\">algorithm.h</a> and <a href=\"https://github.com/arrayfire/arrayfire/blob/devel/include/af/blas.h\">blas.h</a>.</li>\n<li>Test the wrapper on Linux.</li>\n<li>Write at least one example demonstrating the wrapper.</li>\n</ul>\n\n<h4>The ArrayFire Graphics Library - High performance visualizations</h4>\n\n<p><strong>Mentors:</strong> Shehzan Mohammed, Pradeep Garigipati</p>\n\n<p>The ArrayFire Graphics library is a set of visualization API that is targeted towards giving users a range of High performance visualization options.</p>\n\n<p>The core ideas behind this library are as follows:</p>\n\n<ul>\n<li>Provide a robust, yet flexible, API that allows users to display their data.</li>\n<li>Visualization options include, but are not limited to: \n\n<ul>\n<li>Display 2D images</li>\n<li>Display 2D and 3D Graphs using lines, points, sprites, surfaces and volumes</li>\n<li>Display 3D voxel and voxel-like visualizations</li>\n<li>Display 3D geometry</li>\n</ul></li>\n<li>Allow interop capabilities for both CUDA and OpenCL. This is essential as copying data from GPU to CPU and back to GPU for rendering is a whole lot of waste of performance.</li>\n<li>Provide a set of useful keyboard and mouse interaction options.</li>\n</ul>\n\n<h6>Suggested ideas for GSOC15 for this project include:</h6>\n\n<p>A successful project will include any one of the following:</p>\n\n<ul>\n<li>Create new visualization API. 2D Sprites based UI, 3D voxels, 3D graphs, and 3D geometry are favorites.</li>\n<li>Performance improvements to existing API. This includes \n\n<ul>\n<li>improvements to OpenGL code.</li>\n<li>data copy performance in ArrayFire.</li>\n</ul></li>\n<li>Using multi-threading to run OpenGL on an independent thread.</li>\n<li>Porting the library to OpenGL ES and/or WebGL.</li>\n</ul>\n\n<h6>Requirements for these project are as follows:</h6>\n\n<ul>\n<li>Extremely good knowledge of OpenGL, GLFW.</li>\n<li>Experience with 3D Rendering using OpenGL.</li>\n<li>Strong understanding of CUDA-OpenGL and/or OpenCL-OpenGL interop.</li>\n<li>Knowledge of game and/or rendering engines is a bonus.</li>\n</ul>\n','Google Summer Of Code 2015','','inherit','open','open','','7812-revision-v1','','','2015-02-20 16:30:04','2015-02-20 16:30:04','',7812,'http://sandbox.arrayfire.com/7812-revision-v1/',0,'revision','',0),(7893,17796,'2015-02-25 21:42:17','2015-02-25 21:42:17','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p></li>\n</ol>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre>\n\n<ol>\n<li>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</li>\n</ol>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source\nsudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d/crosstools.list\'\nsudo apt-get install -y curl\ncurl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf\nsudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables\nsudo apt-get install qemu binfmt-support qemu-user-static\nsudo update-binfmts --display\nsudo apt-get install libc6:armhf\n\n# compile an ARM executable\ncat > hello.c &lt;&lt; EOF\n \n#include &lt;stdio.h>\nint main(void) { return printf(\"Hello ARM!\\n\"); }\nEOF\narm-linux-gnueabihf-gcc -static -ohello hello.c\n\n# the following should indicate an ARM exe\nfile hello\n\n# running the executable with no fanfare should \n# invoke QEMU transparently to print \"Hello ARM!\"\n./hello\n</pre>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.</p>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake\nsudo apt-get install cmake\n\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git && cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</pre>\n\n<ol>\n<li>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</li>\n</ol>\n\n<pre># the following steps aasume this is done in the home directory\n# and therefore yielding ~/llvm \ngit clone http://root.cern.ch/git/llvm.git src\ncd src\ngit checkout cling-patches\ncd tools\ngit clone http://root.cern.ch/git/cling.git\ngit clone http://root.cern.ch/git/clang.git\ncd clang\ngit checkout cling-patches\n</pre>\n\n<ol>\n<li>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></li>\n</ol>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre>\n\n<ol>\n<li>Do a build with ninja and install to the <strong>install</strong> subdirectory.</li>\n</ol>\n\n<pre># ninja here\n</pre>\n\n<ol>\n<li>Fire up Cling!</li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-autosave-v1','','','2015-02-25 21:42:17','2015-02-25 21:42:17','',7681,'http://sandbox.arrayfire.com/7681-autosave-v1/',0,'revision','',0),(7894,17796,'2015-02-25 21:31:12','2015-02-25 21:31:12','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p></li>\n</ol>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre>\n\n<ol>\n<li>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</li>\n</ol>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source\nsudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d/crosstools.list\'\nsudo apt-get install -y curl\ncurl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf\nsudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables\nsudo apt-get install qemu binfmt-support qemu-user-static\nsudo update-binfmts --display\nsudo apt-get install libc6:armhf\n\n# compile an ARM executable\ncat > hello.c &lt;&lt; EOF\n \n#include &lt;stdio.h>\nint main(void) { return printf(\"Hello ARM!\\n\"); }\nEOF\narm-linux-gnueabihf-gcc -static -ohello hello.c\n\n# the following should indicate an ARM exe\nfile hello\n\n# running the executable with no fanfare should \n# invoke QEMU transparently to print \"Hello ARM!\"\n./hello\n</pre>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.</p>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake\nsudo apt-get install cmake\n\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git && cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</pre>\n\n<ol>\n<li>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</li>\n</ol>\n\n<pre># the following steps aasume this is done in the home directory\n# and therefore yielding ~/llvm \ngit clone http://root.cern.ch/git/llvm.git src\ncd src\ngit checkout cling-patches\ncd tools\ngit clone http://root.cern.ch/git/cling.git\ngit clone http://root.cern.ch/git/clang.git\ncd clang\ngit checkout cling-patches\n</pre>\n\n<ol>\n<li>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></li>\n</ol>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre>\n\n<ol>\n<li>Do a build with ninja and install to the <strong>install</strong> subdirectory.</li>\n</ol>\n\n<pre># ninja here\n</pre>\n\n<ol>\n<li>Fire up Cling!</li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 21:31:12','2015-02-25 21:31:12','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7895,17796,'2015-02-25 21:40:35','2015-02-25 21:40:35','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p></li>\n</ol>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre>\n\n<p>ffs\n1.  Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source\nsudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d/crosstools.list\'\nsudo apt-get install -y curl\ncurl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf\nsudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables\nsudo apt-get install qemu binfmt-support qemu-user-static\nsudo update-binfmts --display\nsudo apt-get install libc6:armhf\n\n# compile an ARM executable\ncat > hello.c &lt;&lt; EOF\n \n#include &lt;stdio.h>\nint main(void) { return printf(\"Hello ARM!\\n\"); }\nEOF\narm-linux-gnueabihf-gcc -static -ohello hello.c\n\n# the following should indicate an ARM exe\nfile hello\n\n# running the executable with no fanfare should \n# invoke QEMU transparently to print \"Hello ARM!\"\n./hello\n</pre>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.</p>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake\nsudo apt-get install cmake\n\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git && cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</pre>\n\n<ol>\n<li>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</li>\n</ol>\n\n<pre># the following steps aasume this is done in the home directory\n# and therefore yielding ~/llvm \ngit clone http://root.cern.ch/git/llvm.git src\ncd src\ngit checkout cling-patches\ncd tools\ngit clone http://root.cern.ch/git/cling.git\ngit clone http://root.cern.ch/git/clang.git\ncd clang\ngit checkout cling-patches\n</pre>\n\n<ol>\n<li>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></li>\n</ol>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre>\n\n<ol>\n<li>Do a build with ninja and install to the <strong>install</strong> subdirectory.</li>\n</ol>\n\n<pre># ninja here\n</pre>\n\n<ol>\n<li>Fire up Cling!</li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 21:40:35','2015-02-25 21:40:35','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7896,17796,'2015-02-25 21:41:33','2015-02-25 21:41:33','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p></li>\n</ol>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre>\n\n<ol>\n<li>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</li>\n</ol>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source\nsudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d/crosstools.list\'\nsudo apt-get install -y curl\ncurl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf\nsudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables\nsudo apt-get install qemu binfmt-support qemu-user-static\nsudo update-binfmts --display\nsudo apt-get install libc6:armhf\n\n# compile an ARM executable\ncat > hello.c &lt;&lt; EOF\n \n#include &lt;stdio.h>\nint main(void) { return printf(\"Hello ARM!\\n\"); }\nEOF\narm-linux-gnueabihf-gcc -static -ohello hello.c\n\n# the following should indicate an ARM exe\nfile hello\n\n# running the executable with no fanfare should \n# invoke QEMU transparently to print \"Hello ARM!\"\n./hello\n</pre>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.</p>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake\nsudo apt-get install cmake\n\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git && cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</pre>\n\n<ol>\n<li>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</li>\n</ol>\n\n<pre># the following steps aasume this is done in the home directory\n# and therefore yielding ~/llvm \ngit clone http://root.cern.ch/git/llvm.git src\ncd src\ngit checkout cling-patches\ncd tools\ngit clone http://root.cern.ch/git/cling.git\ngit clone http://root.cern.ch/git/clang.git\ncd clang\ngit checkout cling-patches\n</pre>\n\n<ol>\n<li>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></li>\n</ol>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre>\n\n<ol>\n<li>Do a build with ninja and install to the <strong>install</strong> subdirectory.</li>\n</ol>\n\n<pre># ninja here\n</pre>\n\n<ol>\n<li>Fire up Cling!</li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 21:41:33','2015-02-25 21:41:33','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7898,17795,'2015-02-25 23:02:47','2015-02-25 23:02:47','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf </pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-autosave-v1','','','2015-02-25 23:02:47','2015-02-25 23:02:47','',7681,'http://sandbox.arrayfire.com/7681-autosave-v1/',0,'revision','',0),(7899,17795,'2015-02-25 22:05:27','2015-02-25 22:05:27','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>\nsudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<pre># add Embedian as an installation source\nsudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d    /crosstools.list\'\nsudo apt-get install -y curl\ncurl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf\nsudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre></li>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\n\n<pre># install QEMU emulation for ARM executables\nsudo apt-get install qemu binfmt-support qemu-user-static\nsudo update-binfmts --display\nsudo apt-get install libc6:armhf\n\n# compile an ARM executable\ncat > hello.c &lt;&lt; EOF\n\n#include <stdio.h>\nint main(void) { return printf(\"Hello ARM!\\n\"); }\nEOF\narm-linux-gnueabihf-gcc -static -ohello hello.c\n\n# the following should indicate an ARM exe\nfile hello\n\n# running the executable with no fanfare should \n# invoke QEMU transparently to print \"Hello ARM!\"\n./hello\n</pre>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.</p></li>\n<li><p>Install build tools: cmake and ninja.</p>\n\n<pre># cmake\nsudo apt-get install cmake\n\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git && cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</pre></li>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<pre># the following steps aasume this is done in the home directory\n# and therefore yielding ~/llvm \ngit clone http://root.cern.ch/git/llvm.git src\ncd src\ngit checkout cling-patches\ncd tools\ngit clone http://root.cern.ch/git/cling.git\ngit clone http://root.cern.ch/git/clang.git\ncd clang\ngit checkout cling-patches\n</pre></li>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:05:27','2015-02-25 22:05:27','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7900,17795,'2015-02-25 22:09:08','2015-02-25 22:09:08','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source\nsudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d    /crosstools.list\'\nsudo apt-get install -y curl\ncurl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf\nsudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf\n</pre></p>\n\n<ol>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\n\n<p>&lt;</p>\n\n<p>pre># install QEMU emulation for ARM executables\nsudo apt-get install qemu binfmt-support qemu-user-static\nsudo update-binfmts --display\nsudo apt-get install libc6:armhf</p></li>\n</ol>\n\n<h1>compile an ARM executable</h1>\n\n<p>cat > hello.c &lt;&lt; EOF</p>\n\n<h1>include &lt;stdio.h></h1>\n\n<p>int main(void) { return printf(\"Hello ARM!\\n\"); }\nEOF\narm-linux-gnueabihf-gcc -static -ohello hello.c</p>\n\n<h1>the following should indicate an ARM exe</h1>\n\n<p>file hello</p>\n\n<h1>running the executable with no fanfare should</h1>\n\n<h1>invoke QEMU transparently to print \"Hello ARM!\"</h1>\n\n<p>./hello\n</pre></p>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li><p>Install build tools: cmake and ninja.</p>\n\n<p>&lt;</p>\n\n<p>pre># cmake\nsudo apt-get install cmake</p></li>\n</ol>\n\n<h1>ninja requires a build</h1>\n\n<p>git clone git://github.com/martine/ninja.git &amp;&amp; cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</pre></p>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src\ncd src\ngit checkout cling-patches\ncd tools\ngit clone http://root.cern.ch/git/cling.git\ngit clone http://root.cern.ch/git/clang.git\ncd clang\ngit checkout cling-patches\n</pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:09:08','2015-02-25 22:09:08','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7901,17795,'2015-02-25 22:12:51','2015-02-25 22:12:51','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\n\nsudo dpkg --add-architecture armhf sudo apt-get update\n\n# install an ARM targeted cross compiler\n\nsudo apt-get install crossbuild-essential-armhf </pre></li>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n\n# compile an ARM executable\n\ncat > hello.c << EOF\n\n# include <stdio.h>\n\nint main(void) { return printf(\"Hello ARM!\\n\"); } EOF arm-linux-gnueabihf-gcc -static -ohello hello.c\n\n# the following should indicate an ARM exe\n\nfile hello\n\n# running the executable with no fanfare should\n\n# invoke QEMU transparently to print \"Hello ARM!\"\n\n./hello </pre>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.</p></li>\n<li><p>Install build tools: cmake and ninja.</p>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin </pre></li>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<pre># the following steps aasume this is done in the home directory\n\n# and therefore yielding ~/llvm\n\ngit clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></li>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:12:51','2015-02-25 22:12:51','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7902,17795,'2015-02-25 22:22:44','2015-02-25 22:22:44','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\n\nsudo dpkg --add-architecture armhf sudo apt-get update\n\n# install an ARM targeted cross compiler\n\nsudo apt-get install crossbuild-essential-armhf </pre>\n\n<ol>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\n\n<p>&lt;</p>\n\n<p>pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf</p></li>\n</ol>\n\n<h1>compile an ARM executable</h1>\n\n<p>cat > hello.c &lt;&lt; EOF</p>\n\n<h1>include &lt;stdio.h></h1>\n\n<p>int main(void) { return printf(\"Hello ARM!\\n\"); } EOF arm-linux-gnueabihf-gcc -static -ohello hello.c</p>\n\n<h1>the following should indicate an ARM exe</h1>\n\n<p>file hello</p>\n\n<h1>running the executable with no fanfare should</h1>\n\n<h1>invoke QEMU transparently to print \"Hello ARM!\"</h1>\n\n<p>./hello </pre></p>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li><p>Install build tools: cmake and ninja.</p>\n\n<p>&lt;</p>\n\n<p>pre># cmake sudo apt-get install cmake</p></li>\n</ol>\n\n<h1>ninja requires a build</h1>\n\n<p>git clone git://github.com/martine/ninja.git &amp;&amp; cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin </pre></p>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:22:44','2015-02-25 22:22:44','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7903,17795,'2015-02-25 22:25:04','2015-02-25 22:25:04','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf sudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre></li>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p></li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n\n    # compile an ARM executable\n    cat > hello.c << EOF\n\n    # include <stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li><p>Install build tools: cmake and ninja.</p>\n\n<p>&lt;</p>\n\n<p>pre># cmake sudo apt-get install cmake</p></li>\n</ol>\n\n<h1>ninja requires a build</h1>\n\n<p>git clone git://github.com/martine/ninja.git &amp;&amp; cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin </pre></p>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:25:04','2015-02-25 22:25:04','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7906,17795,'2015-02-25 22:25:52','2015-02-25 22:25:52','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf sudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n\n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li><p>Install build tools: cmake and ninja.</p>\n\n<p>&lt;</p>\n\n<p>pre># cmake sudo apt-get install cmake</p></li>\n</ol>\n\n<h1>ninja requires a build</h1>\n\n<p>git clone git://github.com/martine/ninja.git &amp;&amp; cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin </pre></p>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:25:52','2015-02-25 22:25:52','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7907,17795,'2015-02-25 22:28:10','2015-02-25 22:28:10','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf sudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n\n    # compile an ARM executable\n    cat > hello.c << EOF\n\n    # include <stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches\n    </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre>\n# ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:28:10','2015-02-25 22:28:10','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7908,17795,'2015-02-25 22:32:11','2015-02-25 22:32:11','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n    \n    # add arm hard-float as a supported architecture\n    sudo dpkg --add-architecture armhf sudo apt-get update\n    \n    # install an ARM targeted cross compiler\n    sudo apt-get install crossbuild-essential-armhf\n    </pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre>\n    # install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c << EOF\n\n    # include <stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:32:11','2015-02-25 22:32:11','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7909,17795,'2015-02-25 22:33:24','2015-02-25 22:33:24','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n    # add arm hard-float as a supported architecture\n    sudo dpkg --add-architecture armhf sudo apt-get update\n    # install an ARM targeted cross compiler\n    sudo apt-get install crossbuild-essential-armhf\n    </pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:33:24','2015-02-25 22:33:24','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0);
INSERT INTO `wp_posts` VALUES (7910,17795,'2015-02-25 22:34:11','2015-02-25 22:34:11','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf\n</pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:34:11','2015-02-25 22:34:11','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7911,17795,'2015-02-25 22:34:14','2015-02-25 22:34:14','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf </pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:34:14','2015-02-25 22:34:14','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7912,17795,'2015-02-25 22:38:50','2015-02-25 22:38:50','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf\n</pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:38:50','2015-02-25 22:38:50','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7913,17795,'2015-02-25 22:40:29','2015-02-25 22:40:29','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.\n<code># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf\n</code></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:40:29','2015-02-25 22:40:29','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7914,17795,'2015-02-25 22:41:20','2015-02-25 22:41:20','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf\n</pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:41:20','2015-02-25 22:41:20','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7915,17795,'2015-02-25 22:41:48','2015-02-25 22:41:48','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<h1>add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</h1>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf</p></li>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p></li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:41:48','2015-02-25 22:41:48','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7916,17795,'2015-02-25 22:46:11','2015-02-25 22:46:11','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre>\n    # add Embedian as an installation\n    source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n    \n    # add arm hard-float as a supported architecture\n    \n    sudo dpkg --add-architecture armhf sudo apt-get update\n    \n    # install an ARM targeted cross compiler\n    \n    sudo apt-get install crossbuild-essential-armhf\n    </pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:46:11','2015-02-25 22:46:11','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7917,17795,'2015-02-25 22:47:24','2015-02-25 22:47:24','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<pre># add Embedian as an installation\nsource sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\n\nsudo dpkg --add-architecture armhf sudo apt-get update\n\n# install an ARM targeted cross compiler\n\nsudo apt-get install crossbuild-essential-armhf\n</pre></li>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p></li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:47:24','2015-02-25 22:47:24','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7918,17795,'2015-02-25 22:49:45','2015-02-25 22:49:45','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<pre># add Embedian as an installation\nsource sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n</pre></li>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p></li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:49:45','2015-02-25 22:49:45','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7919,17795,'2015-02-25 22:52:34','2015-02-25 22:52:34','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation\nsource sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p></pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:52:34','2015-02-25 22:52:34','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7920,17795,'2015-02-25 22:57:43','2015-02-25 22:57:43','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n</pre>\n\n<p>&lt;</p>\n\n<p>pre></p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p></pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:57:43','2015-02-25 22:57:43','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7921,17795,'2015-02-25 22:58:49','2015-02-25 22:58:49','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n<br></p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p></pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:58:49','2015-02-25 22:58:49','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7922,17795,'2015-02-25 22:59:38','2015-02-25 22:59:38','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n<br><br># add arm hard-float as a supported architecture\n</pre></li>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p></li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 22:59:38','2015-02-25 22:59:38','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7923,17795,'2015-02-25 23:01:58','2015-02-25 23:01:58','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<pre>sudo apt-get update\nsudo apt-get install build-essential git\n</pre></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf\n</pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:01:58','2015-02-25 23:01:58','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7925,17728,'2015-02-26 21:49:57','2015-02-26 21:49:57','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p></p>\r\n\r\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\r\n\r\n<h3 id=\"background\">Background</h3>\r\n\r\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\r\n\r\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\r\n\r\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\r\n\r\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\r\n\r\n<h3 id=\"build-instructions-for-x86\">Build instructions for x86</h3>\r\n\r\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\r\n\r\n<ol>\r\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\r\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\r\n<li><p>Install required build packages on the instance.</p>\r\n\r\n<pre><code>sudo apt-get update\r\nsudo apt-get install build-essential git\r\n</code></pre></li>\r\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\r\n\r\n<pre><code>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\r\nchmod +x clone.sh\r\n./clone.sh           # will require a few minutes to finish\r\n</code></pre>\r\n\r\n<p>...this might take some time...</p>\r\n\r\n<div style=\"text-align: center;\">\r\n  <img width=\"75%\" style=\"padding: 20px;\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" />\r\n</div></li>\r\n<li><p>Take Cling for a spin!</p></li>\r\n</ol>\r\n\r\n<h3 id=\"build-instructions-for-arm\">Build instructions for ARM</h3>\r\n\r\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\r\n\r\n<ol>\r\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\r\n<li><p>Install ARM hard-float compilation tools.</p>\r\n\r\n<pre><code># add Embedian as an installation source\r\nsudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d/crosstools.list\'\r\nsudo apt-get install -y curl\r\ncurl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\r\n\r\n# add arm hard-float as a supported architecture\r\nsudo dpkg --add-architecture armhf\r\nsudo apt-get update\r\n\r\n# install an ARM targeted cross compiler\r\nsudo apt-get install crossbuild-essential-armhf\r\n</code></pre></li>\r\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\r\n\r\n<pre><code># install QEMU emulation for ARM executables\r\nsudo apt-get install qemu binfmt-support qemu-user-static\r\nsudo update-binfmts --display\r\nsudo apt-get install libc6:armhf\r\n\r\n# compile an ARM executable\r\ncat > hello.c >> EOF\r\n\r\n#include <stdio.h>\r\nint main(void) { return printf(\"Hello ARM!\\n\"); }\r\nEOF\r\narm-linux-gnueabihf-gcc -static -ohello hello.c\r\n\r\n# the following should indicate an ARM exe\r\nfile hello\r\n\r\n# running the executable with no fanfare should\r\n# invoke QEMU transparently to print \"Hello ARM!\"\r\n./hello\r\n</code></pre>\r\n\r\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.</p></li>\r\n<li><p>Install build tools: cmake and ninja.</p>\r\n\r\n<pre><code> # install cmake\r\n sudo apt-get install cmake\r\n\r\n # ninja requires a build\r\n git clone git://github.com/martine/ninja.git && cd ninja\r\n git checkout release\r\n ./configure.py --bootstrap\r\n chmod +x ninja build.ninja\r\n sudo cp ninja build.ninja /usr/bin\r\n</code></pre></li>\r\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\r\n\r\n<pre><code># the following steps assume this is done in the home directory\r\n# and therefore yielding ~/llvm\r\n\r\ngit clone http://root.cern.ch/git/llvm.git\r\ncd llvm\r\ngit checkout cling-patches\r\ncd tools\r\ngit clone http://root.cern.ch/git/cling.git\r\ngit clone http://root.cern.ch/git/clang.git\r\ncd clang \r\ngit checkout cling-patches\r\n</code></pre></li>\r\n<li><p>Configure a build in a new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em> Also, note that the following assumes that the prior step was run in <code>~/</code> resulting in an <code>~/llvm</code> directory.</p>\r\n\r\n<pre><code>mkdir -p build; cd build\r\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True \\\r\n                  -DCMAKE_SYSTEM_NAME=Linux \\\r\n                  -DCMAKE_SYSTEM_VERSION=1 \\\r\n                  -DCMAKE_SYSTEM_PROCESSOR=armv7 \\\r\n                  -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \\\r\n                  -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \\\r\n                  -DCMAKE_INSTALL_PREFIX=/home/admin/build/install \\\r\n                  -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 \\\r\n                  -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 \\\r\n                  -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf \\\r\n                  -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf \\\r\n                  -DLLVM_TARGET_ARCH=ARM \\\r\n                  -DLLVM_TARGETS_TO_BUILD=ARM \\\r\n                  -DCMAKE_CXX_FLAGS= \\\r\n                      \"-mcpu=cortex-a9 \\       \r\n                      -I/usr/include/arm-linux-gnueabihf/c++/4.9 \\\r\n                      -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include \\\r\n                      -mfloat-abi=hard\"\r\n</code></pre></li>\r\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory. This will take a few minutes.</p>\r\n\r\n<pre><code>ninja install\r\n</code></pre></li>\r\n<li><p>Fire up Cling!</p></li>\r\n</ol>\r\n\r\n<p></body></html></p>\r\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-autosave-v1','','','2015-02-26 21:49:57','2015-02-26 21:49:57','',7681,'http://sandbox.arrayfire.com/7681-autosave-v1/',0,'revision','',0),(7926,17728,'2015-02-25 23:22:28','2015-02-25 23:22:28','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<p>sudo apt-get update\nsudo apt-get install build-essential git</p></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<pre>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p></li>\n<li><p>Take Cling for a spin!</p></li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<p>&lt;</p>\n\n<p>pre># add Embedian as an installation source sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n</ol>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf </pre></p>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre># install QEMU emulation for ARM executables sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf\n    \n    # compile an ARM executable\n    cat > hello.c &lt;&lt; EOF\n\n    # include &lt;stdio.h>\n\n    int main(void) { return printf(\"Hello ARM!\\n\"); } EOF\n\n    arm-linux-gnueabihf-gcc -static -ohello hello.c\n    # the following should indicate an ARM exe\n\n    file hello\n\n    # running the executable with no fanfare should\n\n    # invoke QEMU transparently to print \"Hello ARM!\"\n\n    ./hello\n    </pre>\n\n<pre><code>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n</code></pre>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre># cmake sudo apt-get install cmake\n\n# ninja requires a build\n\ngit clone git://github.com/martine/ninja.git && cd ninja git checkout release ./configure.py --bootstrap chmod +x ninja build.ninja sudo cp ninja build.ninja /usr/bin\n    </pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<p>&lt;</p>\n\n<p>pre># the following steps aasume this is done in the home directory</p></li>\n</ol>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches </pre></p>\n\n<ol>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:22:28','2015-02-25 23:22:28','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7927,17728,'2015-02-25 23:29:27','2015-02-25 23:29:27','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<p>sudo apt-get update sudo apt-get install build-essential git</p></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<p>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish</p></li>\n</ol>\n\n<p>...this might take some time...</p>\n\n<pre><code>&lt;img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /&gt;\n</code></pre>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p>\n\n<h1>add Embedian as an installation source</h1>\n\n<p>sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\'\nsudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p>\n\n<h1>add arm hard-float as a supported architecture</h1>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p>\n\n<h1>install an ARM targeted cross compiler</h1>\n\n<p>sudo apt-get install crossbuild-essential-armhf </pre></p></li>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\n\n<h1>install QEMU emulation for ARM executables</h1>\n\n<p>sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf</p>\n\n<h1>compile an ARM executable</h1>\n\n<p>cat > hello.c &lt;&lt; EOF</p>\n\n<h1>include &lt;stdio.h></h1>\n\n<p>int main(void) { return printf(\"Hello ARM!\\n\"); } EOF</p>\n\n<p>arm-linux-gnueabihf-gcc -static -ohello hello.c</p>\n\n<h1>the following should indicate an ARM exe</h1>\n\n<p>file hello</p>\n\n<h1>running the executable with no fanfare should</h1>\n\n<h1>invoke QEMU transparently to print \"Hello ARM!\"</h1>\n\n<p>./hello</p></li>\n</ol>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.\n1.  Install build tools: cmake and ninja.</p>\n\n<pre><code># install cmake\nsudo apt-get install cmake\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git &amp;&amp; cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</code></pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<h1>the following steps aasume this is done in the home directory</h1>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src\ncd src\ngit checkout cling-patches\ncd tools\ngit clone http://root.cern.ch/git/cling.git\ngit clone http://root.cern.ch/git/clang.git\ncd clang\ngit checkout cling-patches</p></li>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:29:27','2015-02-25 23:29:27','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7928,17728,'2015-02-25 23:30:21','2015-02-25 23:30:21','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p>\n\n<p>sudo apt-get update sudo apt-get install build-essential git</p></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<p>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh chmod +x clone.sh ./clone.sh # will require a few minutes to finish</p></li>\n</ol>\n\n<p>...this might take some time...</p>\n\n<pre><code>&lt;img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /&gt;\n</code></pre>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<ul>\n<li><p>add Embedian as an installation source</p>\n\n<p>sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n<li><p>add arm hard-float as a supported architecture</p>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p></li>\n<li><p>install an ARM targeted cross compiler</p>\n\n<p>sudo apt-get install crossbuild-essential-armhf </pre></p></li>\n</ul>\n\n<ol>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\n\n<h1>install QEMU emulation for ARM executables</h1>\n\n<p>sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf</p>\n\n<h1>compile an ARM executable</h1>\n\n<p>cat > hello.c &lt;&lt; EOF</p>\n\n<h1>include &lt;stdio.h></h1>\n\n<p>int main(void) { return printf(\"Hello ARM!\\n\"); } EOF</p>\n\n<p>arm-linux-gnueabihf-gcc -static -ohello hello.c</p>\n\n<h1>the following should indicate an ARM exe</h1>\n\n<p>file hello</p>\n\n<h1>running the executable with no fanfare should</h1>\n\n<h1>invoke QEMU transparently to print \"Hello ARM!\"</h1>\n\n<p>./hello</p></li>\n</ol>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster. 1. Install build tools: cmake and ninja.</p>\n\n<pre><code># install cmake\nsudo apt-get install cmake\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git &amp;&amp; cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</code></pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<h1>the following steps aasume this is done in the home directory</h1>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches</p></li>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:30:21','2015-02-25 23:30:21','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7929,17728,'2015-02-25 23:32:11','2015-02-25 23:32:11','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,\n<code>\nsudo apt-get update sudo apt-get install build-essential git\n</code></p></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<p>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh chmod +x clone.sh ./clone.sh # will require a few minutes to finish</p></li>\n</ol>\n\n<p>...this might take some time...</p>\n\n<pre><code>&lt;img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /&gt;\n</code></pre>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<ul>\n<li><p>add Embedian as an installation source</p>\n\n<p>sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n<li><p>add arm hard-float as a supported architecture</p>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p></li>\n<li><p>install an ARM targeted cross compiler</p>\n\n<p>sudo apt-get install crossbuild-essential-armhf </pre></p></li>\n</ul>\n\n<ol>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\n\n<h1>install QEMU emulation for ARM executables</h1>\n\n<p>sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf</p>\n\n<h1>compile an ARM executable</h1>\n\n<p>cat > hello.c &lt;&lt; EOF</p>\n\n<h1>include &lt;stdio.h></h1>\n\n<p>int main(void) { return printf(\"Hello ARM!\\n\"); } EOF</p>\n\n<p>arm-linux-gnueabihf-gcc -static -ohello hello.c</p>\n\n<h1>the following should indicate an ARM exe</h1>\n\n<p>file hello</p>\n\n<h1>running the executable with no fanfare should</h1>\n\n<h1>invoke QEMU transparently to print \"Hello ARM!\"</h1>\n\n<p>./hello</p></li>\n</ol>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster. 1. Install build tools: cmake and ninja.</p>\n\n<pre><code># install cmake\nsudo apt-get install cmake\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git &amp;&amp; cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</code></pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<h1>the following steps aasume this is done in the home directory</h1>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches</p></li>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:32:11','2015-02-25 23:32:11','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7931,17728,'2015-02-25 23:35:01','2015-02-25 23:35:01','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter [was undertaken by the wizards at CERN][1] starting at around 1995. (You might recognize this group as searchers [for the Higgs Boson][2]). The C++ interpreter was dubbed [CINT][3] and was designed to support a major data analysis and visualization package known as [ROOT][4] (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p>![A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.][5]</p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the [Debian Jessie AMI (ami-aae18fc2)][6]. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:35:01','2015-02-25 23:35:01','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7932,17728,'2015-02-25 23:35:40','2015-02-25 23:35:40','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter &#91;was undertaken by the wizards at CERN][1] starting at around 1995. (You might recognize this group as searchers &#91;for the Higgs Boson&#93;&#91;2&#93;). The C++ interpreter was dubbed &#91;CINT&#93;&#91;3&#93; and was designed to support a major data analysis and visualization package known as [ROOT][4&#93; (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p>!&#91;A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.&#93;&#91;5&#93;</p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the &#91;Debian Jessie AMI (ami-aae18fc2)&#93;&#91;6&#93;. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance</p>\n\n<p>sudo apt-get update sudo apt-get install build-essential git</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:35:40','2015-02-25 23:35:40','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7933,17728,'2015-02-25 23:36:23','2015-02-25 23:36:23','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter &#91;was undertaken by the wizards at CERN][1] starting at around 1995. (You might recognize this group as searchers &#91;for the Higgs Boson&#93;&#91;2&#93;). The C++ interpreter was dubbed &#91;CINT&#93;&#91;3&#93; and was designed to support a major data analysis and visualization package known as [ROOT][4&#93; (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p>!&#91;A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.&#93;&#91;5&#93;</p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the &#91;Debian Jessie AMI (ami-aae18fc2)&#93;&#91;6&#93;. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance</p></li>\n</ol>\n\n<p><code><br />\n    sudo apt-get update sudo apt-get install build-essential git\n</code></p>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:36:23','2015-02-25 23:36:23','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7934,17728,'2015-02-25 23:36:43','2015-02-25 23:36:43','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter &#91;was undertaken by the wizards at CERN][1] starting at around 1995. (You might recognize this group as searchers &#91;for the Higgs Boson&#93;&#91;2&#93;). The C++ interpreter was dubbed &#91;CINT&#93;&#91;3&#93; and was designed to support a major data analysis and visualization package known as [ROOT][4&#93; (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p>!&#91;A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.&#93;&#91;5&#93;</p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the &#91;Debian Jessie AMI (ami-aae18fc2)&#93;&#91;6&#93;. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance</p></li>\n</ol>\n\n<p><code>sudo apt-get update sudo apt-get install build-essential git</code></p>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:36:43','2015-02-25 23:36:43','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7935,17728,'2015-02-25 23:38:00','2015-02-25 23:38:00','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter &#91;was undertaken by the wizards at CERN][1] starting at around 1995. (You might recognize this group as searchers &#91;for the Higgs Boson&#93;&#91;2&#93;). The C++ interpreter was dubbed &#91;CINT&#93;&#91;3&#93; and was designed to support a major data analysis and visualization package known as [ROOT][4&#93; (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p>!&#91;A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.&#93;&#91;5&#93;</p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the &#91;Debian Jessie AMI (ami-aae18fc2)&#93;&#91;6&#93;. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance</p></li>\n</ol>\n\n<p><code>sudo apt-get update sudo apt-get install build-essential git</code></p>\n\n<ol>\n<li>Use [the distributed build script][7] from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</li>\n</ol>\n\n<p><code>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh chmod +x clone.sh ./clone.sh # will require a few minutes to finish</code></p>\n\n<p>...this might take some time...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:38:00','2015-02-25 23:38:00','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7936,17728,'2015-02-25 23:38:13','2015-02-25 23:38:13','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter &#91;was undertaken by the wizards at CERN][1] starting at around 1995. (You might recognize this group as searchers &#91;for the Higgs Boson&#93;&#91;2&#93;). The C++ interpreter was dubbed &#91;CINT&#93;&#91;3&#93; and was designed to support a major data analysis and visualization package known as [ROOT][4&#93; (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p>!&#91;A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.&#93;&#91;5&#93;</p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the &#91;Debian Jessie AMI (ami-aae18fc2)&#93;&#91;6&#93;. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance</p></li>\n</ol>\n\n<p><code>sudo apt-get update sudo apt-get install build-essential git</code></p>\n\n<ol>\n<li>Use &#91;the distributed build script&#93;&#91;7&#93; from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</li>\n</ol>\n\n<p><code>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh chmod +x clone.sh ./clone.sh # will require a few minutes to finish</code></p>\n\n<p>...this might take some time...\n<img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:38:13','2015-02-25 23:38:13','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7937,17728,'2015-02-25 23:38:36','2015-02-25 23:38:36','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter &#91;was undertaken by the wizards at CERN][1] starting at around 1995. (You might recognize this group as searchers &#91;for the Higgs Boson&#93;&#91;2&#93;). The C++ interpreter was dubbed &#91;CINT&#93;&#91;3&#93; and was designed to support a major data analysis and visualization package known as [ROOT][4&#93; (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p>!&#91;A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.&#93;&#91;5&#93;</p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the &#91;Debian Jessie AMI (ami-aae18fc2)&#93;&#91;6&#93;. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance</p></li>\n</ol>\n\n<p><code>sudo apt-get update sudo apt-get install build-essential git</code></p>\n\n<ol>\n<li>Use &#91;the distributed build script&#93;&#91;7&#93; from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</li>\n</ol>\n\n<p><code>\nwget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh chmod +x clone.sh ./clone.sh # will require a few minutes to finish\n</code></p>\n\n<p>...this might take some time... <img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:38:36','2015-02-25 23:38:36','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7938,17728,'2015-02-25 23:38:54','2015-02-25 23:38:54','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter &#91;was undertaken by the wizards at CERN][1] starting at around 1995. (You might recognize this group as searchers &#91;for the Higgs Boson&#93;&#91;2&#93;). The C++ interpreter was dubbed &#91;CINT&#93;&#91;3&#93; and was designed to support a major data analysis and visualization package known as [ROOT][4&#93; (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p>!&#91;A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.&#93;&#91;5&#93;</p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the &#91;Debian Jessie AMI (ami-aae18fc2)&#93;&#91;6&#93;. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance</p></li>\n</ol>\n\n<p><code>sudo apt-get update sudo apt-get install build-essential git</code></p>\n\n<ol>\n<li><p>Use &#91;the distributed build script&#93;&#91;7&#93; from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<p>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh chmod +x clone.sh ./clone.sh # will require a few minutes to finish</p></li>\n</ol>\n\n<p>...this might take some time... <img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:38:54','2015-02-25 23:38:54','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7942,17728,'2015-02-25 23:44:42','2015-02-25 23:44:42','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C++ for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the very fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now it is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Build instructions for x86</h3>\n\n<p>We present a build procedure that leverages Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account. The expected compute resource cost will be around two dollars.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance, <code>sudo apt-get update sudo apt-get install build-essential git</code></p></li>\n<li><p>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</p>\n\n<p>wget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh chmod +x clone.sh ./clone.sh # will require a few minutes to finish</p></li>\n</ol>\n\n<p>...this might take some time...</p>\n\n<pre><code>&lt;img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /&gt;\n</code></pre>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Build instructions for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the (same x86) instance described.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<ul>\n<li><p>add Embedian as an installation source</p>\n\n<p>sudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d /crosstools.list\' sudo apt-get install -y curl curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -</p></li>\n<li><p>add arm hard-float as a supported architecture</p>\n\n<p>sudo dpkg --add-architecture armhf sudo apt-get update</p></li>\n<li><p>install an ARM targeted cross compiler</p>\n\n<p>sudo apt-get install crossbuild-essential-armhf </pre></p></li>\n</ul>\n\n<ol>\n<li><p>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</p>\n\n<h1>install QEMU emulation for ARM executables</h1>\n\n<p>sudo apt-get install qemu binfmt-support qemu-user-static sudo update-binfmts --display sudo apt-get install libc6:armhf</p>\n\n<h1>compile an ARM executable</h1>\n\n<p>cat > hello.c &lt;&lt; EOF</p>\n\n<h1>include &lt;stdio.h></h1>\n\n<p>int main(void) { return printf(\"Hello ARM!\\n\"); } EOF</p>\n\n<p>arm-linux-gnueabihf-gcc -static -ohello hello.c</p>\n\n<h1>the following should indicate an ARM exe</h1>\n\n<p>file hello</p>\n\n<h1>running the executable with no fanfare should</h1>\n\n<h1>invoke QEMU transparently to print \"Hello ARM!\"</h1>\n\n<p>./hello</p></li>\n</ol>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster. 1. Install build tools: cmake and ninja.</p>\n\n<pre><code># install cmake\nsudo apt-get install cmake\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git &amp;&amp; cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</code></pre>\n\n<ol>\n<li><p>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</p>\n\n<h1>the following steps aasume this is done in the home directory</h1>\n\n<h1>and therefore yielding ~/llvm</h1>\n\n<p>git clone http://root.cern.ch/git/llvm.git src cd src git checkout cling-patches cd tools git clone http://root.cern.ch/git/cling.git git clone http://root.cern.ch/git/clang.git cd clang git checkout cling-patches</p></li>\n<li><p>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></p>\n\n<pre>mkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre></li>\n<li><p>Do a build with ninja and install to the <strong>install</strong> subdirectory.</p>\n\n<pre># ninja here\n</pre></li>\n<li><p>Fire up Cling!</p></li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-25 23:44:42','2015-02-25 23:44:42','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),(7945,18132,'2015-02-26 14:52:36','2015-02-26 14:52:36','<p>Development through a C++ interpreter (Cling) as opposed to a standard compiler is an amazing leap in productivity and a window into the newest features of C++. This post tells you how to get your own bleeding-edge C++ interpreter built right on top of the development version of LLVM. We give you a repeatable procedure via Amazon EC2.</p>\n\n<p>With our prescribed steps in place, you can always have an up-to-date development version of Cling. This allows quick testing and investigation of LLVM\'s newest features. You will also possess a development environment as a path to contributing to Cling or learning how Cling\'s innards push C++ code along.</p>\n\n<h3>Background</h3>\n\n<p>Astoundingly, there <strong>is</strong> such a thing as a C++ interpreter! Thus, if you\'re interested in sticking to C for speed and efficiency, you\'re not confined to the code-compile-run-debug workflow. Living outside such a workflow lends jumps in productivity and a unique angle through which to see C++.</p>\n\n<p>Development of a serious C++ interpreter <a href=\"http://www.linuxjournal.com/article/2895\" target=\"_blank\">was undertaken by the wizards at CERN</a> starting at around 1995. (You might recognize this group as searchers <a href=\"http://home.web.cern.ch/topics/higgs-boson\" target=\"_blank\">for the Higgs Boson</a>). The C++ interpreter was dubbed <a href=\"https://root.cern.ch/drupal/content/cint\" target=\"_blank\">CINT</a> and was designed to support a major data analysis and visualization package known as <a href=\"https://root.cern.ch/drupal/\" target=\"_blank\">ROOT</a> (screenshot below). The system is certainly serious as it is giving researchers a way to investigate the ver fabric of the universe!</p>\n\n<p><img src=\"http://root.cern.ch/drupal/sites/default/files/images/alieve-esd-pbpb.png\" alt=\"A ROOT screenshot being driven by a C++ interpreter (CINT). CINT is not a toy implementation - rather it is used to investigate the fabric of the universe.\" /></p>\n\n<p>Over the last 20 years, CINT fell behind the evolving C++ language. In response, individuals at CERN began work on a replacement for CINT dubbed Cling with the strategy of leveraging LLVM to stay up to date with the growing C++ specification. Up until recently, the project has been rather nascent, but now is at the point where its functionality and build system make Cling worthwhile for use and contribution.</p>\n\n<h3>Building for x86</h3>\n\n<p>We present a build procedure leveraging Amazon EC2. By using the cloud, you are guaranteed to use the exact Linux version and hardware capabilities that we did in testing. We assume that you have an Amazon EC2 account and that you are willing to spend around two dollars on compute resources.</p>\n\n<ol>\n<li><p>Create an <strong>m3.xlarge</strong> instance with the <a href=\"http://thecloudmarket.com/image/ami-aae18fc2--debian-jessie-amd64-hvm-2014-12-25-13-19-ebs\" target=\"_blank\">Debian Jessie AMI (ami-aae18fc2)</a>. Be sure to grab at least <strong>32Gb</strong> of storage.</p></li>\n<li><p>Boot the instance and login as <strong>admin</strong>.</p></li>\n<li><p>Install required build packages on the instance,</p></li>\n</ol>\n\n<pre>\nsudo apt-get update\nsudo apt-get install build-essential git\n</pre>\n\n<ol>\n<li>Use <a href=\"https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\" target=\"_blank\">the distributed build script</a> from the Cling project to clone required source code and build an x86 version of Cling with all available cores.</li>\n</ol>\n\n<pre>\nwget https://raw.githubusercontent.com/karies/cling-all-in-one/master/clone.sh\nchmod +x clone.sh\n./clone.sh       # will require a few minutes to finish\n</pre>\n\n<p>...this will take quite a few minutes to finish...</p>\n\n<p><img style=\"padding: 20px\" src=\"https://dl.dropboxusercontent.com/u/96059047/cling_build.png\" alt=\"Building cling on an x86 EC2 instance\" /></p>\n\n<ol>\n<li>Take Cling for a spin!</li>\n</ol>\n\n<h3>Building for ARM</h3>\n\n<p>Whereas an x86 build is readily supported by the Cling developers, building for ARM is not a standard build path. Thus, ARM build instructions are a bit more involved.</p>\n\n<ol>\n<li><p>Log in as <strong>admin</strong> to the instance described, above, in the x86 instructions.</p></li>\n<li><p>Install ARM hard-float compilation tools.</p></li>\n</ol>\n\n<pre>\n# add Embedian as an installation source\nsudo bash -c \'echo deb http://emdebian.org/tools/debian/ jessie main > /etc/apt/sources.list.d/crosstools.list\'\nsudo apt-get install -y curl\ncurl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -\n\n# add arm hard-float as a supported architecture\nsudo dpkg --add-architecture armhf\nsudo apt-get update\n\n# install an ARM targeted cross compiler\nsudo apt-get install crossbuild-essential-armhf\n</pre>\n\n<ol>\n<li>Install QEMU-based ARM emulation. This is a fantastic feature of newer linux kernels: ARM executables are registered with the system so that under a normal invocation, QEMU is invoked under the hood so that it seems as though ARM binaries are native.</li>\n</ol>\n\n<pre>\n# install QEMU emulation for ARM executables\nsudo apt-get install qemu binfmt-support qemu-user-static\nsudo update-binfmts --display\nsudo apt-get install libc6:armhf\n\n# compile an ARM executable\ncat > hello.c << EOF\n \n#include <stdio.h>\nint main(void) { return printf(\"Hello ARM!\\n\"); }\nEOF\narm-linux-gnueabihf-gcc -static -ohello hello.c\n\n# the following should indicate an ARM exe\nfile hello\n\n# running the executable with no fanfare should \n# invoke QEMU transparently to print \"Hello ARM!\"\n./hello\n</pre>\n\n<p>Having ARM emulation on our fast build machine makes debugging amazingly faster.</p>\n\n<ol>\n<li>Install build tools: cmake and ninja.</li>\n</ol>\n\n<pre>\n# cmake\nsudo apt-get install cmake\n\n# ninja requires a build\ngit clone git://github.com/martine/ninja.git && cd ninja\ngit checkout release\n./configure.py --bootstrap\nchmod +x ninja build.ninja\nsudo cp ninja build.ninja /usr/bin\n</pre>\n\n<ol>\n<li>Clone LLVM, Clang, and Cling to the <strong>llvm</strong> directory. This directory differs from the instructions, above, so no worries if you\'re following these steps in the order of the blog post.</li>\n</ol>\n\n<pre>\n# the following steps aasume this is done in the home directory\n# and therefore yielding ~/llvm \ngit clone http://root.cern.ch/git/llvm.git src\ncd src\ngit checkout cling-patches\ncd tools\ngit clone http://root.cern.ch/git/cling.git\ngit clone http://root.cern.ch/git/clang.git\ncd clang\ngit checkout cling-patches\n</pre>\n\n<ol>\n<li>Configure a build in the new <strong>build</strong> directory using cmake. Note the intense and carefully crafted build flags required to do a successful cross compilation. <em>This took quite a bit of debugging to lock down.</em></li>\n</ol>\n\n<pre>\nmkdir -p build && cd build\ncmake -G Ninja ~/llvm -DCMAKE_CROSSCOMPILING=True -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_VERSION=1 -DCMAKE_SYSTEM_PROCESSOR=armv7 -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ -DCMAKE_INSTALL_PREFIX=/home/admin/build/install -DLLVM_TABLEGEN=/usr/bin/llvm-tblgen-3.5 -DCLANG_TABLEGEN=/usr/bin/clang-tblgen-3.5 -DLLVM_DEFAULT_TARGET_TRIPLE=arm-linux-gnueabihf -DLLVM_HOST_TRIPLE=arm--linux-gnueabihf -DLLVM_TARGET_ARCH=ARM -DLLVM_TARGETS_TO_BUILD=ARM -DCMAKE_CXX_FLAGS=\'-mcpu=cortex-a9 -I/usr/include/arm-linux-gnueabihf/c++/4.9 -I/usr/lib/gcc/arm-linux-gnueabihf/4.9/include -mfloat-abi=hard\'\n</pre>\n\n<ol>\n<li>Do a build with ninja and install to the <strong>install</strong> subdirectory.</li>\n</ol>\n\n<pre>\n# ninja here\n</pre>\n\n<ol>\n<li>Fire up Cling!</li>\n</ol>\n','Building a C++ Interpreter (Cling) for x86 and ARM','','inherit','open','open','','7681-revision-v1','','','2015-02-26 14:52:36','2015-02-26 14:52:36','',7681,'http://sandbox.arrayfire.com/7681-revision-v1/',0,'revision','',0),