Giter Site home page Giter Site logo

ri5cy_gnu_toolchain's Introduction

Introduction

This is a port of the RISCV GCC toolchain, which has been extended to support the extensions of the Pulpino core.

Build

Run the following command to build the toolchain (by default for riscy, see the next section to select another core):

make

This will download a specific version of the RISCV toolchain based on gcc 5.2, patch it with extensions for Pulpino and compile it.

The resulting toolchains should be in the install directory.

Supported cores

This toolchain supports the following Pulpino cores :

  • Riscy. Compile the toolchain with: make

  • Riscy_fpu (riscy with hardare floating point unit). Compile the toolchain with: make RISCY_FPU=1

  • Zeroriscy. Compile the toolchain with: make ZERORISCY=1

  • Microriscy. Compile the toolchain with: make MICRORISCY=1

Usage

The toolchain can be used as the standard RISCV toolchain except that one of the following option must be used:

  • Riscy: -march=IMXpulpv2

  • Riscy_fpu: -march=IMFDXpulpv2 -mhard-float

  • Zeroriscy. Compile the toolchain with: -march=IM

  • Microriscy. Compile the toolchain with: -march=I -m16r

This option will select the appropriate set of instructions to be used, thus no other RISCV option is needed.

ri5cy_gnu_toolchain's People

Contributors

dthome9180 avatar eflamand avatar ethjenkins avatar haugoug avatar

Stargazers

 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

ri5cy_gnu_toolchain's Issues

make error

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
Makefile:67: recipe for target 'src/original-newlib' failed
make[1]: *** [src/original-newlib] Error 2
make[1]: Leaving directory '/home/pulpino/ri5cy_gnu_toolchain/build'
Makefile:28: recipe for target 'build' failed
make: *** [build] Error 2

make error

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
Makefile:67: recipe for target 'src/original-newlib' failed
make[1]: *** [src/original-newlib] Error 2
make[1]: Leaving directory '/home/pulpino/ri5cy_gnu_toolchain/build'
Makefile:28: recipe for target 'build' failed
make: *** [build] Error 2

Assembler incorrectly detects c.andi and c.li with zero immediate as illegal operations

Assembler is incorrectly detecting C.LI and C.ANDI with zero immediate value as illegal operations even though the specification allows it. The error message is pasted below.

riscv32-unknown-elf-g++ -o src/.gen/test_info_cpu0.o -c -std=c++11 -c -fno-exceptions -fno-rtti -O3 -fno-threadsafe-statics -mcmodel=medany -fno-zero-initialized-in-bss -march=IMXpulpv2 -ggdb -DRV32 -Isrc/kernel -Isrc/include -Isrc/.gen -Isrc/kernel/rv -Isrc/emitted -Isrc/co_proc/lib -Isrc/co_proc/drivers -Isrc/.gen/Conf2Cpp -Isrc/lib -Isrc/kernel/hw src/.gen/test_info_cpu0.cpp
riscv32-unknown-elf-g++ -x assembler-with-cpp -c -mcmodel=medany -Isrc/include -Isrc/.gen -Isrc/emitted -Isrc/.gen/Conf2Cpp -Isrc/kernel/rv/ -march=IMXpulpv2 -ggdb -DRV32 -o src/.gen/test_0.o src/.gen/test_0.s
src/.gen/test_0.s: Assembler messages:
src/.gen/test_0.s:703: Error: illegal operands c.li x13,0' src/.gen/test_0.s:1176: Error: illegal operands c.andi x10,0'

Error while using make command in building ri5cy_gnu_toolchain ?

I am trying to build the ri5cy_gnu_toolchain but it is giving me this error after some time of script executing
error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute

Please help. I want to install riscv32-unknown-elf-gcc binaries.
Thanks in advance.
ri5error

How to enable compression with IMXpulpv2

Hi,

I built the ri5cy_gnu_toolchain using make and was able to run the IMXpulpv2 option . Is there any way to add the "c" option to enable compression with this option.

The standard riscv options like "rv32ic" come with the "c" to enable compression. WHen i try to add the "c" in the end of IMXpulpv2, it gives the following error:

cc1: error: -march=IMXpulpv2c: unsupported ISA substring c
make: *** [../../wlan/src/mem_mgmt/mem_mgmt.o] Error 1

Thanks

make error

an error is obtained while make the ri5cy_gnu_toolchain, i request you to please help me out to overcome the error.

cat: /var/cache/distfiles/newlib-2.2.0.tar.gz: No such file or directory
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3004 100 3004 0 0 68272 0 --:--:-- --:--:-- --:--:-- 66755

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
Makefile:67: recipe for target 'src/original-newlib' failed
make[1]: *** [src/original-newlib] Error 2
make[1]: Leaving directory '/home/pulpino/ri5cy_gnu_toolchain/build'
Makefile:28: recipe for target 'build' failed
make: *** [build] Error 2

ls: cannot access '/*.patch': No such file or directory

