Git Product home page Git Product logo

ghc-android's Introduction

ghc-android

Build script for building ghc cross compilers targeting Android. This script wraps up all the hacks and tweaks that are currently needed to get a working ghc android crosscompiler. It will download the Android NDK, the iconv library, the ncurses library and GHC itself as required. If you already have the Android NDK you can put it in the tarfiles directory and the build script will reuse it. If you already have a ghc clone, you can use the mirror script to avoid doing a full re-download during cloning.

Before starting a build you will need a working gcc, git, happy, alex and (at least for arm builds) llvm-3.2 on the build host. You will also need enough 32 bit support to run the Android NDK compiler. Usually just glibc, libstdc++ and zlib should be enough.

To build a ghc-android compiler execute:

./build

By default this should give you a android-14 arm-linux-androideabi-4.7 compiler at:

~/.ghc/android-14/arm-linux-androideabi-4.7/bin

Add this directory to your PATH to use the cross compiler with the full target prefix.

Or add:

~/.ghc/android-14/arm-linux-androideabi-4.7/arm-linux-androideabi/bin

to your PATH to use it without prefixes. There is also a cabal wrapper script in this directory that will cross compile packages with cable and add them to the ghc package-db.

You can change various variables via the environment to give you other configurations.

There is also a pre-configured x86 variation you can build like this:

./build --x86

If you want to build more than one configuration it is worth building a local mirror repo to speed up subsequent ghc clones. To build a mirror run:

./mirror {path to existing ghc clone}

During ./build the GHC repo is cloned into appropriate path, e.g.:

./build-android-14-arm-linux-androideabi-4.7/ghc

So the mirror path can become this:

./mirror build-android-14-arm-linux-androideabi-4.7/ghc

This will build a mirror that will automatically be used by the build script to speed up cloning.

The following configurations have been tested on an up-to-date Arch Linux install and are known to work:

* ghc-android-14-arm-linux-androideabi-4.7
* ghc-android-14-x86-4.7

Comments, patches and success reports are welcome.

tested working build with Debian stable

Running these commands will make a Debian stable chroot and build in there.

debootstrap --arch=i386 stable debian-stable-android
chroot debian-stable-android

mount -t proc proc /proc
echo "deb-src http://ftp.us.debian.org/debian stable main" >> /etc/apt/sources.list
apt-get update
apt-get -y install build-essential ghc git libncurses5-dev cabal-install
apt-get -y install llvm-3.0 # not 3.1; buggy on arm. 3.2 is ok too
apt-get -y install ca-certificates curl file m4 autoconf zlib1g-dev
apt-get -y install libgnutls-dev libxml2-dev libgsasl7-dev pkg-config
apt-get -y install python c2hs
wget http://snapshot.debian.org/archive/debian/20130903T155330Z/pool/main/a/automake-1.14/automake_1.14-1_all.deb
dpkg -i automake*.deb
rm *.deb
adduser androidbuilder
su androidbuilder

cd
rm -rf .ghc .cabal
cabal update
cabal install happy alex --bindir=$HOME/bin
PATH=$HOME/bin:$PATH
export PATH
git clone https://github.com/joeyh/ghc-android
cd ghc-android
git checkout stable-ghc-snapshot
./build

ghc-android's People

Contributors

atondwal avatar crackleware avatar joeyh avatar neurocyte avatar tener avatar tommyschnabel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ghc-android's Issues

./build --x86 failed - `i686-linux-android': system `android' not recognized

Having followed the tutorial. Compilation for arm works well. By wanting to compile against x86 I have this error message.

