【转载】Win8 64位环境下使用MinGW-builds编译原生64位开发版GNU Emacs
查了一下帖子 我第一次编译还是2012年9月份纪念一下逝去的青春
http://all-things-zklhp.
;; **************************************************************************************************************
;; Author: zklhp
;; Email: zklhp@
;; QQ: 493165744
;; Last Update: 2014-01-06
;; Licensed under CC BY-SA 3.0
;; **************************************************************************************************************
准备
MinGW-builds
http://
MSYS
http://
用bzr或git获得最新的源码
阅读源码包里面的nt/INSTALL
准备所需的图形库文件
nt/INSTALL里面提到了一些可以下载 注意这里需要下载Win64位的 建议把这些文件单独放在一个文件夹里面
需要的是dll文件和.h文件 对我来说 png支持是比较重要的 所以我去这里下载了相应的库
http://www.
开工
运行MSYS目录里面的msys.bat 打开一个终端 以下的所有操作均是在这个终端里面进行的
生成编译环境
./autogen.sh
配置
可以用我下面这个高度优化的例子
CFLAGS='-Ofast -march=corei7-avx -I/e/mingw-builds/opt/include -ftree-parallelize-loops=4 -pipe' LDFLAGS='-I/e/mingw-builds/opt/lib' /f/diy/emacs/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --with-wide-int --prefix=/z/emacs --enable-checking
注意 -flto和configure里面的链接时优化不要开 据说GCC自己的代码开了都编译不过。。。
编译
./make -j 8
安装
./make install prefix=/e/emacs
测试
下面给出一个我用来测试Emacs效率的代码 一个分形程序
(defun iterate (xx yy)
(let*
(
(BAILOUT 16.0)
(MAX_ITERATIONS 1000)
(bail_val 0)
(cr (- yy 0.5))
(ci xx)
(zi 0.0)
(zr 0.0)
(i 0)
)
(while (and (< i MAX_ITERATIONS) (< bail_val BAILOUT))
(setq i (+ 1 i))
(setq temp (* zr zi))
(setq zr2 (* zr zr))
(setq zi2 (* zi zi))
(setq zr (+ (- zr2 zi2) cr))
(setq zi (+ temp temp ci))
(setq bail_val (+ zi2 zr2)))
i)
)
(defun mandelbrot()
(setq yy -39)
(while (< yy 39)
(setq yy (+ 1 yy))
(setq xx -39)
(while (< xx 39)
(setq xx (+ 1 xx))
(if (= (iterate (/ xx 40.0) (/ yy 40.0)) 1000)
(princ "*")
(princ " ")
)
)
(princ "\n")
))
(setq time-1-in-ms (current-time))
(mandelbrot)
(setq time-2-in-ms (current-time))
(setq time-1-in-ms
(+ (* 1000 (cadr time-1-in-ms))
(/ 1000 (nth 2 time-1-in-ms))
)
)
(setq time-2-in-ms
(+ (* 1000 (cadr time-2-in-ms))
(/ (nth 2 time-2-in-ms) 1000)
)
)
(princ (format "Elapsed %d ms" (- time-2-in-ms time-1-in-ms)))
用法
emacs -Q -l emacs-bench.elc -batch > i7.txt
典型的数据如下
平台 操作系统 Emacs版本 编译优化参数 用时 (s)
Core2 Duo T5750 XP 32-bit 24.3 32-bit -O3 4.4
Core i7-3630QM Win8 64-bit 24.3.50 32-bit -Ofast -march=corei7 2.4
Core i7-3630QM Win8 64-bit 24.3.50 64-bit -Ofast -march=corei7-avx -ftree-parallelize-loops=4 1.5
效果显著啊