Does anyone know how to fix this error? I just run make in ri5cy_gnu_toolchain.
make if [ ! -e toolchain ]; then git clone https://github.com/riscv/riscv-gnu-toolchain.git toolchain; fi cd toolchain && git checkout d038d596dc1d8e47ace22ab742cd40c2f22d659e M binutils/bfd/cpu-riscv.c M binutils/bfd/elfnn-riscv.c M binutils/bfd/elfxx-riscv.c M binutils/bfd/elfxx-riscv.h M binutils/gas/config/tc-riscv.c M binutils/gas/config/tc-riscv.h M binutils/include/elf/riscv.h M binutils/include/opcode/riscv-opc.h M binutils/include/opcode/riscv.h M binutils/ld/emulparams/elf32lriscv-defs.sh M binutils/ld/emulparams/elf32lriscv.sh M binutils/ld/emulparams/elf64lriscv-defs.sh M binutils/ld/emulparams/elf64lriscv.sh M binutils/ld/emultempl/riscvelf.em M binutils/opcodes/riscv-dis.c M binutils/opcodes/riscv-opc.c M gcc/gcc/common/config/riscv/riscv-common.c M gcc/gcc/config/riscv/constraints.md M gcc/gcc/config/riscv/predicates.md M gcc/gcc/config/riscv/riscv-ftypes.def M gcc/gcc/config/riscv/riscv-modes.def M gcc/gcc/config/riscv/riscv-protos.h M gcc/gcc/config/riscv/riscv.c M gcc/gcc/config/riscv/riscv.h M gcc/gcc/config/riscv/riscv.md M gcc/gcc/config/riscv/riscv.opt M newlib/libgloss/riscv/crt0.S M newlib/libgloss/riscv/syscalls.c M newlib/newlib/libc/machine/riscv/machine/time.h HEAD is now at d038d59... Update to hopefully-final RVC 1.9 encoding if [ -d ]; then \ cd toolchain; \ FILES=$(ls /*.patch | sort); \ for tmp in $FILES; do \ test=$(patch -p1 -R -N --dry-run <$tmp 1>/dev/null 2>&1; echo $?); \ if [ "$test" != "0" ]; then patch -p1 -N <$tmp; fi \ done; \ fi ls: cannot access '/*.patch': No such file or directory mkdir -p /home/jiangxun/github/ri5cy_gnu_toolchain/build cd /home/jiangxun/github/ri5cy_gnu_toolchain/build && /home/jiangxun/github/ri5cy_gnu_toolchain/toolchain/configure --with-xlen=32 --with-arch=IM --disable-atomic --disable-float --disable-multilib --prefix=/home/jiangxun/github/ri5cy_gnu_toolchain/install checking for gcc... /home/jiangxun/github/ri5cy_gnu_toolchain/install/bin checking whether the C compiler works... no configure: error: in /home/jiangxun/github/ri5cy_gnu_toolchain/build':
configure: error: C compiler cannot create executables
See config.log' for more details Makefile:28: recipe for target 'build' failed make: *** [build] Error 77

"make" got errors

thank you very much!!

I have installed git, and i got these errors, after i upgraded my ubuntu:

make[5]: Entering directory
/home/pulp/Desktop/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd/po' make[5]: Nothing to be done forinfo'.
make[5]: Leaving directory
/home/pulp/Desktop/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd/po' make[5]: Entering directory/home/pulp/Desktop/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd'
make[5]: Nothing to be done for info-am'. make[5]: Leaving directory/home/pulp/Desktop/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd'
make[4]: *** [info-recursive] Error 1
make[4]: Leaving directory
/home/pulp/Desktop/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd' make[3]: *** [all-bfd] Error 2 make[3]: Leaving directory/home/pulp/Desktop/ri5cy_gnu_toolchain-master/build/build-binutils-newlib'
make[2]: *** [all] Error 2
make[2]: Leaving directory
/home/pulp/Desktop/ri5cy_gnu_toolchain-master/build/build-binutils-newlib' make[1]: *** [stamps/build-binutils-newlib] Error 2 make[1]: Leaving directory/home/pulp/Desktop/ri5cy_gnu_toolchain-master/build'
make: *** [build] Error 2

how to solve that? thanks a lot

make error

run the make file mutiple times always the same error.

  1. too many template-parameter-lists
    2.incomplete type ‘wi::int_traits<generic_wide_int<trailing_wide_int_storage> >’ used in nested name specifier
    Do I need to install extra files?
    here a part of my terminal:

In file included from /home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/real.h:25,
from /home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/rtl.h:26,
from /home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/genpreds.c:27:
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/wide-int.h:370:10: error: too many template-parameter-lists
370 | struct binary_traits <T1, T2, FLEXIBLE_PRECISION, FLEXIBLE_PRECISION>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/wide-int.h:377:10: error: too many template-parameter-lists
377 | struct binary_traits <T1, T2, FLEXIBLE_PRECISION, VAR_PRECISION>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/wide-int.h:384:10: error: too many template-parameter-lists
384 | struct binary_traits <T1, T2, FLEXIBLE_PRECISION, CONST_PRECISION>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/wide-int.h:394:10: error: too many template-parameter-lists

....