androidbuilder@x220:~$ cd ghc-android/
androidbuilder@x220:~/ghc-android$ ./build --x86
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for i686-linux-android-strip... i686-linux-android-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make sets $(MAKE)... (cached) yes
checking for i686-linux-android-gcc... i686-linux-android-gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... yes
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether i686-linux-android-gcc accepts -g... yes
checking for i686-linux-android-gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of i686-linux-android-gcc... none
checking how to run the C preprocessor... i686-linux-android-gcc -E
checking for a BSD-compatible install... /usr/bin/install -c
checking for strip... /usr/bin/strip
checking for i686-linux-android-strip... (cached) i686-linux-android-strip
checking build system type... i486-pc-linux-gnu
checking host system type... Invalid configuration `i686-linux-android': system `android' not recognized
configure: error: /bin/bash build-aux/config.sub i686-linux-android failed```

compiling on x86_64

Hi,
after a long pause, I got excited about haskell on android again and found your github. I'm trying to use this on ubuntu-12.04, x86_64. With some build script modifications, I have reached the actual ghc compilation:

./configure --prefix=/home/trin/handroid/ghc --target=arm-linux-androideabi

... lots of output
... every header.h check looks like this:

configure: WARNING: sys/eventfd.h: present but cannot be compiled
configure: WARNING: sys/eventfd.h: check for missing prerequisite headers?
configure: WARNING: sys/eventfd.h: see the Autoconf documentation
configure: WARNING: sys/eventfd.h: section "Present But Cannot Be Compiled"
configure: WARNING: sys/eventfd.h: proceeding with the compiler's result
configure: WARNING: ## ----------------------------------------------- ##
configure: WARNING: ## Report this to [email protected] ##
configure: WARNING: ## ----------------------------------------------- ##

... lots of output

Configure completed successfully.

Building GHC version : 7.7.20130428

Build platform : x86_64-unknown-linux
Host platform : x86_64-unknown-linux
Target platform : arm-unknown-linux-android

Bootstrapping using : /usr/bin/ghc
which is version : 7.4.1

Using gcc : /home/trin/handroid/ghc-android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
which is version : 4.7
Building a cross compiler : YES

ld : /home/trin/handroid/ghc-android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld
Happy : /usr/bin/happy (1.18.9)
Alex : /usr/bin/alex (3.0.1)
Perl : /usr/bin/perl
dblatex :
xsltproc :

Using LLVM tools
llc : /home/trin/handroid/llvm-3.2/bin/llc
opt : /home/trin/handroid/llvm-3.2/bin/opt

HsColour was not found; documentation will not contain source links

Building DocBook HTML documentation : NO
Building DocBook PS documentation : NO

Building DocBook PDF documentation : NO

... but then during make, there is:

inplace/bin/deriveConstants --gen-header -o includes/dist-derivedconstants/header/DerivedConstants.h --tmpdir includes/dist-derivedconstants/header/ --gcc-program "/home/trin/handroid/ghc-android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc" --gcc-flag -fno-stack-protector --gcc-flag -Iincludes --gcc-flag -Iincludes/dist --gcc-flag -Iincludes/dist-derivedconstants/header --gcc-flag -Iincludes/dist-ghcconstants/header --gcc-flag -Irts --gcc-flag -fcommon --nm-program "/home/trin/handroid/ghc-android/android-ndk-r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-nm"
In file included from includes/Rts.h:30:0,
from includes/dist-derivedconstants/header/tmp.c:13:
includes/Stg.h:65:18: fatal error: math.h: No such file or directory
compilation terminated.

Does the config result look sane? Any idea what can be wrong?
I will try tomorrow again with x86, because I ran out of ideas.

Thanks for any help,
Martin

Create a binary distribution

Building the full cross compiler with template-haskell support takes quite a while because it is in effect a stage 3 compiler. I think a binary distribution would really help lower the barrier to entry for Haskell based Android development.

Would anyone else use a binary distribution?

No LICENSE file

I would like to use this for a project, but I'm unsure what license it uses. I may need to modify and redistribute the script with my project. Can you add a LICENSE file?

System.Posix.getEnvironment => []

This apparently fails, and always returns a null list.

System.Environment.getEnvironment does work.

I have not checked, but it seems likely other functions in System.Posix.Env are also broken.

Also, there is something weird going on, it seems that in some cases even when System.Environment.getEnvironment should be used, a null list is returned. I have a test case involving an internal module:

import System.Environment
import qualified Internal.Module

main = print =<< getEnvironment

This prints [], and commenting out the second import fixes it. The module is not used at all, but it does import a lot of other modules including System.Posix.Env.

some more documentation

(Thanks -- it works! Well, builds, and cross-compiles binaries that look reasonable.)

The README leaves a few open questions that it would help users like me to fill in:

  • What do I need installed to build this? One thing I found I had to install, when the ghc build failed part way through, is llvm.
  • Where does it install? Seems that build script causes it to install into ~/.ghc-android-14-arm-linux-androideabi-4.7/ or similar.
  • How to use cabal with it, to cross-compile the libraries my program depends on?
    I've tried setting --with-ghc to point at the cross ghc, but then this happens:

Configuring mtl-2.1.2...
cabal: /home/joey/tmp/10048.o: does not exist

Build fails with "Can't use -fPIC or -dynamic on this platform"

I tried to run ./build on my Arch Linux, x86-64 PC. Lots of things compile but now it's failing at this line:

"inplace/bin/ghc-stage1" -M -fPIC -dynamic  -H64m -O0 -fasm    -hide-all-packages -i -iutils/compare_sizes/. -iutils/compare_sizes/dist-install/build -iutils/compare_sizes/dist-install/build/autogen -Iutils/compare_sizes/dist-install/build -Iutils/compare_sizes/dist-install/build/autogen     -optP-include -optPutils/compare_sizes/dist-install/build/autogen/cabal_macros.h -package base-4.7.0.0 -package directory-1.2.0.1 -package filepath-1.3.0.2 -XHaskell98  -no-user-package-db -rtsopts      -odir utils/compare_sizes/dist-install/build -hidir utils/compare_sizes/dist-install/build -stubdir utils/compare_sizes/dist-install/build -dep-makefile utils/compare_sizes/dist-install/build/.depend.haskell.tmp -dep-suffix "dyn_" -include-pkg-deps  utils/compare_sizes/./Main.hs
: Can't use -fPIC or -dynamic on this platform
make[1]: *** [utils/compare_sizes/dist-install/build/.depend.haskell] Błąd 1

The ghc-stage1 reports this information:

inplace/bin/ghc-stage1 --info
 [("Project name","The Glorious Glasgow Haskell Compilation System")
 ,("GCC extra via C opts"," -fwrapv")
 ,("C compiler command","/home/tener/.ghc/android-14/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gcc")
 ,("C compiler flags"," -fno-stack-protector")
 ,("C compiler link flags","")
 ,("ld command","/home/tener/.ghc/android-14/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-ld")
 ,("ld flags","")
 ,("ld supports compact unwind","YES")
 ,("ld supports build-id","YES")
 ,("ld supports filelist","NO")
 ,("ld is GNU ld","YES")
 ,("ar command","/usr/bin/ar")
 ,("ar flags","q")
 ,("ar supports at file","YES")
 ,("touch command","touch")
 ,("dllwrap command","/bin/false")
 ,("windres command","/bin/false")
 ,("perl command","/usr/bin/perl")
 ,("target os","OSAndroid")
 ,("target arch","ArchARM {armISA = ARMv5, armISAExt = [], armABI = SOFT}")
 ,("target word size","4")
 ,("target has GNU nonexec stack","False")
 ,("target has .ident directive","True")
 ,("target has subsections via symbols","False")
 ,("Unregisterised","NO")
 ,("LLVM llc command","/usr/bin/llc")
 ,("LLVM opt command","/usr/bin/opt")
 ,("Project version","7.7.20130417")
 ,("Booter version","7.4.1")
 ,("Stage","1")
 ,("Build platform","x86_64-unknown-linux")
 ,("Host platform","x86_64-unknown-linux")
 ,("Target platform","arm-unknown-linux-android")
 ,("Have interpreter","YES")
 ,("Object splitting supported","NO")
 ,("Have native code generator","NO")
 ,("Support SMP","YES")
 ,("Tables next to code","YES")
 ,("RTS ways","l debug  thr thr_debug thr_l  dyn debug_dyn thr_dyn thr_debug_dyn l_dyn thr_l_dyn")
 ,("Dynamic by default","NO")
 ,("GHC Dynamic","YES")
 ,("Leading underscore","NO")
 ,("Debug on","False")
 ,("LibDir","/home/tener/dokumenty/forks/ghc-android/build-android-14-arm-linux-androideabi-4.7/ghc/inplace/lib")
 ,("Global Package DB","/home/tener/dokumenty/forks/ghc-android/build-android-14-arm-linux-androideabi-4.7/ghc/inplace/lib/package.conf.d")
 ]

inplace/bin/ghc-stage1 -V    
The Glorious Glasgow Haskell Compilation System, version 7.7.20130417

hsc2hs wrapper script is wrong

The hsc2hs wrapper script is missing --cc and --ld flags. The current one generates code for the host CC compiler. I updated mine to

/bin/bash

exec /usr/bin/hsc2hs --cc=arm-linux-androideabi-gcc --ld=arm-linux-androideabi-ld --cross-compile "$@

Cabal compiles Setup.hs with cross-compiler

And I get the following error

/home/androidbuilder/.ghc/android-21/arm-linux-androideabi-4.8/cabal/setup-exe-cache/setup-Configure-Cabal-1.22.2.0-arm-linux-android-ghc-7.10.1: 1: /home/androidbuilder/.ghc/android-21/arm-linux-androideabi-4.8/cabal/setup-exe-cache/setup-Configure-Cabal-1.22.2.0-arm-linux-android-ghc-7.10.1: Syntax error: word unexpected (expecting ")")

How can I compile Setup.hs with a host compiler and still build packages for the target?

Use system linker on android

ghc-android builds with 'DYNAMIC_GHC_PROGRAMS = NO', hence uses GHCs builtin linker, whose arm support is inclomplete. This leads to error cases such as:

$ arm-linux-androideabi-cabal install --reinstall --force-reinstall vector
...
[ 5 of 19] Compiling Data.Vector.Fusion.Stream.Monadic ( Data/Vector/Fusion/Stream/Monadic.hs, dist/build/Data/Vector/Fusion/Stream/Monadic.o )
Loading package ghc-prim ... linking ... ghc: /home/androidbuilder/.ghc/android-14/arm-linux-androideabi-4.8/lib/arm-unknown-linux-androideabi-ghc-7.7.20130921/ghc-prim-0.3.1.0/HSghc-prim-0.3.1.0.o: unhandled ELF relocation(Rel) type 28

ghc: unable to load package `ghc-prim'
Failed to install vector-0.10.9.1
...

