分享一下MacOS下编译Emacs 28 native-comp分支

我感觉make 的时候加一下 BYTE_COMPILE_EXTRA_FLAGS='--eval "(setq comp-speed 0)"' 似乎有戏,我正在编译着, 暂时没有出现 Segmentation fault

make -j 12 BYTE_COMPILE_EXTRA_FLAGS='--eval "(setq comp-speed 0)"'

抄自

EDIT:加完之后 确实编译成功了

EDIT: 这种方式编译完, 感觉没什么效果, 没见有什么明显的提升。

直接改comp.el里面的comp-speed更方便,comp-speed = 2速度快,但是编译速度太慢了。

我当时下的是5f8b63082331de5573e0c401bf9a3a38394cbdf7。这是我当时在码云上从github拉的repo,我直接从这个repo clone到本地的:https://gitee.com/shihaoliu/emacs

谢谢啦, 我用这个commit, 还是得将comp-speed设置为0. 这样编译出来的emacs我使用之后觉得并没有太大的速度提升

@liushihao456 感谢分享。在mac上编译成功。lsp-mode下补全确实是超级快。就是不知道为什么初始启动超级慢,不知道你是不是也有这种情况?

我倒没注意这个。。你看看原来初始启动是不是也很慢?以及你是指哪个server?有的server可能一开始要加载很多东西

就是第一次启动emacs超级慢,原来2s,现在需要9s左右。不是指lsp server

我没遇到这个问题,我现在启动速度比原来还快,现在1s左右,你可以用benchmark-init这个包看看哪些模块加载费时间。

(use-package benchmark-init
  :ensure t
  :config
  ;; To disable collection of benchmark data after init is done.                                                                                      
  (add-hook 'after-init-hook 'benchmark-init/deactivate))

第一次用doom-emacs配置。第二次清空配置。启动都是9s多,很奇怪。 macOS Mojave 10.14,gcc 9.3 libgccjit, clang编译

真的有那么流畅么?我现在mac 上总会有些莫名其妙的输入卡顿之类的。。不知道有没有改善。启动速度上我到没啥。190个包我也能0.8~0.9s左右。

卡顿在启动后的前几秒很明显,但是用lsp company补全个人感觉比之前流畅

去掉了解释器直接编译成机器码了感觉就是带有runtime的语言干掉了runtime。mac上的emacs还是没啥卵用把。没从根本解决问题。。

今天看到 guix-devel 上面,也有人在折腾 gccemacs 了

https://lists.gnu.org/archive/html/guix-devel/2020-03/msg00240.html

能不能分享一下 编译emacs的脚本?我只能用comp-speed为0进行编译,否则就会报错。你呢

我坐等 nix/guix 仓库更新就好了。

回帖的正是 gccemacs 作者本人,看来他对这事还是挺上心。好奇他难道是全网监测、每天上 google 搜谁遇到编译问题吗?感觉每个相关的帖子他都有留言。

是有可能的,毕竟现在google搜相关的内容也没太多条哎

有可能,或者他也是一个 guix 的使用者,可惜他不懂中文 :rofl:

可惜guix 下载包太慢了,国内mirror还没有建成,只能又回到 debian了

在编译gcc的时候遇到了如下的错误,不过一直没看见到有人遇到,或许是我个例?分享一下解决的方式。

环境: macOS Catalina 10.15.3

源码下载的是 gcc-9.3.0

报错如下:

In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/sys/wait.h:110,
                 from /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/stdlib.h:66,
                 from ../.././libdecnumber/decNumber.c:175:
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/sys/resource.h: In function 'getiopolicy_np':
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/sys/resource.h:443:34: error: expected declaration specifiers before '__OSX_AVAILABLE_STARTING'
  443 | int     getiopolicy_np(int, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
      |                                  ^~~~~~~~~~~~~~~~~~~~~~~~
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/sys/resource.h:449:39: error: expected '=', ',', ';', 'asm' or '__attribute__' before '__OSX_AVAILABLE_STARTING'
  449 | int     setiopolicy_np(int, int, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);
      |                                       ^~~~~~~~~~~~~~~~~~~~~~~~

解决的方法是这篇博文中的,修改/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/Availability.h文件,在300行左右的位置添加如下内容,

#ifndef __OSX_AVAILABLE_STARTING
    #define __OSX_AVAILABLE_STARTING(_osx, _ios)
    #define __OSX_AVAILABLE_BUT_DEPRECATED(_osxIntro, _osxDep, _iosIntro, _iosDep)
    #define __OSX_AVAILABLE_BUT_DEPRECATED_MSG(_osxIntro, _osxDep, _iosIntro, _iosDep, _msg)
#endif
1 个赞

估计是OS X10.15的原因. 我们几个都是10.14的系统. emacs编译的部分通过了嘛