/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/wide-int.h:696:20: error: incomplete type ‘wi::int_traits<generic_wide_int<trailing_wide_int_storage> >’ used in nested name specifier
696 | BINARY_OPERATOR (operator , mul)
| ^~~~~~~~
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/wide-int.h:676:5: note: in definition of macro ‘BINARY_OPERATOR’
676 | OP (const T &c) const { return wi::F (this, c); }
| ^~
In file included from /home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/rtl.h:27,
from /home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/genpreds.c:27:
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/vec.h: In instantiation of ‘bool vec<T, va_heap, vl_ptr>::reserve(unsigned int, bool) [with T = std::pair<unsigned int, const char
>]’:
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/vec.h:1537:3: required from ‘T
vec<T, va_heap, vl_ptr>::safe_push(const T&) [with T = std::pair<unsigned int, const char*>]’
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/genpreds.c:1383:68: required from here
/home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/vec.h:1431:14: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of type ‘struct std::pair<unsigned int, const char*>’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
1431 | memcpy (m_vec->address (), oldvec->address (), sizeof (T) * oldsize);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/9/bits/stl_algobase.h:64,
from /usr/include/c++/9/bits/char_traits.h:39,
from /usr/include/c++/9/string:40,
from /home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/system.h:201,
from /home/ewout/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/genpreds.c:24:
/usr/include/c++/9/bits/stl_pair.h:208:12: note: ‘struct std::pair<unsigned int, const char*>’ declared here
208 | struct pair
| ^~~~
make[4]: *** [Makefile:2428: build/genpreds.o] Fout 1
make[4]: Map '/home/ewout/ri5cy_gnu_toolchain/build/build-gcc-newlib/gcc' wordt verlaten
make[3]: *** [Makefile:4112: all-gcc] Fout 2
make[3]: Map '/home/ewout/ri5cy_gnu_toolchain/build/build-gcc-newlib' wordt verlaten
make[2]: *** [Makefile:868: all] Fout 2
make[2]: Map '/home/ewout/ri5cy_gnu_toolchain/build/build-gcc-newlib' wordt verlaten
make[1]: *** [Makefile:217: stamps/build-gcc-newlib] Fout 2
make[1]: Map '/home/ewout/ri5cy_gnu_toolchain/build' wordt verlaten
make: *** [Makefile:33: build] Fout 2

Build error with 32-bit PC

Hi,

I got such error when I tried to build the toolchain on 32-bit linux:

image

When build with 64-bit linux, it is OK. Is there any special settings for 32-bit PC?

Thanks a lot.

B.R.
Zejiang

Is there any way to add a new instruction?

I followed the steps in this article to add new instructions to the official toolchain, and it succeeded.
But I added to this tool chain, after recompiling, the new instructions disappeared in riscv-opc.h and riscv-opc.c. It seems that during the recompilation process, the modified file was reset.

Instruction set simulator

Can I know if there is any instruction set simulator for this tool-chain as there is SPIKE for the official tool-chain...?
I wanted to run the C code compiled with this toolchain....?

Any help would be appreciated..
Thank you in advance.

Manoj C S

Compile error

I'm trying to build this toolchain for Pulpino, unfortunately I get the following problem on several commits. Is there any combination of Pulpino / ri5cy_gnu_toolchain that works?

Here I'm using Ubuntu 16.04.

Thanks.

mv -f .deps/compress.Tpo .deps/compress.Plo
/bin/bash ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/src/binutils/bfd -I. -I/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/src/binutils/bfd -I/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/src/binutils/bfd/../include  -DHAVE_riscv_elf32_vec -DHAVE_elf32_le_vec -DHAVE_elf32_be_vec -DHAVE_plugin_vec  -DBINDIR='"/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/install/bin"'  -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -g -O2 -MT verilog.lo -MD -MP -MF .deps/verilog.Tpo -c -o verilog.lo /media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/src/binutils/bfd/verilog.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/src/binutils/bfd -I. -I/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/src/binutils/bfd -I/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/src/binutils/bfd/../include -DHAVE_riscv_elf32_vec -DHAVE_elf32_le_vec -DHAVE_elf32_be_vec -DHAVE_plugin_vec -DBINDIR=\"/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/install/bin\" -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -g -O2 -MT verilog.lo -MD -MP -MF .deps/verilog.Tpo -c /media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/src/binutils/bfd/verilog.c -o verilog.o
mv -f .deps/verilog.Tpo .deps/verilog.Plo
make[6]: *** No rule to make target 'elfnn-riscv.c', needed by 'elf32-riscv.c'.  Stop.
make[6]: Leaving directory '/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/build-binutils-newlib/bfd'
Makefile:1649: recipe for target 'all-recursive' failed
make[5]: *** [all-recursive] Error 1
make[5]: Leaving directory '/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/build-binutils-newlib/bfd'
Makefile:1134: recipe for target 'all' failed
make[4]: *** [all] Error 2
make[4]: Leaving directory '/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/build-binutils-newlib/bfd'
Makefile:2599: recipe for target 'all-bfd' failed
make[3]: *** [all-bfd] Error 2
make[3]: Leaving directory '/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/build-binutils-newlib'
Makefile:831: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build/build-binutils-newlib'
Makefile:194: recipe for target 'stamps/build-binutils-newlib' failed
make[1]: *** [stamps/build-binutils-newlib] Error 2
make[1]: Leaving directory '/media/sf_SHARED_FOLDER/ri5cy_gnu_toolchain/build'
Makefile:9: recipe for target 'build' failed
make: *** [build] Error 2

Running make

HI all,

Where exactly this "make" command should be running.
Is it right under ri5cy_gnu_toolchain directory ?