ifdef check for android?

At this point I have ported hundreds of haskell libraries to android, and have a fully working application.

I have not sent many of my patches to the library authors. Partly because they often need #ifdef, and I'm not sure what to test for to detect that an Android cross compile is being done.

It would be possible to do this just via cabal flags, so cabal install -fAndroid sets a cpp ANDROID. But that would make for more intrusive patches, and would need to manually specify the cabal flag. It would be much nicer if there were something already defined that cpp could use.

Perhaps there already is a symbol I can use. If so, please consider this a request to document it in the README so I have something to point library authors at as they integrate Android support

Patch doesn't apply cleanly on GHC head

The build script is failing while attempting to patch the latest version of GHC. The failing patch is ghc-fix-sync-all.patch and it fails complaining that "Hunk #1 FAILED at 790.".

build error

I am building ghc-android in linux mint. When running the build script I get an error : ghc-cabal: At least the following dependencies ar missing: array ==0.5.* . But I have array 0.5 installed globally. Also I noticed that I get a warning : "Warning: This package indirectly depends on multiple versions of the same package. This is highly likely to cause a compile failure -> package ghc-7.9 requires array-0.4.0.1 etc...... package ghc-bin-7.9.20140520 requires array-0.5.0.0" .

You don't need to build gmp

You can simplify this by getting rid of your gmp build and adding...

