fivosts / llvmtools Goto Github PK
View Code? Open in Web Editor NEWLLVM tools and examples
LLVM tools and examples
I'm having trouble building the llvmTools. I use llvm version 9. Error trace is below.
jev@jev:~/foivos/build$ make
Scanning dependencies of target hello
[ 10%] Building CXX object hello/CMakeFiles/hello.dir/hello.cpp.o
[ 20%] Linking CXX shared module libhello.so
[ 20%] Built target hello
Scanning dependencies of target BasicTechniques
[ 30%] Building CXX object BasicTechniques/CMakeFiles/BasicTechniques.dir/basicTechniques.cpp.o
[ 40%] Linking CXX shared module libBasicTechniques.so
[ 40%] Built target BasicTechniques
Scanning dependencies of target RuntimeRecorder
[ 50%] Building CXX object RuntimeRecorder/CMakeFiles/RuntimeRecorder.dir/RuntimeRecorder.cpp.o
[ 60%] Linking CXX shared module libRuntimeRecorder.so
[ 60%] Built target RuntimeRecorder
Scanning dependencies of target RuntimeTypeLib
[ 70%] Building CXX object RuntimeRecorder/RuntimeTypeLib/CMakeFiles/RuntimeTypeLib.dir/valueRecorder.cpp.o
In file included from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:1:0,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/ir_type.h:185:7: error: using typedef-name ‘float_t’ after ‘class’
class float_t : public ir_type{
^
In file included from /usr/include/math.h:45:0,
from /usr/include/c++/4.8/cmath:44,
from /usr/include/c++/4.8/random:38,
from /usr/include/c++/4.8/bits/stl_algo.h:65,
from /usr/include/c++/4.8/algorithm:62,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/ir_type.h:4,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:1,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:
/usr/include/x86_64-linux-gnu/bits/mathdef.h:28:15: note: ‘float_t’ has a previous declaration here
typedef float float_t; /* float' expressions are evaluated as
float'. /
^
In file included from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:1:0,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/ir_type.h:199:7: error: using typedef-name ‘double_t’ after ‘class’
class double_t : public ir_type{
^
In file included from /usr/include/math.h:45:0,
from /usr/include/c++/4.8/cmath:44,
from /usr/include/c++/4.8/random:38,
from /usr/include/c++/4.8/bits/stl_algo.h:65,
from /usr/include/c++/4.8/algorithm:62,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/ir_type.h:4,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:1,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:
/usr/include/x86_64-linux-gnu/bits/mathdef.h:29:16: note: ‘double_t’ has a previous declaration here
typedef double double_t; / `double' expressions are evaluated
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp: In function ‘void update_float(float, unsigned int, unsigned int)’:
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:278:51: error: no matching function for call to ‘std::vector<ir_type*>::push_back(float_t*)’
global_variables.push_back(new float_t(value));
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:278:51: note: candidates are:
In file included from /usr/include/c++/4.8/vector:64:0,
from /usr/include/c++/4.8/bits/random.h:34,
from /usr/include/c++/4.8/random:50,
from /usr/include/c++/4.8/bits/stl_algo.h:65,
from /usr/include/c++/4.8/algorithm:62,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/ir_type.h:4,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:1,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:
/usr/include/c++/4.8/bits/stl_vector.h:901:7: note: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = ir_type*; _Alloc = std::allocator<ir_type*>; std::vector<_Tp, _Alloc>::value_type = ir_type*]
push_back(const value_type& __x)
^
/usr/include/c++/4.8/bits/stl_vector.h:901:7: note: no known conversion for argument 1 from ‘float_t* {aka float*}’ to ‘ir_type* const&’
/usr/include/c++/4.8/bits/stl_vector.h:919:7: note: void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = ir_type*; _Alloc = std::allocator<ir_type*>; std::vector<_Tp, _Alloc>::value_type = ir_type*]
push_back(value_type&& __x)
^
/usr/include/c++/4.8/bits/stl_vector.h:919:7: note: no known conversion for argument 1 from ‘float_t* {aka float*}’ to ‘ir_type*&&’
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:280:36: error: cannot convert ‘float_t* {aka float*}’ to ‘ir_type*’ in initialization
ir_type f = new float_t(value);
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:285:56: error: no matching function for call to ‘function_call::set_ret_value(float_t)’
func_calls[index]->set_ret_value(new float_t(value));
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:285:56: note: candidate is:
In file included from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:0:
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:9:15: note: virtual void function_call::set_ret_value(ir_type*)
virtual void set_ret_value(ir_type* ret) = 0;
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:9:15: note: no known conversion for argument 1 from ‘float_t* {aka float*}’ to ‘ir_type*’
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:288:56: error: no matching function for call to ‘function_call::set_arg_value(float_t*)’
func_calls[index]->set_arg_value(new float_t(value));
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:288:56: note: candidate is:
In file included from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:0:
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:10:15: note: virtual void function_call::set_arg_value(ir_type*)
virtual void set_arg_value(ir_type* ret){ (void) ret; }
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:10:15: note: no known conversion for argument 1 from ‘float_t* {aka float*}’ to ‘ir_type*’
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp: In function ‘void update_double(double, unsigned int, unsigned int)’:
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:305:52: error: no matching function for call to ‘std::vector<ir_type*>::push_back(double_t*)’
global_variables.push_back(new double_t(value));
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:305:52: note: candidates are:
In file included from /usr/include/c++/4.8/vector:64:0,
from /usr/include/c++/4.8/bits/random.h:34,
from /usr/include/c++/4.8/random:50,
from /usr/include/c++/4.8/bits/stl_algo.h:65,
from /usr/include/c++/4.8/algorithm:62,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/ir_type.h:4,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:1,
from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:
/usr/include/c++/4.8/bits/stl_vector.h:901:7: note: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = ir_type*; _Alloc = std::allocator<ir_type*>; std::vector<_Tp, _Alloc>::value_type = ir_type*]
push_back(const value_type& __x)
^
/usr/include/c++/4.8/bits/stl_vector.h:901:7: note: no known conversion for argument 1 from ‘double_t* {aka double*}’ to ‘ir_type* const&’
/usr/include/c++/4.8/bits/stl_vector.h:919:7: note: void std::vector<_Tp, _Alloc>::push_back(std::vector<_Tp, _Alloc>::value_type&&) [with _Tp = ir_type*; _Alloc = std::allocator<ir_type*>; std::vector<_Tp, _Alloc>::value_type = ir_type*]
push_back(value_type&& __x)
^
/usr/include/c++/4.8/bits/stl_vector.h:919:7: note: no known conversion for argument 1 from ‘double_t* {aka double*}’ to ‘ir_type*&&’
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:307:37: error: cannot convert ‘double_t* {aka double*}’ to ‘ir_type*’ in initialization
ir_type d = new double_t(value);
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:312:57: error: no matching function for call to ‘function_call::set_ret_value(double_t)’
func_calls[index]->set_ret_value(new double_t(value));
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:312:57: note: candidate is:
In file included from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:0:
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:9:15: note: virtual void function_call::set_ret_value(ir_type*)
virtual void set_ret_value(ir_type* ret) = 0;
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:9:15: note: no known conversion for argument 1 from ‘double_t* {aka double*}’ to ‘ir_type*’
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:315:57: error: no matching function for call to ‘function_call::set_arg_value(double_t*)’
func_calls[index]->set_arg_value(new double_t(value));
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:315:57: note: candidate is:
In file included from /home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/valueRecorder.cpp:4:0:
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:10:15: note: virtual void function_call::set_arg_value(ir_type*)
virtual void set_arg_value(ir_type* ret){ (void) ret; }
^
/home/jev/foivos/llvmTools/RuntimeRecorder/RuntimeTypeLib/function_call.h:10:15: note: no known conversion for argument 1 from ‘double_t* {aka double*}’ to ‘ir_type*’
make[2]: *** [RuntimeRecorder/RuntimeTypeLib/CMakeFiles/RuntimeTypeLib.dir/valueRecorder.cpp.o] Error 1
make[1]: *** [RuntimeRecorder/RuntimeTypeLib/CMakeFiles/RuntimeTypeLib.dir/all] Error 2
make: *** [all] Error 2
TerminatorInst was removed in the newer version of LLVM: http://lists.llvm.org/pipermail/llvm-dev/2018-May/123407.html
Error stack:
`[lute]s1652379: make
Scanning dependencies of target Test_dummy_pass
[ 8%] Building CXX object Test_Dummy_pass/CMakeFiles/Test_dummy_pass.dir/test_pass.cpp.o
[ 16%] Linking CXX shared module libTest_dummy_pass.so
[ 16%] Built target Test_dummy_pass
Scanning dependencies of target Basic_techniques
[ 25%] Building CXX object Basic_Techniques/CMakeFiles/Basic_techniques.dir/basic_techniques.cpp.o
[ 33%] Linking CXX shared module libBasic_techniques.so
[ 33%] Built target Basic_techniques
Scanning dependencies of target Runtime_func_trace_postorder
[ 41%] Building CXX object Function_call_recorder/CMakeFiles/Runtime_func_trace_postorder.dir/func_call_rec_postorder.cpp.o
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp: In member function ‘void {anonymous}::Func_call::parse_value(llvm::Value*, llvm::Value*&, llvm::Type*&, llvm::Instruction*, unsigned int, llvm::Module&, llvm::LLVMContext&)’:
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:108:13: error: ‘TerminatorInst’ was not declared in this scope
TerminatorInst if_term, else_term;
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:108:29: error: ‘if_term’ was not declared in this scope
TerminatorInst if_term, else_term;
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:108:39: error: ‘else_term’ was not declared in this scope
TerminatorInst if_term, else_term;
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp: In member function ‘void {anonymous}::Func_call::declare_extern_funcs(llvm::Module&, llvm::LLVMContext&)’:
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:326:21: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant’ in assignment
print_trace = M.getOrInsertFunction("_Z11print_tracev", Type::getVoidTy(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:329:21: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant’ in assignment
record_call = M.getOrInsertFunction("Z11record_callPKcS0", Type::getInt32Ty(module_context), Type::getInt8PtrTy(module_context), Type::getInt8PtrTy(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:330:23: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant’ in assignment
record_invoke = M.getOrInsertFunction("Z13record_invokePKcS0", Type::getInt32Ty(module_context), Type::getInt8PtrTy(module_context), Type::getInt8PtrTy(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:331:27: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant’ in assignment
record_exit_point = M.getOrInsertFunction("Z17record_exit_pointPKcS0", Type::getInt32Ty(module_context), Type::getInt8PtrTy(module_context), Type::getInt8PtrTy(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:333:21: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant’ in assignment
update_void = M.getOrInsertFunction("_Z11update_voidjj", Type::getVoidTy(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:334:18: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant’ in assignment
update_1 = M.getOrInsertFunction("_Z8update_1bjj", Type::getVoidTy(module_context), Type::getInt1Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:335:18: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_8 = M.getOrInsertFunction("_Z8update_8hjj", Type::getVoidTy(module_context), Type::getInt8Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:336:19: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_16 = M.getOrInsertFunction("_Z9update_16tjj", Type::getVoidTy(module_context), Type::getInt16Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:337:19: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_32 = M.getOrInsertFunction("_Z9update_32jjj", Type::getVoidTy(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:338:19: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_64 = M.getOrInsertFunction("_Z9update_64mjj", Type::getVoidTy(module_context), Type::getInt64Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:339:20: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_128 = M.getOrInsertFunction("_Z10update_128ojj", Type::getVoidTy(module_context), Type::getInt128Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:340:22: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_float = M.getOrInsertFunction("_Z12update_floatfjj", Type::getVoidTy(module_context), Type::getFloatTy(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:341:23: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_double = M.getOrInsertFunction("_Z13update_doubledjj", Type::getVoidTy(module_context), Type::getDoubleTy(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:342:20: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_ptr = M.getOrInsertFunction("_Z10update_ptrmjj", Type::getVoidTy(module_context), Type::getInt64Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:343:22: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_array = M.getOrInsertFunction("_Z12update_arraymjj", Type::getVoidTy(module_context), Type::getInt64Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:344:23: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_struct = M.getOrInsertFunction("_Z13update_structPKcmjj", Type::getVoidTy(module_context), Type::getInt8PtrTy(module_context), Type::getInt64Ty(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:345:26: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_exception = M.getOrInsertFunction("_Z16update_exceptionj", Type::getVoidTy(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:346:26: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_undefined = M.getOrInsertFunction("_Z16update_undefinedPKcjj", Type::getVoidTy(module_context), Type::getInt8PtrTy(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
/afs/inf.ed.ac.uk/user/s16/s1652379/foivosLlvm/llvmTools/Function_call_recorder/func_call_rec_postorder.cpp:347:28: error: cannot convert ‘llvm::FunctionCallee’ to ‘llvm::Constant*’ in assignment
update_unallocated = M.getOrInsertFunction("_Z11update_unallocatedjj", Type::getVoidTy(module_context), Type::getInt32Ty(module_context), Type::getInt32Ty(module_context));
^
make[2]: *** [Function_call_recorder/CMakeFiles/Runtime_func_trace_postorder.dir/func_call_rec_postorder.cpp.o] Error 1
make[1]: *** [Function_call_recorder/CMakeFiles/Runtime_func_trace_postorder.dir/all] Error 2
make: *** [all] Error 2`
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.