Thanks,

How to set -march=IMXpulpv2

With the downloaded toolchain, I did the following steps .
1.cd ri5cy_gnu_toolchain-master
2. make
Once make is finished, I wanted to set the flags given,
I have added the below in my Makefile.
3. CFLAGS += -march=IMXpulpv2 -mabi=ilp32
It gives me the error:
Assembler messages:
Fatal error: -march=IMXpulpv2: ISA string must begin with rv32 or rv64

Make errors

Hello,

I'm taking these. Any idea would be appreciated!

In file included from /run/media/kllbrd/work/PULP/pulpino/riscv/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/cp/except.c:1023:0:
cfns.gperf: In function ‘const char* libc_name_p(const char*, unsigned int)’:
cfns.gperf:101:1: error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute
cfns.gperf:26:14: note: ‘const char* libc_name_p(const char*, unsigned int)’ previously declared here
cfns.gperf: At global scope:
cfns.gperf:26:14: warning: inline function ‘const char* libc_name_p(const char*, unsigned int)’ used but never defined
Makefile:1064: recipe for target 'cp/except.o' failed
make[4]: *** [cp/except.o] Error 1
make[4]: Leaving directory '/run/media/kllbrd/work/PULP/pulpino/riscv/ri5cy_gnu_toolchain/build/build-gcc-newlib/gcc'
Makefile:4112: recipe for target 'all-gcc' failed
make[3]: *** [all-gcc] Error 2
make[3]: Leaving directory '/run/media/kllbrd/work/PULP/pulpino/riscv/ri5cy_gnu_toolchain/build/build-gcc-newlib'
Makefile:867: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/run/media/kllbrd/work/PULP/pulpino/riscv/ri5cy_gnu_toolchain/build/build-gcc-newlib'
Makefile:214: recipe for target 'stamps/build-gcc-newlib' failed
make[1]: *** [stamps/build-gcc-newlib] Error 2
make[1]: Leaving directory '/run/media/kllbrd/work/PULP/pulpino/riscv/ri5cy_gnu_toolchain/build'
Makefile:28: recipe for target 'build' failed
make: *** [build] Error 2

My gcc version:

[root@localhost ri5cy_gnu_toolchain]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/6.3.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --disable-libgcj --with-isl --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 6.3.1 20161221 (Red Hat 6.3.1-1) (GCC)

how to make toolchain no extension Instruction

I want to make toolchain no extension Instruction.
First , I modify the Makefile --march=IMFD -mhard-float, but the toolchain also have extension Instrucations.
second , I change the options of toolchain -march=IMFD to make my code . but in some my link lib code also have extension instrucations.

Issues with compilation of inline assembly at higher levels of optimization

We have a C function [given below] which has an inline assembly code.

uint32_t get_cpu_id_mc()
{
    uint32_t  cpu_id, stack_sz = KERNEL_PARAMS.STACK_SIZE;

#ifdef KERNEL_MODULE
    asm("addi %[result], %[inp], -1         \n\t"
        "not  %[result], %[result]          \n\t"
        "and  %[result], %[result], sp      \n\t"
        "add  %[result], %[result], %[inp]  \n\t"
        "lw   %[result], -8(%[result])      \n\t"
            :[result] "=&r" (cpu_id), [inp] "=r" (stack_sz));
#endif

    return cpu_id;
}

At higher levels of optimization [O3] the disassembly of this function looks like this -

000035f4 <get_cpu_id_mc()>:
    asm("addi %[result], %[inp], -1         \n\t"
        "not  %[result], %[result]          \n\t"
        "and  %[result], %[result], sp      \n\t"
        "add  %[result], %[result], %[inp]  \n\t"
        "lw   %[result], -8(%[result])      \n\t"
            :[result] "=&r" (cpu_id), [inp] "=r" (stack_sz));
    35f4:	fff78513          	addi	a0,a5,-1
    35f8:	fff54513          	not	a0,a0
    35fc:	00257533          	and	a0,a0,sp
    3600:	00f50533          	add	a0,a0,a5
    3604:	ff852503          	lw	a0,-8(a0)
#endif

    return cpu_id;
}
    3608:	00008067          	ret

The values being passed to the inline assembly are not initialized correctly resulting into data corruption and unexpected code execution.

Without optimization the code disassembles like this -

__attribute__((optimize("O0"))) 
uint32_t get_cpu_id_mc()
{
    35f4:	fe010113          	addi	sp,sp,-32
    35f8:	00812e23          	sw	s0,28(sp)
    35fc:	02010413          	addi	s0,sp,32
    uint32_t  cpu_id, stack_sz = KERNEL_PARAMS.STACK_SIZE;
    3600:	000017b7          	lui	a5,0x1
    3604:	80078793          	addi	a5,a5,-2048 # 800 <pulp__PE+0x7ff>
    3608:	fef42623          	sw	a5,-20(s0)
    asm("addi %[result], %[inp], -1         \n\t"
        "not  %[result], %[result]          \n\t"
        "and  %[result], %[result], sp      \n\t"
        "add  %[result], %[result], %[inp]  \n\t"
        "lw   %[result], -8(%[result])      \n\t"
            :[result] "=&r" (cpu_id), [inp] "=r" (stack_sz));
    360c:	fff78713          	addi	a4,a5,-1
    3610:	fff74713          	not	a4,a4
    3614:	00277733          	and	a4,a4,sp
    3618:	00f70733          	add	a4,a4,a5
    361c:	ff872703          	lw	a4,-8(a4)
    3620:	fee42423          	sw	a4,-24(s0)
    3624:	fef42623          	sw	a5,-20(s0)
#endif

    return cpu_id;
    3628:	ff040713          	addi	a4,s0,-16
    362c:	ff872783          	lw	a5,-8(a4)
}
    3630:	00078513          	mv	a0,a5
    3634:	01c12403          	lw	s0,28(sp)
    3638:	02010113          	addi	sp,sp,32
    363c:	00008067          	ret