INTEGER_LIBRARY = integer-simple

...to your build.mk.

Failed configuration: `androideabi not recognized`

On my Fedora system, after adjusting build to use automake-1.7 the configuration terminates with:

checking for arm-linux-androideabi-strip... (cached) arm-linux-androideabi-strip
checking build system type... x86_64-redhat-linux-gnu
checking host system type... Invalid configuration `arm-linux-androideabi': system `androideabi' not recognized
configure: error: /bin/sh build-aux/config.sub arm-linux-androideabi failed

cabal fails with Custom Setup.hs

Trying to build packages that use a Custom Setup.hs with the cabal wrapper will fail. It seems cabal doesn't really understand cross-compiling, so it builds the Setup.hs with the android ghc, and then tries to run it.

I don't know of a fix at this time. May need cabal changes. I was able to work around it in one case by setting Build-Type: Simple in the cabal file. That package only used the cistom Setup.hs to do some haddock stuff.

Build script is a bit too tricky because of "pushd"/"popd"

Build script uses pushd/popd a lot.

It confuses, you need to balance pushd/popd...

There is alternative:

( cd "$directory"
)

The code in in () have separate current directory.

Is it an early version of the script?

When something fails and I restart the script I see different error message... Also it clones the same git repositories multiple times...

FTBFS

Building current ghc head fails. In a particularly nasty way involving arm assembly code. For example:

