Giter VIP home page Giter VIP logo

kvm-unit-tests's People

Contributors

anadav avatar andre-arm avatar avikivity avatar bonzini avatar bwendling avatar caavery avatar davidhildenbrand avatar dmatlack avatar eauger avatar frankjaa avatar huth avatar jan-kiszka avatar jasowang avatar jsmattsonjr avatar kevmw avatar marc-orr avatar matosatti avatar mgamal avatar mstsirkin avatar oupton avatar peterfeiner avatar rkrcmar avatar rvka avatar sjitindarsingh avatar stsquad avatar vittyvk avatar vivier avatar whitebrandy avatar xelatex avatar xzpeter avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

kvm-unit-tests's Issues

target-efi: Invalid EFI_ARCH on Debian 9.9

If I try to build kvm-unit-tests with --target-efi on Debian 9.9 I get the following error:

gcc -mstrict-align -std=gnu99 -ffreestanding -O2 -I /home/alex/kvm-unit-tests/lib -I /home/alex/kvm-unit-tests/lib/libfdt -I lib -g -MMD -MF lib/.efi.d -fno-strict-aliasing -fno-common -Wall -Wwrite-strings -Wempty-body -Wuninitialized -Wignored-qualifiers -Werror -fomit-frame-pointer -fno-stack-protector -Wno-frame-address -Wclobbered -Wunused-but-set-parameter -DTARGET_EFI -DEFI_DEBUG -I /usr/include/efi -I /usr/include/efi/aa64 -fpic -fshort-wchar -fno-stack-check -fno-merge-all-constants -Wno-error=missing-prototypes -Wno-error=strict-prototypes -Wno-error=pragmas -Wmissing-parameter-type -Wold-style-declaration -Woverride-init -Wmissing-prototypes -Wstrict-prototypes -c -o lib/efi.o lib/efi.c
In file included from lib/efi.c:14:0:
/usr/include/efi/efi.h:41:21: fatal error: efibind.h: No such file or directory
#include "efibind.h"
^
compilation terminated.
: recipe for target 'lib/efi.o' failed
make: *** [lib/efi.o] Error 1

This is fixed by setting EFI_ARCH=aarch64 in Makefile.

System configuration:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.9 (stretch)
Release: 9.9
Codename: stretch

$ dpkg-query --status gnu-efi
Package: gnu-efi
Status: install ok installed
Priority: optional
Section: devel
Installed-Size: 522
Maintainer: Julian Andres Klode [email protected]
Architecture: arm64
Version: 3.0.9-1
Description: Library for developing EFI applications
GNU toolchain for building applications that can run in the environment
presented by Intel's EFI (Extensible Firmware Interface). EFI is a firmware
specification for the "BIOS" on ia64(IPF), IA-32(x86) and x86_64 systems.
Homepage: http://sourceforge.net/projects/gnu-efi/

$ dpkg-query -L gnu-efi
/.
/usr
/usr/include
/usr/include/efi
/usr/include/efi/aarch64
/usr/include/efi/aarch64/efibind.h
/usr/include/efi/aarch64/efilibplat.h
/usr/include/efi/aarch64/efisetjmp_arch.h
/usr/include/efi/efi.h
/usr/include/efi/efi_nii.h
/usr/include/efi/efi_pxe.h
/usr/include/efi/efiapi.h
/usr/include/efi/eficompiler.h
/usr/include/efi/eficon.h
/usr/include/efi/efidebug.h
/usr/include/efi/efidef.h
/usr/include/efi/efidevp.h
/usr/include/efi/efierr.h
/usr/include/efi/efifs.h
/usr/include/efi/efigpt.h
/usr/include/efi/efiip.h
/usr/include/efi/efilib.h
/usr/include/efi/efilink.h
/usr/include/efi/efinet.h
/usr/include/efi/efipart.h
/usr/include/efi/efipciio.h
/usr/include/efi/efipoint.h
/usr/include/efi/efiprot.h
/usr/include/efi/efipxebc.h
/usr/include/efi/efirtlib.h
/usr/include/efi/efiser.h
/usr/include/efi/efisetjmp.h
/usr/include/efi/efishellintf.h
/usr/include/efi/efishellparm.h
/usr/include/efi/efistdarg.h
/usr/include/efi/efitcp.h
/usr/include/efi/efiudp.h
/usr/include/efi/efiui.h
/usr/include/efi/libsmbios.h
/usr/include/efi/pci22.h
/usr/include/efi/protocol
/usr/include/efi/protocol/adapterdebug.h
/usr/include/efi/protocol/eficonsplit.h
/usr/include/efi/protocol/efidbg.h
/usr/include/efi/protocol/efivar.h
/usr/include/efi/protocol/intload.h
/usr/include/efi/protocol/legacyboot.h
/usr/include/efi/protocol/piflash64.h
/usr/include/efi/protocol/vgaclass.h
/usr/include/efi/romload.h
/usr/lib
/usr/lib/crt0-efi-aarch64.o
/usr/lib/elf_aarch64_efi.lds
/usr/lib/libefi.a
/usr/lib/libgnuefi.a
/usr/share
/usr/share/doc
/usr/share/doc/gnu-efi
/usr/share/doc/gnu-efi/TODO.Debian
/usr/share/doc/gnu-efi/changelog.Debian.gz
/usr/share/doc/gnu-efi/changelog.gz
/usr/share/doc/gnu-efi/copyright

