Comments (5)
I work on Ubuntu 16.04 as well so it should compile for you. There are a couple of items to watch out for. If you look in the project's setup_help directory there's a write-up on getting it all running on Ubuntu. Sounds like there may be a quick symlink you may be missing for the opencl header files that's documented in there too.
Give that a shot and let me know how it goes.
from gr-clenabled.
hey, i have the same issue (although on devuan, and on maint-3.8 branch since there is no gr3.9 on debian derivates). i did link cl2.hpp to cl.hpp, but that only got me over the cmake step.
cmake output is like this:
% cmake -Wno-dev -DCMAKE_INSTALL_PREFIX=/usr ..
-- The CXX compiler identification is GNU 10.2.1
-- The C compiler identification is GNU 10.2.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Build type not specified: defaulting to release.
-- Found LOG4CPP: /usr/lib/x86_64-linux-gnu/liblog4cpp.so
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.7.3")
-- Checking for module 'gmp'
-- Found gmp, version 6.2.1
-- Found GMP: /usr/lib/x86_64-linux-gnu/libgmpxx.so
-- Checking for module 'mpir >= 3.0'
-- Package 'mpir', required by 'virtual:world', not found
-- Could NOT find MPIR (missing: MPIRXX_LIBRARY MPIR_LIBRARY MPIR_INCLUDE_DIR)
-- Found MPLIB: /usr/lib/x86_64-linux-gnu/libgmpxx.so
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake (found suitable version "1.74.0", minimum required is "1.74.0") found components: date_time program_options filesystem system
regex thread unit_test_framework
-- Found Volk: Volk::volk
-- User set python executable /usr/bin/python3
-- Found PythonInterp: /usr/bin/python3 (found version "3.9.2")
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.9.so (found suitable exact version "3.9.2")
-- Checking for module 'thrift'
-- Found thrift, version 0.13.0
-- Python checking for Thrift - found
-- Found THRIFT: /usr/lib/x86_64-linux-gnu/libthrift.so
-- Found Git: /usr/bin/git
-- Extracting version information from git describe...
-- Looking for CL_VERSION_2_0
-- Looking for CL_VERSION_2_0 - found
-- Found OpenCL: /usr/lib/x86_64-linux-gnu/libOpenCL.so (found version "2.0")
-- Found CLFFT: /usr/lib/x86_64-linux-gnu/libclFFT.so
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found Doxygen: /usr/bin/doxygen (found version "1.9.1") found components: doxygen dot
-- Using install prefix: /usr
-- Building for version: 5db55644 / 1.0.0git
--
-- Checking for module SWIG
-- Found SWIG version 4.0.2.
-- Found SWIG: /usr/bin/swig4.0
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.9.so (found version "3.9.2")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/s/srcs/gr-clenabled/build
when running make, i get this output:
[ 1%] Building CXX object lib/CMakeFiles/clview.dir/clview.cc.o
In file included from /usr/include/CL/cl.hpp:17,
from /home/s/srcs/gr-clenabled/lib/clview.cc:14:
/usr/include/CL/opencl.hpp:404:109: note: ‘#pragma message: opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead’
404 | # pragma message("opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead")
| ^
/usr/include/CL/opencl.hpp:437:112: note: ‘#pragma message: opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)’
437 | # pragma message("opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)")
| ^
In file included from /home/s/srcs/gr-clenabled/lib/clview.cc:14:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
| ^
[ 2%] Linking CXX executable clview
[ 2%] Built target clview
Scanning dependencies of target gnuradio-clenabled
[ 3%] Building CXX object lib/CMakeFiles/gnuradio-clenabled.dir/clMathConst_impl.cc.o
In file included from /usr/include/CL/cl.hpp:17,
from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.h:25,
from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.cc:26:
/usr/include/CL/opencl.hpp:404:109: note: ‘#pragma message: opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead’
404 | # pragma message("opencl.hpp: __CL_ENABLE_EXCEPTIONS is deprecated. Define CL_HPP_ENABLE_EXCEPTIONS instead")
| ^
/usr/include/CL/opencl.hpp:437:112: note: ‘#pragma message: opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)’
437 | # pragma message("opencl.hpp: CL_HPP_TARGET_OPENCL_VERSION is not defined. It will default to 300 (OpenCL 3.0)")
| ^
/usr/include/CL/opencl.hpp:457:109: note: ‘#pragma message: CL_TARGET_OPENCL_VERSION is already defined as is lower than CL_HPP_TARGET_OPENCL_VERSION’
457 | # pragma message("CL_TARGET_OPENCL_VERSION is already defined as is lower than CL_HPP_TARGET_OPENCL_VERSION")
| ^
In file included from /usr/include/CL/cl.hpp:17,
from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.h:25,
from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.cc:26:
/usr/include/CL/opencl.hpp:1454:1: error: ‘CL_PLATFORM_NUMERIC_VERSION’ was not declared in this scope; did you mean ‘CL_PLATFORM_NUMERIC_VERSION_KHR’?
1454 | CL_HPP_PARAM_NAME_INFO_3_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/CL/opencl.hpp:1454:1: error: template argument 2 is invalid
1454 | CL_HPP_PARAM_NAME_INFO_3_0_(CL_HPP_DECLARE_PARAM_TRAITS_)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/CL/opencl.hpp:1454:1: error: ‘CL_PLATFORM_EXTENSIONS_WITH_VERSION’ was not declared in this scope; did you mean ‘CL_PLATFORM_EXTENSIONS_WITH_VERSION_KHR’?
and many more of these (which i omit for brevity)
xxx
was not declared in this scope; did you meanxxx_KHR
?
the build then fails with:
In file included from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.h:25,
from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.cc:26:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
| ^
make[2]: *** [lib/CMakeFiles/gnuradio-clenabled.dir/build.make:82: lib/CMakeFiles/gnuradio-clenabled.dir/clMathConst_impl.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:494: lib/CMakeFiles/gnuradio-clenabled.dir/all] Error 2
make: *** [Makefile:160: all] Error 2
anyway, i figured out, that if i set some symbols then i get much further:
% CXXFLAGS="-DCL_HPP_TARGET_OPENCL_VERSION=220 -DCL_HPP_ENABLE_EXCEPTIONS" cmake -Wno-dev -DCMAKE_INSTALL_PREFIX=/usr ..
then my build fails like this:
% make
Scanning dependencies of target clview
[ 1%] Building CXX object lib/CMakeFiles/clview.dir/clview.cc.o
In file included from /home/s/srcs/gr-clenabled/lib/clview.cc:14:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
| ^
[ 2%] Linking CXX executable clview
[ 2%] Built target clview
Scanning dependencies of target gnuradio-clenabled
[ 3%] Building CXX object lib/CMakeFiles/gnuradio-clenabled.dir/clMathConst_impl.cc.o
In file included from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.h:25,
from /home/s/srcs/gr-clenabled/lib/clMathConst_impl.cc:26:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
| ^
[ 4%] Building CXX object lib/CMakeFiles/gnuradio-clenabled.dir/GRCLBase.cpp.o
In file included from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
from /home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:10:
/usr/include/CL/cl.hpp:18:151: note: ‘#pragma message: cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.’
18 | #pragma message("cl2.hpp has been renamed to opencl.hpp to make it clear that it supports all versions of OpenCL. Please include opencl.hpp directly.")
| ^
/home/s/srcs/gr-clenabled/lib/GRCLBase.cpp: In member function ‘bool gr::clenabled::GRCLBase::CompileKernel(const char*, const char*, bool)’:
/home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:385:68: error: no matching function for call to ‘std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >::vector(int, st
d::pair<const char*, int>)’
385 | sources=new cl::Program::Sources(1, std::make_pair(kernelCode, 0));
| ^
In file included from /usr/include/c++/10/vector:67,
from /usr/include/CL/opencl.hpp:594,
from /usr/include/CL/cl.hpp:17,
from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
from /home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:10:
/usr/include/c++/10/bits/stl_vector.h:653:2: note: candidate: ‘template<class _InputIterator, class> std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIter
ator = _InputIterator; <template-parameter-2-2> = <template-parameter-1-2>; _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >]’
653 | vector(_InputIterator __first, _InputIterator __last,
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:653:2: note: template argument deduction/substitution failed:
/home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:385:68: note: deduced conflicting types for parameter ‘_InputIterator’ (‘int’ and ‘std::pair<const char*, int>’)
385 | sources=new cl::Program::Sources(1, std::make_pair(kernelCode, 0));
| ^
In file included from /usr/include/c++/10/vector:67,
from /usr/include/CL/opencl.hpp:594,
from /usr/include/CL/cl.hpp:17,
from /home/s/srcs/gr-clenabled/lib/../include/clenabled/GRCLBase.h:25,
from /home/s/srcs/gr-clenabled/lib/GRCLBase.cpp:10:
/usr/include/c++/10/bits/stl_vector.h:625:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std
::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
625 | vector(initializer_list<value_type> __l, [14/2771]
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:625:43: note: no known conversion for argument 1 from ‘int’ to ‘std::initializer_list<std::__cxx11::basic_string<char> >’
625 | vector(initializer_list<value_type> __l,
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_vector.h:607:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std
::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
607 | vector(vector&& __rv, const allocator_type& __m)
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:607:23: note: no known conversion for argument 1 from ‘int’ to ‘std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> > >&&’
607 | vector(vector&& __rv, const allocator_type& __m)
| ~~~~~~~~~^~~~
/usr/include/c++/10/bits/stl_vector.h:589:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::false_type) [with _Tp = std::__cxx11::basic_string<ch
ar>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >; std::false_type = std::integral_constant<bool,
false>]’
589 | vector(vector&& __rv, const allocator_type& __m, false_type)
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:589:7: note: candidate expects 3 arguments, 2 provided
/usr/include/c++/10/bits/stl_vector.h:585:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&, const allocator_type&, std::true_type) [with _Tp = std::__cxx11::basic_string<cha
r>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >; std::true_type = std::integral_constant<bool, t
rue>]’
585 | vector(vector&& __rv, const allocator_type& __m, true_type) noexcept
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:585:7: note: candidate expects 3 arguments, 2 provided
/usr/include/c++/10/bits/stl_vector.h:575:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&, const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc
= std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
575 | vector(const vector& __x, const allocator_type& __a)
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:575:28: note: no known conversion for argument 1 from ‘int’ to ‘const std::vector<std::__cxx11::basic_string<char>, std::allocator<std::__cxx11::basic_string<char> >
>&’
575 | vector(const vector& __x, const allocator_type& __a)
| ~~~~~~~~~~~~~~^~~
/usr/include/c++/10/bits/stl_vector.h:572:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>&&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::__cxx1
1::basic_string<char> >]’
572 | vector(vector&&) noexcept = default;
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:572:7: note: candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:553:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::_
_cxx11::basic_string<char> >]’
553 | vector(const vector& __x)
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:553:7: note: candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:522:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const value_type&, const allocator_type&) [with _Tp = std::__cxx11::basi
c_string<char>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::value_type = std::__cxx11::basic_string<char>;
std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
522 | vector(size_type __n, const value_type& __value,
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:522:47: note: no known conversion for argument 2 from ‘std::pair<const char*, int>’ to ‘const value_type&’ {aka ‘const std::__cxx11::basic_string<char>&’}
522 | vector(size_type __n, const value_type& __value,
| ~~~~~~~~~~~~~~~~~~^~~~~~~
/usr/include/c++/10/bits/stl_vector.h:510:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(std::vector<_Tp, _Alloc>::size_type, const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Al
loc = std::allocator<std::__cxx11::basic_string<char> >; std::vector<_Tp, _Alloc>::size_type = long unsigned int; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char>
>]’
510 | vector(size_type __n, const allocator_type& __a = allocator_type())
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:510:51: note: no known conversion for argument 2 from ‘std::pair<const char*, int>’ to ‘const allocator_type&’ {aka ‘const std::allocator<std::__cxx11::basic_string<
char> >&’}
510 | vector(size_type __n, const allocator_type& __a = allocator_type())
| ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/10/bits/stl_vector.h:497:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector(const allocator_type&) [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::__cxx11::ba
sic_string<char> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::__cxx11::basic_string<char> >]’
497 | vector(const allocator_type& __a) _GLIBCXX_NOEXCEPT
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:497:7: note: candidate expects 1 argument, 2 provided
/usr/include/c++/10/bits/stl_vector.h:487:7: note: candidate: ‘std::vector<_Tp, _Alloc>::vector() [with _Tp = std::__cxx11::basic_string<char>; _Alloc = std::allocator<std::__cxx11::basic_string<char> >]’
487 | vector() = default;
| ^~~~~~
/usr/include/c++/10/bits/stl_vector.h:487:7: note: candidate expects 0 arguments, 2 provided
make[2]: *** [lib/CMakeFiles/gnuradio-clenabled.dir/build.make:95: lib/CMakeFiles/gnuradio-clenabled.dir/GRCLBase.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:494: lib/CMakeFiles/gnuradio-clenabled.dir/all] Error 2
make: *** [Makefile:160: all] Error 2
any idea how to fix this?
from gr-clenabled.
I'd double-check the branch of clenabled you're cloning. There is a maint-3.8 branch for the repo, and master matches up with 3.9. So that can cause some mismatches. The deprecation warnings are "new" in that I really started getting them with Ubuntu 20, but it should still compile.
from gr-clenabled.
yeah, i am on maint-3.8
from gr-clenabled.
I'm trying to build the master branch on Mint 21 for gnuradio 3.10, and I'm running into this issue with needing to use the newer headers. The opencl headers package for that OS version no longer has cl.hpp, so we need to use cl2.hpp or (preferably, I think) opencl.hpp as stef has done in his pull request. What's the best way to get this resolved at this point?
There are also a couple other problems that I'll open separate issues on.
from gr-clenabled.
Related Issues (13)
- PFB Clock Recovery Block HOT 3
- GNC Window Crashes When Changing QT GUI Range HOT 6
- Discontinuities using Tap-based Filter HOT 9
- 3.10 Mint 21 build problems (boost and iomanip)
- (Request) Gr-Iridium clenabled blocks possible?
- Compiling Issues HOT 8
- FFT size > 4096 HOT 1
- Compilation error: cerr is not a member of std HOT 1
- complex taps HOT 7
- AttributeError: 'module' object has no attribute 'myclSignalSource'
- missing Frequency Xlating FIR Filter HOT 4
- GRC: Error in CL FFT block for GNURadio 3.8 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gr-clenabled.