macOS Mojave (10.14.3) Android Studio 3.3.1 指定使用CMake 3.10.2版本

目前最新版本的 Android Studio 3.3.1默认使用CMake 3.6版本,但是已经支持 CMake 3.10.2 版本了。

新版本的 CMake 3.10.2 新增了 FindVulkan.cmake 等一系列的改进,对于很多项目来说,会更友好。

目前默认依旧使用 CMake 3.6 版本,但是可以手工指定使用 CMake 3.10.2

继续阅读macOS Mojave (10.14.3) Android Studio 3.3.1 指定使用CMake 3.10.2版本

错误 程序包org.apache.http.conn.util不存在

开发的时候遇到了这个问题,记录下下次就知道了。这个是因为在 sdk22 以后的版本不在支持了!!!

程序包 org.apache.http.conn.util 不存在,然后搜索了下,在 appbuild.gradle 文件中加上useLibrary 'org.apache.http.legacy' 就可以了。

如下:

参考链接


错误 程序包org.apache.http.conn.util不存在

Parsing C++ in Python with Clang

macOS Mojave 10.14.2 llvm 7.0.1

参考链接


Python - os.walk忽略隐藏文件

Python中进行文件夹遍历的时候,使用os.walk是非常方便的,但是os.walk会把隐藏文件一起遍历,我们有时候需要忽略隐藏文件,可以用如下方法忽略隐藏文件以及文件夹

参考链接


python – os.walk没有隐藏的文件夹

macOS Mojave(10.14.2)配置OpenVPN软件Tunnelblick 3.7.8(客户端)

我们需要在macOS Mojave (10.14.2)配置连接在OpenVPN服务器实现加密上网或者翻墙。这里我们使用在Tunnelblick 3.7.8实现我们需要的功能。
继续阅读macOS Mojave(10.14.2)配置OpenVPN软件Tunnelblick 3.7.8(客户端)

使用ccache加速编译Android NDK项目

如果使用cmake构建项目,配置如下:

也就是定义NDK_CCACHE=ccache

如果使用ndk-build构建项目,配置如下:

也就是增加两个环境变量。

不指定缓存目录的情况下,缓存文件的目录一般在当前用户名下的.ccache目录下,时间长了,可能会产生很多的缓存文件,需要定时清理,当然也可以限制缓存的最大大小,让ccache根据需要进行淘汰。

参考链接


macOS Mojave(10.14.2)系统上编译LunarG/VulkanTools工程的Android版本

参考链接


OpenCL代码编译成Vulkan代码的工具clspv

最近接到个任务,就是把OpenCL.cl代码编译成Vulkan程序。

使用Google开源的工具clspv实现这个功能即可。

编译完成后,在 bin 目录下生成 clspv 这个可执行程序。

使用的时候参考项目的文档 OpenCL C 1.2 Language on Vulkan

只是需要注意的是,如果使用了 image 类型,比如image2d_t 则需要提供 -samplermap 这个参数,这个参数指向一个文件,文件内容可能如下:

具体的定义跟在 OpenCL 中调用 read_image/write_image 函数时候指定的 sampler 参数一致即可。

参考链接


OpenCL C 1.2 Language on Vulkan

macOS Mojave(10.14.2) 编译KhronosGroup/SPIR项目的spir_12分支(llvm-3.2编译)

官方提供了一个名为 KhronosGroup/SPIR 的开源项目,支持OpenCL编译成SPIR代码的功能

注意: Vulkan使用SPIR-V也就是 spirv-1.0 分支,不使用此分支。本文实际上可以作为 llvm-3.2 在最新的 macOS Mojave(10.14.2) 上的编译指南。

这个工具使用的LLVM的版本非常古老,编译的时候问题多多。

这个工具在 macOS Mojave(10.14.2) 系统上使用 gcc 8.2.0 的编译流程如下:

如果使用 Xcode Version 10.1 (10B61) 编译会报告如下错误:

上述错误产生的原因在于 macOS 官方提供的 C++ 标准库中增加了校验 is_constructible (要求模版中的类必须明确构造函数和析构函数)这个逻辑,这个功能貌似在 C++ 14 中才加入的,显然这个校验有些操之过急了。

如果编译的时候出现如下错误信息:

则说明编译的时候,没有指定使用 macOS 官方提供的 ar , ranlib ,链接这两个程序到Xcode提供的即可。

如果编译的时候出现如下错误信息:

这是由于llvm/tools/clang/include/clang/Sema/AttributeList.h这个文件中的 ~AttributeList() LLVM_DELETED_FUNCTION; 这句话造成的,按理说这个析构函数不应该被调用到才对,但是代码中仍然有地方隐式调用了,我们需要做的就是去掉这行代码的 LLVM_DELETED_FUNCTION 属性即可。

 

编译完成后的使用方式如下:

  • <triple>: for 32 bit SPIR use spir-unknown-unknown, for 64 bit SPIR use spir64-unknown-unknown.
  • Note<OpenCL compile options> appears twice. The command line option -cl-spir-compile-options "<OpenCL compile options>" specifies the compile options that occur in the SPIR metadata.
  • <opencl_spir.h>: download opencl_spir.h from https://github.com/KhronosGroup/SPIR-Tools/blob/master/headers/opencl_spir.h
  • -O: -O0 (default) is the only tested option value at the moment. It's assumed by design that all optimizations are executed by SPIR consumer.

参考链接