Can't execute instruction "fdiv.d" which generated by double div operation

Hi,

Recently I use eth ri5cy toolchain to support pulp instruction.

Here is my steps.

  1. git clone https://github.com/pulp-platform/ri5cy_gnu_toolchain.git
  2. Compile toolchain with: make RISCY_FPU=1
  3. Compile C code with command:
    -march=RV32IMFDCXpulpv2 -mhard-float
    detail:
    ri5cy/bin/riscv32-unknown-elf-gcc -c -D__NuttX__ -fno-builtin -Wall -Wstrict-prototypes -Wshadow -Wundef -g -Os -msave-restore -fno-strict-aliasing -fno-strength-reduce -fomit-frame-pointer -ffunction-sections -fdata-sections -march=RV32IMFDCXpulpv2 -mhard-float fileA.c -o fileA.o

In my code, there is double operation:

#define RND1_CONSTP 999563
static double_t frand1(void)
{
unsigned long randint = 30;
return ((double_t)randint) / ((double_t)RND1_CONSTP);
}

Very simple double operation.
And after compile this C code will generate "fdiv.d" operation.
But my core can't support "fdiv.d", after run this bin in ri5cy core, core will crash and report " Instruction Abort".

So, I remove the 'D', and it become:
-march=RV32IMFCXpulpv2 -mhard-float

But this can't compile pass, meet:
cc1: error: -march=RV32IMFCXpulpv2: single-precision-only is not yet supported

How to resolve this ?

Many thanks.

Call to virtual functions resulting in jump to 0x0

The compiler provided with PULPino seems to have issue with virtual functions. A call to a virtual functions causes a jump to 0x0.

Compiler details:
#->riscv32-unknown-elf-g++ -v
Using built-in specs.
COLLECT_GCC=riscv32-unknown-elf-g++
COLLECT_LTO_WRAPPER=/media/sthiruva/13cd6a3c-12da-4d2e-92e3-3554d87485dd/pulp-tools/ri5cy_gnu_toolchain/install/libexec/gcc/riscv32-unknown-elf/5.2.0/lto-wrapper
Target: riscv32-unknown-elf
Configured with: /media/sthiruva/13cd6a3c-12da-4d2e-92e3-3554d87485dd/pulp-tools/ri5cy_gnu_toolchain/build/src/newlib-gcc/configure --target=riscv32-unknown-elf --prefix=/media/sthiruva/13cd6a3c-12da-4d2e-92e3-3554d87485dd/pulp-tools/ri5cy_gnu_toolchain/install --disable-shared --disable-threads --enable-tls --enable-languages=c,c++ --with-newlib --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libgomp --disable-nls --disable-multilib --with-arch=IM
Thread model: single
gcc version 5.2.0 (GCC)

make

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
Makefile:67: recipe for target 'src/original-newlib' failed
make[1]: *** [src/original-newlib] Error 2
make[1]: Leaving directory '/home/pulpino/ri5cy_gnu_toolchain/build'
Makefile:28: recipe for target 'build' failed
make: *** [build] Error 2

Missing prototype for default_remapped_builtin() and default_omp_target_decl()

Build fail because of missing prototype for default_remapped_builtin() and default_omp_target_decl():

g++ -c   -g [...]  -o riscv.o [...] ./build/src/newlib-gcc/gcc/config/riscv/riscv.c
./build/src/newlib-gcc/gcc/config/riscv/riscv.c:4447:470: error: ‘default_remapped_builtin’ was not declared in this scope
./build/src/newlib-gcc/gcc/config/riscv/riscv.c:4447:496: error: ‘default_omp_target_decl’ was not declared in this scope
Makefile:2076: recipe for target 'riscv.o' failed

Maybe add targhooks.h to patch:

diff --git a/gcc/gcc/targhooks.h b/gcc/gcc/targhooks.h
index 12a44ee..54f27f9 100644
--- a/gcc/gcc/targhooks.h
+++ b/gcc/gcc/targhooks.h
@@ -223,6 +223,9 @@ extern bool can_use_doloop_if_innermost (const widest_int &,
                                         const widest_int &,
                                         unsigned int, bool);

+extern int default_remapped_builtin(tree exp);
+extern tree default_omp_target_decl(int t_omp_code, int *Base, int *Index);
+
 extern rtx default_load_bounds_for_arg (rtx, rtx, rtx);
 extern void default_store_bounds_for_arg (rtx, rtx, rtx, rtx);
 extern rtx default_load_returned_bounds (rtx);

Assertion failure in md_apply_fix at gas/config/tc-riscv.c line 2205

