{"id":21197555,"url":"https://github.com/gnsyxiang/third-lib","last_synced_at":"2026-01-31T01:10:59.738Z","repository":{"id":155837073,"uuid":"180101480","full_name":"gnsyxiang/third-lib","owner":"gnsyxiang","description":"Cross-compiling third-party libraries(交叉编译第三方库)","archived":false,"fork":false,"pushed_at":"2024-05-23T03:21:30.000Z","size":623,"stargazers_count":0,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-23T04:44:36.075Z","etag":null,"topics":["3rd-party","baselib","cross-compile","cross-compiling-3rd-party","third-party"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gnsyxiang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-08T08:13:27.000Z","updated_at":"2024-05-30T04:16:08.443Z","dependencies_parsed_at":null,"dependency_job_id":"7dd0d9a6-e8d7-4a80-8d5c-58de4fd62a8d","html_url":"https://github.com/gnsyxiang/third-lib","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnsyxiang%2Fthird-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnsyxiang%2Fthird-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnsyxiang%2Fthird-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gnsyxiang%2Fthird-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gnsyxiang","download_url":"https://codeload.github.com/gnsyxiang/third-lib/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243652702,"owners_count":20325610,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3rd-party","baselib","cross-compile","cross-compiling-3rd-party","third-party"],"created_at":"2024-11-20T19:45:24.942Z","updated_at":"2026-01-31T01:10:54.713Z","avatar_url":"https://github.com/gnsyxiang.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cross-compiling third-party libraries(交叉编译第三方库)\n\n\u003c!-- vim-markdown-toc GFM --\u003e\n\n- [项目说明](#项目说明)\n  - [项目特点](#项目特点)\n  - [项目组成](#项目组成)\n- [使用说明](#使用说明)\n  - [编译](#编译)\n  - [增加新的项目](#增加新的项目)\n  - [编译指定版本](#编译指定版本)\n  - [手动下载大软件包](#手动下载大软件包)\n  - [编译`mcu`版本](#编译mcu版本)\n- [相关说明文档](#相关说明文档)\n- [thanks](#thanks)\n\n\u003c!-- vim-markdown-toc --\u003e\n\n## 项目说明\n\n* 该项目旨在更加方便的编译(交叉编译)第三方库\n* 学习`autotools`，`cmake`，`Makefile`的使用方法\n* 把第三方库的编译集中到一起，避免重复劳动提供效率\n\n### 项目特点\n\n* 使用`Makefile`组织，用`make`进行编译\n* 抽离出跟平台相关的配置信息，如`gcc`\n* `一键编译`(只需要指定软件版本，框架会去官方下载版本并编译，然后安装到指定的目录)\n\n\u003e 交叉编译时，部分`gcc`可能会有问题，可以尝试修改并提交pr，也可以直接提`Issues`\n\n### 项目组成\n\n```shell\n.\n├── build                               // 编译输出目录\n│   ├── fullhan\n│   │   ├── htop-2.2.0\n│   │   ├── ncurses-6.1\n│   │   └── zlib-1.2.12\n│   ├── fullhan\n│   │   ├── htop-2.2.0\n│   │   ├── ncurses-6.1\n│   │   └── zlib-1.2.12\n│   └── pc\n│       ├── htop-2.2.0\n│       ├── ncurses-6.1\n│       └── zlib-1.2.12\n├── configs                             // 配置文件\n│   ├── cmd.mk\n│   ├── common_var.mk\n│   ├── makefile\n│   │   ├── check_lib.mk\n│   │   ├── common_sub_target.mk\n│   │   ├── common_target.mk\n│   │   └── define_func.mk\n│   └── vender                          // 厂商信息\n│       ├── actions                     // 炬芯\n│       │   └── ats3607d\n│       │       └── config.mk\n│       ├── allwinnertech               // 全志\n│       │   └── r328\n│       │       └── config.mk\n│       ├── arterytek                   // 雅特力\n│       │   └── at32f4xx\n│       │       └── config.mk\n│       ├── eeasytech                   // 亿智\n│       │   └── SV823\n│       │       └── config.mk\n│       ├── fullhan                     // 富翰微\n│       │   ├── MC3312\n│       │   │   └── config.mk\n│       │   └── MC6810E\n│       │       └── config.mk\n│       ├── hisilicon                   // 海思\n│       │   └── 3536DV100\n│       │       └── config.mk           // 交叉编译gcc配置信息\n│       ├── ingenic                     // 君正\n│       │   └── x1830\n│       │       └── config.mk\n│       ├── pc                          // pc\n│       │   └── pc-chip\n│       │       └── config.mk\n│       ├── platform_config.mk          // 平台配置文件\n│       ├── platform_config_tmp.mk      // 平台配置文件，覆盖上面文件的相关变量\n│       ├── rock-chips                  // 瑞芯微\n│       │   └── rk3308\n│       │       └── config.mk\n│       └── unisound                    // 云之声\n│           └── unione\n│               └── config.mk\n├── img\n├── LICENSE\n├── Makefile                            // 顶层Makefile\n├── project                             // 第三方库\n│   ├── compress\n│   │   ├── README.md\n│   │   ├── xz\n│   │   │   ├── Makefile\n│   │   │   └── README.md\n│   │   └── zlib\n│   │       ├── Makefile                // 第三方编译Makefile\n│   │       └── README.md\n│   ├── detect_tools\n│   │   └── htop\n│   │       ├── Makefile\n│   │       └── README.md\n├── README.md\n├── src                                 // 源码目录\n├── SUMMARY.md\n└── tools\n    ├── tree2dotx\n    └── tree2svg\n```\n\n## 使用说明\n\n### 编译\n\n* 配置对应的厂商\n\n```shell\nvim configs/vender/platform_config.mk\n\n# 可选的厂商有: \n# actions\n#   ats3607d\n# allwinnertech\n#   r328\n# arterytek\n#   at32f4xx\n# eeasytech\n#   SV823\n# fullhan\n#   MC6810E\n#   MC3312\n# hisilicon\n#   3536DV100\n# ingenic\n#   x1830\n# pc\n#   pc-chip\n# rock-chips\n#   rk3308\n# unisound\n#   unione\nvender := pc\nchip := pc-chip\n```\n\n\u003e 如果没有对应的厂商，可以增加相应的厂商配置文件\n\n* 默认为编译pc版本\n\n```makefile\nvim configs/vender/pc.mk\n\ngcc_version         := x86_64-linux-gnu\n\ntoolchains_path     :=\ngcc_prefix          :=\nhost                := x86_64-linux-gnu\n\ncppflags_com        :=\ncflags_com          :=\ncxxflags_com        :=\nldflags_com         :=\nlibs_com            := \n\nprefix_path         ?= /mnt/data/nfs/$(vender)/$(chip)         // 安装目录\n```\n\n\u003e note:\n\u003e\n\u003e 1, host应该和build一样 (我这里使用的是`x86_64-linux-gnu`，系统版本是`20.04.1-Ubuntu-x86_64`)\n\u003e\n\u003e 2, 需要更改安装路径 (上面是我默认的安装目录)\n\n* 修改gcc配置\n\n```makefile\nvim configs/vender/fullhan/MC6810E/config.mk\n\ncross_gcc           := /mnt/data/toolchain/molchip/MC6810E/molchipv500-armgcc-uclibc/bin/arm-mol-linux-uclibcgnueabihf-\nprogram_prefix      := arm-mol-linux-uclibcgnueabihf-\nhost                := arm-mol-linux-uclibcgnueabihf\n\ncppflags_com        :=\ncflags_com          :=\ncxxflags_com        :=\nldflags_com         :=\nlibs_com            := \n\nprefix_path         ?= /mnt/data/nfs/$(vender)/$(chip)                      // 安装路径\n```\n\n\u003e note: \n\u003e\n\u003e 1, gcc的安装目录最好按照上述格式，避免修改过程中或增加新的gcc编译不通过\n\u003e\n\u003e 2, 变量`vender`和`chip在`platform_config.mk`中定义\n\n* 在`platform_config_tmp.mk`中配置的信息会覆盖`platform_config.mk`相关变量\n\n```txt\nprefix_path := 指定最终的安装路径\n```\n\n\u003e note: prefix_path只会修改最终的安装路径，方便交叉编译的部署，体系中的相关依赖不会改变\n\n\n* 在根目录下执行`make`，获取相关信息\n\n```shell\n$ make              // 获取相关命令\n$ make test         // 测试gcc的路径和版本信息\n$ make list         // 获取所有可编译的第三方库\n$ make clean        // 清除build目录下的所有编译文件\n$ make distclean    // 清除build和src目录的所有文件\n```\n\n* 在根目录下编译`zlib`\n\n```shell\n$ make project=zlib             // 编译zlib\n$ make project=zlib V=1         // 编译zlib，并输出详细的编译信息\n$ make project=zlib_clean       // 清除build下zlib相关文件\n$ make project=zlib_distclan    // 清除src和build下zlib相关文件\n```\n\n* 在项目目录下编译\n\n```shell\n$ cd project/compress/zlib\n$ make             // 编译zlib\n$ make V=1         // 编译zlib，并输出详细的编译信息\n$ make clean       // 清除build下zlib相关文件\n$ make distclan    // 清除src和build下zlib相关文件\n```\n\n\u003e note: \n\u003e\n\u003e 1, 在项目目录下编译，可以少写关于项目的指定\n\u003e\n\u003e 2, 编译各个环节中出现奇怪的问题，都可以使用`make distclean`清除所有信息，然后重新开始\n\n### 增加新的项目\n\n* 在project目录下创建对应的目录\n\n* 在创建的目录下建立`Makefile`文件 \n\n```makefile\nifndef top_dir\ntop_dir := $(shell pwd)/../..       // 项目相对于根目录的路径\nendif\n\nproject                 := demo     // 填写项目名称\nproject_version         := x.x.x    // 填写项目版本\nproject_download_url    := url      // 填写项目url\n\ninclude $(top_dir)/configs/common_var.mk\n\nall: depend_lib $(target_dir)-make\n\ninclude $(sub_target_path)/common_sub_target.mk\n\ndepend_lib: xxx_check               // 填写项目依赖的第三方库的检查\n\n$(target_dir)-config: $(target_dir)-gz-src      // 后面依赖要看压缩包类型，如gz/xz/bz2\nifneq ($(config_ok_mark_path), $(wildcard $(config_ok_mark_path)))\n    $(MKDIR) $(build_path)/$(@:-config=)\n\n    // 项目的配置信息\n\n    $(TOUCH) $(config_ok_mark_path)\nendif\n\n.PHONY: all clean distclean list\n```\n\u003e note:\n\u003e\n\u003e 1, 参考实例见`project/template`，根据项目的编译系统，选择对应的目录作为参考\n\u003e\n\u003e 2, 需要注意`top_dir`目录的定义，根据创建目录深度的不同而不同\n\n\n### 编译指定版本\n\n* 打开`project/compress/zlib/Makefile，修改`project_version`字段\n\n```makefile\nproject                 := zlib\nproject_version         := 1.2.9    // 修改成需要的版本(指定的版本必须是存在的，不能自己定义一个版本，否则下载将失败)\nproject_download_url    := https://www.zlib.net/zlib-$(project_version).tar.gz\n```\n\n![compile_specified_version](img/compile_specified_version.png)\n\n* 按照上面的编译步骤编译\n\n\u003e note: 不同的版本编译可能会失败，因为源码的修改或者依赖库的修改，都需要修改配置选项\n\n\n### 手动下载大软件包\n\n* 通过下载工具下载大源码包，比如迅雷下载\n\n* 把下载好的源码包放到`src`目录下\n\n* 执行上面的编译步骤\n\n\u003e 事先下载源码包的情况:\n\u003e\n\u003e 1, 源码包较大的情况下，如qt\n\u003e\n\u003e 2, 一些源码包下载速度很忙，出现多次掉线的情况下\n\u003e\n\u003e 3，编译机器所在的网络不好，可以从其他地方下载\n\u003e\n\u003e 4, 所在机器没有网络\n\n### 编译`mcu`版本\n\n* 需要指定参数`-specs=nano.specs -specs=nosys.specs`，否则`autotools`检测不过\n\n* 需要指定芯片的相关参数，与应用程序相同，否则链接不成功。如`-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections`\n\n## 相关说明文档\n\n[现有支持编译的项目](SUMMARY.md)\n\n## thanks\n\n欢迎大家提交`PR`或`Issues`\n\n能给一个`Start`就是对我最大的鼓励^_^...\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnsyxiang%2Fthird-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgnsyxiang%2Fthird-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgnsyxiang%2Fthird-lib/lists"}