Poritng opencc to macOS & linux Guidance

命令行基础教程

可以先去runoob.com 上面来看一看哈



命令的基本格式是(中间是空格分割,参数数量可能有限制,请参考man)

      [路径(可有可无)] 命令名称   参数1  参数2  参数3  ………


具体而言,这里的命令名称应该叫做可执行文件名称,这之中有些复杂的部分会在下文提及。


譬如 

      ls..  这个命令之中 ls就是命令名称,参数1就是.. 同时我们注意到ls前面并没有路径标示,所以Shell会自动按照一定规则来搜索ls这个命令


敲黑板: 不熟悉的命令 可以在Shell中运行下面的语句来查看用法参考

man ####                        ####就是需要查找的命令


Shell 一般支持使用【Tab】按键来补全文件名或者可以用来补全某些命令的参数(--interactive)、命令的名称(比如gcc,g++)

两个特殊目录

      .本级目录

      ..上一级目录



一些重要的命令(为了美观而大写,事实上全部小写)

      PWD  查看我在哪个目录里

      CD   进入某个目录

      WHICH  查看某个命令对应哪个可执行文件(在哪个目录)

            WHICH LS      就可以看到类似/usr/bin/ls的定位结果

      LS    列出某个目录内的子目录和文件列表(请注意,LL = LS -L)

            LS【参数】【文件夹路径】

            参数–L : 用列表呈现

            参数–A : 展示隐藏内容(文件名以小数点开头的文件是默认隐藏的)

      MKDIR  创建目录

            MKDIR[目录名]

      MV  移动文件/更名 (也可以移动文件夹哦)

            MV  [可有可无的参数] 【源位置】【目标位置】

      CP  拷贝文件

            CP【可有可无的参数】 【源文件】 【目标文件】

            如果需要拷贝目录, 则需要使用–R 参数,为了不出现繁琐的重复的拷贝确认提示,可以使用-F参数

      CAT   查看某个文件 / 在Shell中展示

      MORE  翻页来查看某个文件(CAT的翻页模式?)

      EMACS/ VIM 编辑某个文件

      FIND   列出所有文件和子目录中的文件(LS 的递归版)

            FIND 【目录名称】

      可以配合GREP 使用

            FIND 某个目录| GREP “文件名包含的关键字”

      GREP  在文件/Shell的结果进行文本查找

            GREP 【参数】 【想查找的正则表达式/文本】

            GREP –RN “某些内容” *      在当前目录(包含子目录)内查找所有文件中的某些内容

      GIT

DU 查看文件大小

      LN创建LINK  文件链接

            LN【参数】  【源文件】【目标文件】

            参数–S 创建符号链接(依靠路径来找源文件, 否则默认是通过文件实际的扇区号码来找源文件)

      DF查看磁盘信息

      CHMOD更改文件、文件夹的属性

      CHOWN更改所有权



建立git仓库

(using github / gogs SERVER),

git 使用方法:

克隆(下载项目主目录)

git clone https://xxx.com/xxxxxxxx

查看项目历史

git log

查看当前文件状态

git status

提交某个文件,COMMIT

git add #####  ####是要添加的

git commit -m "Commit Message"

推送到远程

git push

从远程更新

git pull 


Makefile

Makefile 是控制GCC等编译器进行批量编译、依赖解决的工具。

系统包括多个重要功能 :

a. 其中有编译目标Target(库、可执行文件等),

b. 控制编译参数 Compile Option,

c. 管理编译目标包含哪些文件Source File(文件C/CPP文件路径),

d. 程序包含目录(Include Dir),