1 out of 20 builds are failing with the following issue.

riscv32-unknown-elf-g++ -x assembler-with-cpp -c -mcmodel=medany -Isrc/include -Isrc/.gen -Isrc/emitted -Isrc/.gen/Conf2Cpp -Isrc/kernel/rv/ -march=RV32IMAFDC -ggdb -DRV32 -o src/.gen/test_0.o src/.gen/test_0.s
src/.gen/test_0.s: Assembler messages:
src/.gen/test_0.s:338: Error: register value used as expression
/tmp/cc9Kguoc.s: Internal error!
Assertion failure in md_apply_fix at /media/sthiruva/13cd6a3c-12da-4d2e-92e3-3554d87485dd/pulp-tools/ri5cy_gnu_toolchain/build/src/binutils/gas/config/tc-riscv.c line 2205.
Please report this bug.

I have renamed the .s files as .s.txt to allow upload. Kindly rename it before trying to recreate this issue.

test_helper_macros.s.txt
test_0.s.txt

FPU instruction question

Hi,

When I tried the FPU, I found double float instruction "fmv.d" in my image then the core ran to illegal instruction error. I guess this is because of the 'D' flag in toolchain build option "-march=IMFDXpulpv2". But when I changed to "-march=IMFXpulpv2", I got such build error

cc1: error: -march=IMFXpulpv2: single-precision-only is not yet supported

How can I configure the toolchain to remove the double float instructions? Thanks.

B.R.
Zejiang

Fail to make toolchain

hi,everyone
I clone the ri5cy_gnu_toolchain and make it.
(version: ubuntu 12.04 32bit)
how can I fix error?
can't support 32bit?