../src/arm/sysv.S:281: Error: no such instruction: `beq .Lretint'

That's not a bug in ghc-android itself, but I wonder if it would make sense to find a ghc release that works, and build from it by default rather than from git head?

ld.gold: -shared and -r are incompatible

Hello. I am trying to compile the android-haskell-activity example. I get this error:

$ arm-linux-androideabi-cabal install
Configuring HaskellActivity-0.1.0.0...
Building HaskellActivity-0.1.0.0...
Preprocessing executable 'libhaskell.so' for HaskellActivity-0.1.0.0...
[1 of 1] Compiling HaskellActivity  ( src/HaskellActivity.hs, dist/build/libhaskell.so/libhaskell.so-tmp/HaskellActivity.o )
/opt/ghc/android-21/arm-linux-androideabi-4.8/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld.gold: fatal error: -shared and -r are incompatible
collect2: error: ld returned 1 exit status
cabal: Error: some packages failed to install:
HaskellActivity-0.1.0.0 failed during the building phase. The exception was:
ExitFailure 1

Because Android requires position independent code, I can't run it.

running ghc with the -fPIC option does not work either:

$ arm-unknown-linux-androideabi-ghc -fPIC Test.hs
<command line>: Can't use -fPIC or -dynamic on this platform

Any clues to what might be causing this?

Linking fail with "unsupported ELF machine number 0"

I have a problem with ghc-android. Basically whenever I try to link executable (libraries are fine) I get the following error:
/home/tener/dokumenty/projekty/mygame/ghc-for-android/ghc-android-joeyh/installdir/.ghc/android-14/arm-linux-androideabi-4.8/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: fatal error: /home/tener/dokumenty/projekty/mygame/ghc-for-android/ghc-android-joeyh/demo/foreign-jni/.cabal-sandbox/lib/arm-linux-android-ghc-7.8.2/foreign-jni-0.1.0.0/libHSforeign-jni-0.1.0.0.a(JNI.o): unsupported ELF machine number 0

This happens both on "clean" Debian stable and on my host Arch Linux system.

This should probably be reported to https://github.com/joeyh/ghc-android since I was building based on stable-ghc-snapshot branch of this repo, but it has "Issues" disabled and this one is upstream anyway, so here you go.

I tried googling this error but I have no clues about why it fails.

deprecated build instructions for gnutls26

following your build on windows 8 running virtualbox with the most recent x64 debian, following the tutorial in the ghc-android/Readme.md
root@debian:~/ghc-android# ./build
fails with
Unable to find a source for package for gnults26.
I think this is because I used
apt-get -y install libgnutls28-dev
in place of your surgested lbgnults-dev which fails with;
Package 'libgnutls-dev' has no installation candidate

NDK example

It would be great if this included a directory with everything needed to build an Andoid apk package, that contains a Haskell hello world example that somehow gets run. This would be a good starting point for haskell users to start doing Android app development.

It might be possible to use the FFI to build the haskell code into a shared library, and then use the NDK to make the Android app's java code call into it.

build script failed

Sorry if this is the wrong place to put this.
I was trying ./build on Debian "wheezy", which is currently stable.

I had to upgrade automake to 1.13 which I just used the package from sid and it worked fine. That should probably be mentioned in the Readme or something.

The script is still failing for me however. Here's the output:

jim@jotunheim:~/Repos/ghc-android$ ./build
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for arm-linux-androideabi-strip... arm-linux-androideabi-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make sets $(MAKE)... (cached) yes
checking for arm-linux-androideabi-gcc... arm-linux-androideabi-gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... yes
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether arm-linux-androideabi-gcc accepts -g... yes
checking for arm-linux-androideabi-gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of arm-linux-androideabi-gcc... none
checking how to run the C preprocessor... arm-linux-androideabi-gcc -E
checking for a BSD-compatible install... /usr/bin/install -c
checking for strip... /usr/bin/strip
checking for arm-linux-androideabi-strip... (cached) arm-linux-androideabi-strip
checking build system type... x86_64-pc-linux-gnu
checking host system type... Invalid configuration arm-linux-androideabi': systemandroideabi' not recognized
configure: error: /bin/bash build-aux/config.sub arm-linux-androideabi failed

Merge with official GHC?

Can we merge Android compatibility into the official GHC build? It would be nice to get Android support out of the box with Haskell Platform.

build with a released ghc?

The problem with building from ghc git is that some libraries need updates to work with this unreleased ghc (depend on base < 4.7), and as it's still probably a bit of a moving target, it's asking a lot of their maintainers to update them to support it already. Building libraries against the Android libc is already enough source of fun without also having to deal with this. ;)

Is there anything in ghc-android that needs ghc git, or could it build against ghc 7.6.2? All I can think of that it might need is the new codegen, perhaps?

darcs.haskell.org git is slow

I'm seeing around 2 kb/s cloning from darcs.haskell.org. Tried on multiple machines on different continents. Could it either download a tarball from someplace, or use the mirror of the git repo available here on github?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.