Support for non-contiguous memory maps

Hi Drew,

I am working on running EFI tests on a Neoverse N1 server and one of the issues I run into was that its memory map (at least the way UEFI is reporting it) is not contiguous. Looking at git log it seems that you are aware of this.

assert(r);

It looks like, we need to fix to allow non-contiguous memory maps would be to change the way we clean and invalidate the data cache to avoid gaps and executing dc civac for invalid memory locations.

I was thinking of changing dcache_by_line_op

.macro dcache_by_line_op op, domain, start, end, tmp1, tmp2
to iterate through mem_regions. Would that be an acceptable solution? Do you have any other issues in mind?

Thanks,

Nikos

target-efi: Error when compiling on Debian 9.9

When I try to compile kvm-unit-tests configure with --target-efi I get the following error:

gcc -mstrict-align -std=gnu99 -ffreestanding -O2 -I /home/alex/kvm-unit-tests/lib -I /home/alex/kvm-unit-tests/lib/libfdt -I lib -g -MMD -MF lib/.efi.d -fno-strict-aliasing -fno-common -Wall -Wwrite-strings -Wempty-body -Wuninitialized -Wignored-qualifiers -Werror -fomit-frame-pointer -fno-stack-protector -Wno-frame-address -Wclobbered -Wunused-but-set-parameter -DTARGET_EFI -DEFI_DEBUG -I /usr/include/efi -I /usr/include/efi/aarch64 -fpic -fshort-wchar -fno-stack-check -fno-merge-all-constants -Wno-error=missing-prototypes -Wno-error=strict-prototypes -Wno-error=pragmas -Wmissing-parameter-type -Wold-style-declaration -Woverride-init -Wmissing-prototypes -Wstrict-prototypes -c -o lib/efi.o lib/efi.c
In file included from /usr/include/efi/efi.h:52:0,
from lib/efi.c:14:
/usr/include/efi/efiapi.h:734:5: warning: function declaration isn't a prototype [-Wstrict-prototypes]
);
^
lib/efi.c: In function 'efi_char16_to_char':
lib/efi.c:44:25: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT((CHAR16)t == *w);
^
In file included from /usr/include/efi/efilib.h:22:0,
from lib/efi.c:15:
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:44:25: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT((CHAR16)t == *w);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:44:3: note: in expansion of macro 'ASSERT'
ASSERT((CHAR16)t == *w);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c: In function 'efi_generate_path':
lib/efi.c:116:18: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(*PathName);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:116:18: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(*PathName);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:116:2: note: in expansion of macro 'ASSERT'
ASSERT(*PathName);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c: In function 'efi_load_image':
lib/efi.c:140:30: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:140:30: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:140:2: note: in expansion of macro 'ASSERT'
ASSERT(Status == EFI_SUCCESS);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:143:30: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:143:30: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:143:2: note: in expansion of macro 'ASSERT'
ASSERT(Status == EFI_SUCCESS);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:150:31: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:150:31: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:150:3: note: in expansion of macro 'ASSERT'
ASSERT(Status == EFI_SUCCESS);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:155:17: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(FileInfo);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:155:17: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(FileInfo);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:155:2: note: in expansion of macro 'ASSERT'
ASSERT(FileInfo);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:163:18: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(FileInfo);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:163:18: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(FileInfo);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:163:3: note: in expansion of macro 'ASSERT'
ASSERT(FileInfo);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:169:30: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:169:30: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:169:2: note: in expansion of macro 'ASSERT'
ASSERT(Status == EFI_SUCCESS);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:176:14: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(*data);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:176:14: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(*data);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:176:2: note: in expansion of macro 'ASSERT'
ASSERT(*data);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:187:30: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:187:30: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:187:2: note: in expansion of macro 'ASSERT'
ASSERT(Status == EFI_SUCCESS);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c: In function 'efi_get_fdt':
lib/efi.c:215:30: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:215:30: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:215:2: note: in expansion of macro 'ASSERT'
ASSERT(Status == EFI_SUCCESS);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c: In function 'efi_set_mem_regions':
lib/efi.c:258:31: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(DescriptorVersion == 1);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:258:31: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(DescriptorVersion == 1);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:258:2: note: in expansion of macro 'ASSERT'
ASSERT(DescriptorVersion == 1);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:304:22: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(freemem_start);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:304:22: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(freemem_start);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:304:2: note: in expansion of macro 'ASSERT'
ASSERT(freemem_start);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c: In function 'efi_main':
lib/efi.c:328:30: error: pointer targets in passing argument 1 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
lib/efi.c:328:30: error: pointer targets in passing argument 3 of 'DbgAssert' differ in signedness [-Werror=pointer-sign]
ASSERT(Status == EFI_SUCCESS);
^
/usr/include/efi/efidebug.h:26:64: note: in definition of macro 'DBGASSERT'
#define DBGASSERT(a) DbgAssert(FILE, LINE, #a)
^
lib/efi.c:328:2: note: in expansion of macro 'ASSERT'
ASSERT(Status == EFI_SUCCESS);
^~~~~~
/usr/include/efi/efidebug.h:96:1: note: expected 'const CHAR8 * {aka const unsigned char *}' but argument is of type 'const char *'
DbgAssert (
^~~~~~~~~
cc1: all warnings being treated as errors
: recipe for target 'lib/efi.o' failed
make: *** [lib/efi.o] Error 1

Same configuration as in Issue #3; the change EFI_ARCH=aarch64 applied to /Makefile.

target-efi: Tests fail with new versions of EDK2

arm64 tests fail on target-efi running on Ubuntu 20.04.1 LTS (GNU/Linux 5.4.0+ aarch64). The problem seems to be in the order in which we setup the system in

void setup(const void *fdt, phys_addr_t freemem_start)

If I understand correctly, mem_init()

mem_init(freemem_start);
assumes that we have a valid current_thread_info()

Call Stack
-------------------- 
mem_init()
phys_alloc_init()
spin_lock()
mmu_enabled()
__mmu_enabled()
current_thread_info()

but that happens only after we have called thread_info_init()

thread_info_init(current_thread_info(), 0);
.

I tried moving mem_init() below thread_info_init() but I think there is a circular dependency.

target-efi seems to work fine if I downgrade the QEMU_EFI.fd. Tests pass when I use: 0~20180205.c0d9813c-2u (https://packages.ubuntu.com/bionic-updates/qemu-efi-aarch64) and things break when I use the default 0~20191122.bd85bf54-2ubuntu3 (https://packages.ubuntu.com/focal/qemu-efi-aarch64). One thing that I found is that they return a slightly different memory map. current_thread_info maps to:

For the newer QEMU_EFI.fd (bad)

...
960 type=EfiConventionalMemory 44020000 47844000
1008 type=EfiBootServicesData 47844000 47865000 <- current_thread_info pointer (47864000)
1056 type=EfiBootServicesCode 47865000 4789A000
...

For the older QEMU_EFI.fd (good)

...
1056 type=EfiConventionalMemory 44020000 47887000
1104 type=EfiBootServicesData 47887000 478A8000 <- current_thread_info pointer (478A4000)
1152 type=EfiBootServicesCode 478A8000 478C4000
...

I didn't expect that the thread stack maps to EfiBootServicesData but to EfiConventionalMemory but I know very little about EFI.

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.