WARNING: makeinfo' is missing on your system. You should only need it if you modified a .texi' or .texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy make' (AIX,
DU, IRIX). You might want to install the Texinfo' package or the GNU make' package. Grab either from any GNU archive site.
make[5]: *** [bfd.info] Error 1
make[5]: Leaving directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd/doc' Making info in po make[5]: Entering directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd/po'
( if test 'x/home/lab526/ri5cy_gnu_toolchain-master/build/src/binutils/bfd/po' != 'x.'; then
posrcprefix='/home/lab526/ri5cy_gnu_toolchain-master/build/src/binutils/bfd/';
else
posrcprefix="../";
fi;
rm -f SRC-POTFILES-t SRC-POTFILES
&& (sed -e '/^#/d'
-e '/^[ ]$/d'
-e "s@.
@ $posrcprefix& \\@" < /home/lab526/ri5cy_gnu_toolchain-master/build/src/binutils/bfd/po/SRC-POTFILES.in
| sed -e '$s/\$//') > SRC-POTFILES-t
&& chmod a-w SRC-POTFILES-t
&& mv SRC-POTFILES-t SRC-POTFILES )
( rm -f BLD-POTFILES-t BLD-POTFILES
&& (sed -e '/^#/d'
-e '/^[ ]$/d'
-e "s@.
@ ../& \\@" < /home/lab526/ri5cy_gnu_toolchain-master/build/src/binutils/bfd/po/BLD-POTFILES.in
| sed -e '$s/\$//') > BLD-POTFILES-t
&& chmod a-w BLD-POTFILES-t
&& mv BLD-POTFILES-t BLD-POTFILES )
cd ..
&& CONFIG_FILES=po/Makefile.in:po/Make-in
CONFIG_HEADERS= /bin/bash ./config.status
config.status: creating po/Makefile.in
config.status: executing depfiles commands
config.status: executing libtool commands
config.status: executing default-1 commands
config.status: executing bfd_stdint.h commands
config.status: executing default commands
make[5]: Leaving directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd/po' make[5]: Entering directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd/po'
make[5]: Nothing to be done for info'. make[5]: Leaving directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd/po'
make[5]: Entering directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd' make[5]: Nothing to be done for info-am'.
make[5]: Leaving directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd' make[4]: *** [info-recursive] Error 1 make[4]: Leaving directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib/bfd'
make[3]: *** [all-bfd] Error 2
make[3]: Leaving directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib' make[2]: *** [all] Error 2 make[2]: Leaving directory /home/lab526/ri5cy_gnu_toolchain-master/build/build-binutils-newlib'
make[1]: *** [stamps/build-binutils-newlib] Error 2
make[1]: Leaving directory `/home/lab526/ri5cy_gnu_toolchain-master/build'
make: *** [build] Error 2

riscv32-unknown-elf/bin/ld: can't relax section: No more archived files

This failure is generated during the link for the elf, when compress instructions are mixed with non compressed instructions in a .s file

On debugging, it was found that the failure occurs only when the end of the instruction buffer is not aligned to 4 bytes i.e. the number of compressed instructions in the .s file is odd. In order to make forward progress, we have added a c.nop at the end of .s file whenever the total number of compressed instructions generated is an odd number

Error when running the make command

I'm getting the following error when I run the make command:

In file included from /home/sourav/Desktop/HackDAC/ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/cp/except.c:1023:0:
cfns.gperf: In function ‘const char* libc_name_p(const char*, unsigned int)’:
cfns.gperf:101:1: error: ‘const char* libc_name_p(const char*, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute
cfns.gperf:26:14: note: ‘const char* libc_name_p(const char*, unsigned int)’ previously declared here
cfns.gperf: At global scope:
cfns.gperf:26:14: warning: inline function ‘const char* libc_name_p(const char*, unsigned int)’ used but never defined
make[4]: *** [cp/except.o] Error 1
make[4]: Leaving directory /home/sourav/Desktop/HackDAC/ri5cy_gnu_toolchain/build/build-gcc-newlib/gcc' make[3]: *** [all-gcc] Error 2 make[3]: Leaving directory /home/sourav/Desktop/HackDAC/ri5cy_gnu_toolchain/build/build-gcc-newlib'
make[2]: *** [all] Error 2
make[2]: Leaving directory /home/sourav/Desktop/HackDAC/ri5cy_gnu_toolchain/build/build-gcc-newlib' make[1]: *** [stamps/build-gcc-newlib] Error 2 make[1]: Leaving directory /home/sourav/Desktop/HackDAC/ri5cy_gnu_toolchain/build'
make: *** [build] Error 2

Running it on Ubuntu 14.04 with gcc 7.2.

How do I fix this?

Compile issue while compiling for ZERORISCY

I did try to compile this using the argument : make ZERORISCY=1
I am facing this error :
checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for grep that handles long lines and -e... /bin/grep checking for fgrep... /bin/grep -F checking for grep that handles long lines and -e... (cached) /bin/grep checking for bash... /bin/sh checking for __gmpz_init in -lgmp... yes checking for mpfr_init in -lmpfr... yes checking for mpc_init2 in -lmpc... no checking for curl... /bin/curl checking for wget... /bin/wget checking for ftp... no configure: error: Unknown arch

Can anyone let me know what might be the issue?

Thanks. Let me know if you need any info

error during make

make[4]: *** No rule to make target 'ri5cy_gnu_toolchain/build/src/newlib-gcc/gcc/config/riscv/riscv.md', needed by 's-mddeps'. Stop.

Support for std::thread?

I am trying to build a project that works on both amd64 and arm, but with this toolchain I get this error:

error: 'thread' in namespace 'std' does not name a type
std::thread::id _call_thread_id;

Is there a way to enable this feature?

Best regards,

Michele

make error solution

Most of the problems are caused by the lib requirment and gcc and g++ wrong version.

I use ubuntu 22.04LTS version

  1. insatall gawk:
    sudo apt-get update
    sudo apt-get install gawk
  2. install textinfo
    sudo apt-get install texinfo
  3. install computaion lib
    apt-get install libmpc-dev

The final is using the right version gcc and g++
gcc 5.2 is required by the toolchains,I use gcc-5 and g++5, you could check whether the gcc and g++ version are right
The detailed steps are:
https://blog.csdn.net/CharlieVV/article/details/111242143

Error running make on CentOS 7.5

make[6]: Leaving directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib/riscv32-unknown-elf/newlib' make[5]: Leaving directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib/riscv32-unknown-elf/newlib'
make[4]: Leaving directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib/riscv32-unknown-elf/newlib' make[4]: Entering directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib/riscv32-unknown-elf/libgloss'
make[5]: Entering directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib/riscv32-unknown-elf/libgloss/doc' make[5]: Nothing to be done for all'.
make[5]: Leaving directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib/riscv32-unknown-elf/libgloss/doc' /home/wsun/riscv make[5]: Entering directory /home/wsun/riscv'
make[5]: *** No targets specified and no makefile found. Stop.
make[5]: Leaving directory /home/wsun/riscv' make[4]: *** [stmp-bsp] Error 2 make[4]: Leaving directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib/riscv32-unknown-elf/libgloss'
make[3]: *** [all-target-libgloss] Error 2
make[3]: Leaving directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib' make[2]: *** [all] Error 2 make[2]: Leaving directory /home/wsun/work/github/ri5cy_gnu_toolchain/build/build-gcc-newlib'
make[1]: *** [stamps/build-gcc-newlib] Error 2
make[1]: Leaving directory `/home/wsun/work/github/ri5cy_gnu_toolchain/build'
make: *** [build] Error 2

Using riscv64-unknown-elf-

Hi,

I built the toolching using make but used the latest subversion of the riscv/riscv-gnu-toolchain repo.
This resulted in the riscv64-unknown-elf- being built but the option IMXpulpv2 is giving the following error:
cc1: error: -march=IMXpulpv2: ISA string must begin with rv32 or rv64
cc1: error: requested ABI requires -march to subsume the 'D' extension
cc1: error: ABI requires -march=rv64

If i use rv64IMXpulpv2 instead it still gives an error:
cc1: error: -march=rv64IMXpulpv2: invalid ISA string
cc1: error: requested ABI requires -march to subsume the 'D' extension

Is there any way to use the IMXpulpv2 with the riscv64-unknown-elf- ?

Thanks

Error: illegal operands `pv.add.sci.h a6,x0,65535'

The attached test-case is mis-compiled when gcc is targeting pulpv2 with -O3

riscv32-unknown-elf-gcc -c -Wall -fno-builtin -O3 -m32
-march=IMXpulpv2 -Wa,-march=IMXpulpv2 pv-addi-regress.c
xx.s: Assembler messages:
xx.s:18: Error: illegal operands `pv.add.sci.h a6,x0,65535'

