mirror of
https://github.com/estkme-group/lpac
synced 2024-07-04 15:56:42 +02:00
Add support for compiling under Cygwin (#27)
* Add support for compiling under Cygwin * Add Cygwin build CI * Update README
This commit is contained in:
parent
d0b5d1c3aa
commit
0767033c71
28
.github/workflows/build.yaml
vendored
28
.github/workflows/build.yaml
vendored
|
@ -12,7 +12,7 @@ jobs:
|
|||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
os: [windows-latest, ubuntu-latest, macos-latest]
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
|
@ -25,6 +25,12 @@ jobs:
|
|||
sudo apt-get update
|
||||
sudo apt-get install -y libpcsclite-dev libcurl4-openssl-dev gcc make cmake gcc-mingw-w64 g++-mingw-w64 unzip
|
||||
|
||||
- name: Setup Cygwin
|
||||
if: runner.os == 'Windows'
|
||||
uses: egor-tensin/setup-cygwin@v4
|
||||
with:
|
||||
packages: cmake gcc-g++ make zip wget
|
||||
|
||||
- name: Build for Linux
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
|
@ -33,12 +39,20 @@ jobs:
|
|||
tar -czvf lpac-linux-x86_64.tar.gz -C output .
|
||||
shell: bash
|
||||
|
||||
- name: Build for Windows
|
||||
- name: Build for Windows(MinGW)
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
mkdir build-mingw && cd build-mingw && cmake -DLINUX_MINGW32=ON .. && make -j$(nproc)
|
||||
wget https://curl.se/windows/dl-8.4.0_6/curl-8.4.0_6-win64-mingw.zip -O curl.zip && unzip curl.zip && mv curl-8.4.0_6-win64-mingw/bin/libcurl-x64.dll output/libcurl.dll
|
||||
zip -r -j lpac-windows-x86_64.zip output/*
|
||||
wget https://curl.se/windows/dl-8.5.0_3/curl-8.4.0_6-win64-mingw.zip -O curl.zip && unzip curl.zip && mv curl-8.5.0_3-win64-mingw/bin/libcurl-x64.dll output/libcurl.dll
|
||||
zip -r -j lpac-windows-x86_64-mingw.zip output/*
|
||||
|
||||
- name: Build for Windows(Cygwin)
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
mkdir build-cygwin && cd build-cygwin && cmake -DLINUX_MINGW32=ON -DCYGWIN=ON .. && make
|
||||
wget https://curl.se/windows/dl-8.5.0_3/curl-8.5.0_3-win64-mingw.zip -O curl.zip && unzip curl.zip && mv curl-8.5.0_3-win64-mingw/bin/libcurl-x64.dll output/libcurl.dll
|
||||
cp C:\tools\cygwin\bin\cygwin1.dll output
|
||||
zip -r -j lpac-windows-x86_64-cygwin.zip output/*
|
||||
|
||||
- name: Build for macOS
|
||||
if: runner.os == 'macOS'
|
||||
|
@ -53,7 +67,8 @@ jobs:
|
|||
with:
|
||||
name: build-artifacts
|
||||
path: |
|
||||
build-mingw/lpac-windows-x86_64.zip
|
||||
build-mingw/lpac-windows-x86_64-mingw.zip
|
||||
build-cygwin/lpac-windows-x86_64-cygwin.zip
|
||||
build/lpac-linux-x86_64.tar.gz
|
||||
build/lpac-macos-universal.zip
|
||||
|
||||
|
@ -62,6 +77,7 @@ jobs:
|
|||
if: startsWith(github.ref, 'refs/tags/v')
|
||||
with:
|
||||
files: |
|
||||
build-mingw/lpac-windows-x86_64.zip
|
||||
build-mingw/lpac-windows-x86_64-mingw.zip
|
||||
build-cygwin/lpac-windows-x86_64-cygwin.zip
|
||||
build/lpac-linux-x86_64.tar.gz
|
||||
build/lpac-macos-universal.zip
|
||||
|
|
|
@ -8,18 +8,23 @@ endif()
|
|||
|
||||
if(LINUX_MINGW32)
|
||||
set(CMAKE_SYSTEM_NAME Windows)
|
||||
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
|
||||
if(CYGWIN)
|
||||
message(STATUS "Building for Cygwin")
|
||||
add_definitions(-DHAVE_TIMEGM=1)
|
||||
else()
|
||||
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
|
||||
|
||||
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
|
||||
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
|
||||
set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran)
|
||||
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
|
||||
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
|
||||
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
|
||||
set(CMAKE_Fortran_COMPILER ${TOOLCHAIN_PREFIX}-gfortran)
|
||||
set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
|
||||
|
||||
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
|
||||
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
|
||||
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
cmake_minimum_required (VERSION 3.8)
|
||||
|
|
53
README.md
53
README.md
|
@ -7,7 +7,11 @@ lpac 是一个跨平台的本地 Profile 代理程序。致力于成为兼容性
|
|||
下载地址:
|
||||
[Github Release](https://github.com/estkme-group/lpac/releases/latest)
|
||||
|
||||
加入我们的 [Telegram 群组](https://t.me/estkme)进行讨论!
|
||||
关于 Release 的预构建分发:
|
||||
- macOS 理论上需要 12 以后版本,无法运行请自行编译
|
||||
- Linux 基于 Ubuntu 22.04 构建,需要安装 pcscd libpcsclite 依赖。无法运行请自行编译
|
||||
|
||||
加入我们的 [Telegram 群组](https://t.me/estkme) 进行讨论!
|
||||
|
||||
特性:
|
||||
- 支持激活码(Activate Code)和确认码(Confirm Code)
|
||||
|
@ -24,7 +28,7 @@ lpac 是一个跨平台的本地 Profile 代理程序。致力于成为兼容性
|
|||
- [目录](#目录)
|
||||
- [编译](#编译)
|
||||
- [使用](#使用)
|
||||
- [Linux pcscd](#linux-pcscd)
|
||||
- [Linux 依赖](#linux-依赖)
|
||||
- [库说明](#库说明)
|
||||
- [CLI](#cli)
|
||||
- [返回值](#返回值)
|
||||
|
@ -75,6 +79,8 @@ make
|
|||
<details>
|
||||
<summary>Windows</summary>
|
||||
|
||||
使用 MinGW 编译的 lpac 存在无法发送通知的 bug,如果不需要用到该功能可以忽略。如有需要可尝试使用 Cygwin 编译
|
||||
|
||||
- 在 Linux 上编译
|
||||
|
||||
```bash
|
||||
|
@ -99,12 +105,27 @@ cmake -DLINUX_MINGW32=ON .. && ninja
|
|||
wget https://curl.se/windows/dl-8.4.0_6/curl-8.4.0_6-win64-mingw.zip -O curl.zip && unzip curl.zip && mv curl-8.4.0_6-win64-mingw/bin/libcurl-x64.dll output/libcurl.dll
|
||||
```
|
||||
编译后的二进制在 output 目录内.
|
||||
|
||||
- 在 Windows 上编译(Cygwin)
|
||||
|
||||
安装好 `gcc-core` `gcc-g++` `make` `cmake` `unzip` `wget`
|
||||
|
||||
```bash
|
||||
git clone --depth=1 https://github.com/estkme-group/lpac
|
||||
cd lpac && mkdir build && cd build
|
||||
cmake -DLINUX_MINGW32=ON -DCYGWIN=ON .. && make
|
||||
# 下载 libcurl
|
||||
wget https://curl.se/windows/dl-8.4.0_6/curl-8.4.0_6-win64-mingw.zip -O curl.zip && unzip curl.zip && mv curl-8.4.0_6-win64-mingw/bin/libcurl-x64.dll output/libcurl.dll
|
||||
```
|
||||
编译后的二进制在 output 目录内.
|
||||
|
||||
在 Cygwin shell 外运行程序需要把 `cygwin1.dll` 放置一份于程序目录下。对于默认路径安装的 Cygwin 这个文件应该位于 `C:\cygwin64\bin\cygwin1.dll`
|
||||
</details>
|
||||
|
||||
|
||||
## 使用
|
||||
|
||||
### Linux pcscd
|
||||
### Linux 依赖
|
||||
|
||||
在 Linux 下访问 PCSC 读卡器需要安装 `pcscd` 并启动。
|
||||
```bash
|
||||
|
@ -112,6 +133,8 @@ sudo apt install pcscd
|
|||
sudo systemctl start pcscd
|
||||
```
|
||||
|
||||
`libpcsclite` 也需要安装
|
||||
|
||||
### 库说明
|
||||
默认会使用 `libapduinterface` APDU 库和 `libhttpinterface` HTTP 库,请提前重命名以选择需要使用的库。或者通过 `APDU_INTERFACE` 和 `HTTP_INTERFACE` 环境变量告诉 lpac 使用的 APDU 库和 HTTP 库。库文件在 lpac 程序目录下,根据系统不同,后缀为 `dll`, `so`, `dylib`
|
||||
|
||||
|
@ -131,10 +154,10 @@ HTTP:
|
|||
|
||||
<summary>Windows(使用PowerShell)</summary>
|
||||
|
||||
```
|
||||
$env:APDU_INTERFACE=".\libapduinterface_pcsc.dll"
|
||||
$env:HTTP_INTERFACE=".\libhttpinterface_curl.dll"
|
||||
```
|
||||
```
|
||||
$env:APDU_INTERFACE=".\libapduinterface_pcsc.dll"
|
||||
$env:HTTP_INTERFACE=".\libhttpinterface_curl.dll"
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -142,10 +165,10 @@ HTTP:
|
|||
|
||||
<summary>Linux</summary>
|
||||
|
||||
```
|
||||
export APDU_INTERFACE=./libapduinterface_pcsc.so
|
||||
export HTTP_INTERFACE=./libhttpinterface_curl.so
|
||||
```
|
||||
```
|
||||
export APDU_INTERFACE=./libapduinterface_pcsc.so
|
||||
export HTTP_INTERFACE=./libhttpinterface_curl.so
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -153,10 +176,10 @@ HTTP:
|
|||
|
||||
<summary>macOS</summary>
|
||||
|
||||
```
|
||||
export APDU_INTERFACE=./libapduinterface_pcsc.dylib
|
||||
export HTTP_INTERFACE=./libhttpinterface_curl.dylib
|
||||
```
|
||||
```
|
||||
export APDU_INTERFACE=./libapduinterface_pcsc.dylib
|
||||
export HTTP_INTERFACE=./libhttpinterface_curl.dylib
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
|
|
37
README_en.md
37
README_en.md
|
@ -2,25 +2,34 @@
|
|||
|
||||
[中文](README.md)
|
||||
|
||||
LPAC is a cross platform local profile agent program. Committed to becoming the most compatible, powerful, and concise LPA program.
|
||||
LPAC is a cross platform local profile agent program.
|
||||
|
||||
Features:
|
||||
- Support Activate Code and **Confirm Code**
|
||||
- Support custom IMEI sent to server
|
||||
- Support esim Discovery(Push)
|
||||
- Notification manage
|
||||
- Lookup eUICC chip info
|
||||
- etc
|
||||
|
||||
Download:
|
||||
[Github Release](https://github.com/estkme-group/lpac/releases/latest)
|
||||
|
||||
Join our [Telegram Group](https://t.me/estkme)to discuss!
|
||||
lpac is dynamic-linked, Release is built by Github action, if you can't run it you need to compile by yourself
|
||||
|
||||
Join our [Telegram Group](https://t.me/estkme) to discuss!
|
||||
|
||||
# Usage
|
||||
|
||||
## Linux pcscd
|
||||
## Linux dependency
|
||||
You need to install `pcscd` and keep its daemon running to access pcsc smart card reader.
|
||||
```bash
|
||||
sudo apt install pcscd
|
||||
sudo systemctl start pcscd
|
||||
```
|
||||
|
||||
## GUI Frontend
|
||||
`libpcsclite` is alse needed
|
||||
|
||||
- [lpa-agent](https://github.com/estkme-group/lpa-agent): Web based lpac frontend
|
||||
|
||||
# Compile
|
||||
|
||||
|
@ -40,6 +49,24 @@ WIP
|
|||
|
||||
## Windows
|
||||
|
||||
Due to a [bug in asn1c](https://github.com/vlm/asn1c/issues/196), the MinGW version of lpac cannot send notification successfully. Building with Cygwin seems to avoid it.
|
||||
|
||||
Windows need prebuilt libcurl.dll, you can replace the download link to newest curl version.
|
||||
|
||||
- Build on Windows(Cygwin)
|
||||
|
||||
With `gcc-core` `gcc-g++` `make` `cmake` `unzip` `wget` installed
|
||||
|
||||
```bash
|
||||
git clone --depth=1 https://github.com/estkme-group/lpac
|
||||
cd lpac && mkdir build && cd build
|
||||
cmake -DLINUX_MINGW32=ON -DCYGWIN=ON .. && make
|
||||
# Download libcurl
|
||||
wget https://curl.se/windows/dl-8.4.0_6/curl-8.4.0_6-win64-mingw.zip -O curl.zip && unzip curl.zip && mv curl-8.4.0_6-win64-mingw/bin/libcurl-x64.dll output/libcurl.dll
|
||||
```
|
||||
To run it outside Cygwin shell, you need copy `cygwin1.dll` to the program folder to distribute.
|
||||
`cygwin1.dll` is located in `C:\cygwin64\bin\cygwin1.dll` (Default Cygwin installation location)
|
||||
|
||||
- Build on Linux(MINGW)
|
||||
|
||||
```bash
|
||||
|
|
|
@ -4,7 +4,7 @@ add_library (euiccasn1 STATIC ${LIB_EUICC_ASN1_SRCS})
|
|||
target_compile_definitions(euiccasn1 PRIVATE HAVE_CONFIG_H)
|
||||
|
||||
option(LINUX_MINGW32 "Build for windows on Linux" OFF)
|
||||
if(LINUX_MINGW32)
|
||||
if(LINUX_MINGW32 AND NOT CYGWIN)
|
||||
add_subdirectory(mingw32)
|
||||
target_link_libraries(euiccasn1 euiccasn1mingw32)
|
||||
endif()
|
||||
|
|
|
@ -5,7 +5,7 @@ target_link_libraries(apduinterface_pcsc cjson-static)
|
|||
set_target_properties(apduinterface_pcsc PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
|
||||
set_target_properties(apduinterface_pcsc PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
|
||||
|
||||
if(LINUX_MINGW32)
|
||||
if(LINUX_MINGW32 OR CYGWIN)
|
||||
target_link_libraries(apduinterface_pcsc winscard)
|
||||
elseif (APPLE)
|
||||
target_link_libraries(apduinterface_pcsc "-framework PCSC")
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
|
||||
#ifdef __MINGW32__
|
||||
#include <winscard.h>
|
||||
#elif defined(__CYGWIN__)
|
||||
#include "/usr/include/w32api/winscard.h"
|
||||
#include "/usr/include/w32api/wtypes.h"
|
||||
#else
|
||||
#include <PCSC/wintypes.h>
|
||||
#include <PCSC/winscard.h>
|
||||
|
|
|
@ -147,6 +147,8 @@ EUICC_SHARED_EXPORT int libhttpinterface_init(struct euicc_http_interface *ifstr
|
|||
{
|
||||
#if defined(__MINGW32__)
|
||||
libcurl_path = "libcurl.dll";
|
||||
#elif defined(__CYGWIN__)
|
||||
libcurl_path = "libcurl.dll";
|
||||
#elif defined(__APPLE__)
|
||||
libcurl_path = "libcurl.4.dylib";
|
||||
#else
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
|
||||
#if defined(__MINGW32__)
|
||||
#define INTERFACELIB_POSTFIX "dll"
|
||||
#elif defined(__CYGWIN__)
|
||||
#define INTERFACELIB_POSTFIX "dll"
|
||||
#elif defined(__APPLE__)
|
||||
#define INTERFACELIB_POSTFIX "dylib"
|
||||
#else
|
||||
|
|
Loading…
Reference in a new issue