e. 编译定义(Definition, 等效于 C/C++文件中的#define,只不过是在文件外部,编译器层面进行定义)

Makefile 语法

Makefile的执行逻辑 是 根据Makefile的内容来

核心语法有两种

      .XXXX 小数点开头 | 特殊用法,请参考Make官方文档

      MMMM  直接运行某个命令

      AAA= BBB  变量赋值操作

      Install:  … 定义某个Target目标

      ifeq/ else  …  调用Makefile函数(比如IFeq判断相等,ENDIF 结束判断函数等)

MakeFile 调试

    $(warning),$(info), $(error)

      为了查看MakeFile之中的变量的值、或者MakeFile

      $(warning ####)   -->   #### 就是要显示的内容

      例如,在Makefile中添加  $(warning This is a makefile message)一行

      就可以在运行 make 生成时 输出 类似

~/xc5/build/Makefile:203

: This is a makefile message

的内容,

   $(###)

这个符号就是用来引用###这个变量的值

比如 Makefile中想要重复使用某个值,就会用变量来代替

CLUPS = osprey-my -klvm

PS = $(CLUPS)-qqk

执行上面两行之后,PS 的值就会变成osprey -my –klvm –qqk

可以在$(warning) 中使用$(###) 来输出某个###变量的内容

$(warning$(#####))  来输出#####的内容

     $(files)

这个TOKEN有特殊含义、用途请参考Google

3. CMake 的变量,分层

4.Open64 文件夹结构

      核心目录

      OPEN64

            \configure (BUILD目录生成器,Makefile初始化器)

            \OSPREY   --核心的项目代码源文件目录(SOURCE)

                  \####    --某个单独的模块

                         \Makefile.gbase 模块的核心Makefile,配合全局Makefile使用

                         \*****.c      模块内部的c源文件

                         \*****.cxx  模块内部的c++源文件

                  \WGEN         --WGEN模块

                  \IR_TOOLS  -- IR-TOOLS模块

      BUILD目录 (需要手动mkdir 新建的,用来分离编译结果,

用CONFIGURE 来初始化的)

            \OSPREY   核心代码生成目录

                  \Makefile.gsetup    -- 全局变量Makefile 的初始化

                  \TARGDIR        核心模块生成目录(20个左右 生成目录)

                  \TARGDIR_LIB  基础库生成目录

5. Makefile之间的关系

入口:

在BUILD/Osprey/targdir/某个模块/Makefile 是某个模块的核心Makefile,

这个Makefile 操作两件事情

[if !supportLists]A.         [endif]去加载全局变量 (../../Makefile.gsetup)

[if !supportLists]a)        [endif]gsetup 会去加载 host对应的

OPEN64/osprey/linux/make 下面的

[if !supportLists]                                     i.             [endif]gcommondef, (全局Definition)

[if !supportLists]                                   ii.             [endif]gcommonrules(全局生成RULE)

      B.去实际调用模块的生成Makefile(OPEN64/Osprey/某个模块/Makefile.gbase),来实际运行编译(GCC/LD),生成最终的目标:可执行文件




CMAKE 编译

1.首先CD进入要生成文件的目录,

2. 运行 cmake 【有CMakeLists.txt的文件夹路径】

      譬如,在 opencc-cmake /cmake-build-debug目录中运行

cmake .. (生成全部)

cmake ../irtools/ (只生成IR_TOOLS)

cmake ../libcomutils/ (只生成LIBCOMUTILS)


3. make 【可选(Target 名称)】



7.  编译并测试Wgen(whirl generator)

刚刚说到的结果测试在Ubuntu上使用readelf

可以用 opencc_cmake 我们生成的ir_size 来查看

在opencc_cmake/cmake-build-debug中操作:

./ir_size../wgen/t1.B


注意区分之前说过的几个事情

1. 在Ubuntu上编译,测试wgen (gdb调试)

2. 在macOS用我们的opencc_cmake 项目来生成irtools,wgen

这个可以用 lldb调试

3. 用wgen实际转换一个spin文件到whirl .B 的文件,


.B 的文件可以用

1.

opencc_cmake/cmake-build-debug/irtools 里面的 ir_size 来查看 .B 的分段情况

1. Ubuntu上系统自带的readelf来识别,查看

可以使用 readelf -a XXXX.B 来打开 XXXX.B 文件,并显示基本信息

readelf -p PART_NAME

XXX.B  可以查看XXX.B 内的 PART_NAME 这部分的string信息(请参考 readelf --help)





8. TODO

a. 关注系统API, LIBC / LIBC++(API和标准的差异/STDC++/C++的差异)

      库之中包含的内容

b. MACOS / DARWIN /XNU

c. 区分Chipset ,

d. 区分HOST,TARGET

e. 熟悉单个模块的功能,实现内容



VCG.cxx

添加宏定义:BUILD_OS_MACOS不使用malloc.h


STRTAB.cxx

替换了HASH_TABLE -> STRTAB

修改了insert函数,返回 idx(基于buffer的偏移),中间使用unordered_map来替代hash_table


SYMTAB.cxx

修改: 使用unordered_map替代hash_map,

添加:#include

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容