The code is a extracted from real code that do real stuff :-p

// File: pv-addi-regress.c

// The following test-case is mis-compiled when gcc is called as follows:
//
//   riscv32-unknown-elf-gcc -c -Wall -fno-builtin -O3 -m32 \
//      -march=IMXpulpv2 -Wa,-march=IMXpulpv2  pv-addi-regress.c
//   xx.s: Assembler messages:
//   xx.s:18: Error: illegal operands `pv.add.sci.h a6,x0,65535'
// 
// According to riscv-opc.c, the constant in the pv.add.sci.h instruction
// is of type 'bs', which is signed.

void fill_ffff(short *escape,int *N)
{
    int i;  
    short A[512];
    for (i=0; i<*N; i++)
        A[i] = 0xffff;
    *escape = A[42];
}

Here is the mis-compiled part:

    pv.add.sci.h    a6,x0,65535
    pv.ball a2,.L11
.L19:
    lp.setup    x1,a3,(.L18)     # loop setup, lc+le set
.L4:
    p.sw    a6,4(a1!)   # store post inc
.L18:
    nop
    /* loop end a3 .L4 */ 

BTW, the generated code is extremely convoluted! I don't think I have ever seen anything
this poor at -O3 before, for example:

.L9:
    li  a5,0        // (a5=0)
    add a3,sp,1024  // (a3=sp+1024)
    sll a1,a5,1     // (a1=0)
    add a1,a3,a1    // (a1=sp+1024)
    li  a2,-1       // (a2=-1)
    add a3,a5,1     // (a3=1)
    sh  a2,-1024(a1) // (a2=*[sp+1024-1024])
    ble a4,a3,.L8   // (N<=1)?
    j   .L17

This sequence of instructions is copied 3 times, macro?

    add a3,sp,1024
    sll a1,a5,1
    add a1,a3,a1
    [...]
    sh  a2,-1024(a1)

Full code:

fill_ffff:
    lw  a4,0(a1)
    add sp,sp,-1024
    blez    a4,.L8
    add a2,a4,-2
    srl a2,a2,1
    add a3,a2,1
    add a1,a4,-1
    li  a6,2
    sll a5,a3,1
    bleu    a1,a6,.L9
    mv  a1,sp
    pv.add.sci.h    a6,x0,65535
    pv.ball a2,.L11
.L19:
    lp.setup    x1,a3,(.L18)     # loop setup, lc+le set
.L4:
    p.sw    a6,4(a1!)   # store post inc
.L18:
    nop
    /* loop end a3 .L4 */ 
    beq a4,a5,.L8
    add a3,sp,1024
    sll a1,a5,1
    add a1,a3,a1
    li  a2,-1
    add a3,a5,1
    sh  a2,-1024(a1)
    ble a4,a3,.L8
.L17:
    sll a3,a3,1
    add a1,sp,1024
    add a3,a1,a3
    add a5,a5,2
    sh  a2,-1024(a3)
    ble a4,a5,.L8
    sll a5,a5,1
    add a1,sp,1024
    add a5,a1,a5
    sh  a2,-1024(a5)
.L8:
    lhu a5,84(sp)
    add sp,sp,1024
    sh  a5,0(a0)
    jr  ra
.L9:
    li  a5,0
    add a3,sp,1024
    sll a1,a5,1
    add a1,a3,a1
    li  a2,-1
    add a3,a5,1
    sh  a2,-1024(a1)
    ble a4,a3,.L8
    j   .L17
.L11:
    li  a3,1
    j   .L19
    .size   fill_ffff, .-fill_ffff
    .ident  "GCC: (GNU) 5.2.0"

Error: unknown arch

Hi anybody,

I was trying to run make to install toolchain for pulpino simulations and I end up by getting below error.

       configure: error: Unknown arch

Please help in this regard.

Thanks,

Error running make (ubuntu 16.04)

libtool: compile: gcc -DHAVE_CONFIG_H -I. -I/home/wsun/ri5cy_gnu_toolchain/build/src/binutils/bfd -I. -I/home/wsun/ri5cy_gnu_toolchain/build/src/binutils/bfd -I/home/wsun/ri5cy_gnu_toolchain/build/src/binutils/bfd/../include -DHAVE_riscv_elf32_vec -DHAVE_elf32_le_vec -DHAVE_elf32_be_vec -DHAVE_plugin_vec -DBINDIR="/home/wsun/ri5cy_gnu_toolchain/install/bin" -W -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -g -O2 -MT elf32-riscv.lo -MD -MP -MF .deps/elf32-riscv.Tpo -c elf32-riscv.c -o elf32-riscv.o
/home/wsun/ri5cy_gnu_toolchain/build/src/binutils/bfd/elfxx-riscv.c:26:17: fatal error: bfd.h: No such file or directory
compilation terminated.
Makefile:1607: recipe for target 'elfxx-riscv.lo' failed
make[5]: *** [elfxx-riscv.lo] Error 1
make[5]: *** Waiting for unfinished jobs....
/home/wsun/ri5cy_gnu_toolchain/build/src/binutils/bfd/elfnn-riscv.c:28:17: fatal error: bfd.h: No such file or directory
compilation terminated.

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.