Skip to content

Commit

Permalink
cmake: modernize cmake usage (#38)
Browse files Browse the repository at this point in the history
Signed-off-by: Coelacanthus <[email protected]>
  • Loading branch information
CoelacanthusHex authored Feb 8, 2024
1 parent aa80656 commit 086e8fb
Show file tree
Hide file tree
Showing 12 changed files with 57 additions and 83 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ jobs:
- name: Build for Windows(Cygwin)
if: runner.os == 'Windows'
run: |
mkdir build-cygwin && cd build-cygwin && cmake -DCYGWIN=ON .. && make
mkdir build-cygwin && cd build-cygwin && cmake .. && 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/*
Expand All @@ -51,7 +51,7 @@ jobs:
if: runner.os == 'Linux'
shell: bash
run: |
mkdir build-mingw && cd build-mingw && cmake -DLINUX_MINGW32=ON .. && make -j$(nproc)
mkdir build-mingw && cd build-mingw && cmake -DCMAKE_TOOLCHAIN_FILE=./cmake/linux-mingw64.cmake .. && make -j$(nproc)
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
zip -r -j lpac-windows-x86_64-mingw.zip output/*
Expand Down
34 changes: 6 additions & 28 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,45 +1,23 @@
option(LINUX_MINGW32 "Build for windows on Linux" OFF)
cmake_minimum_required (VERSION 3.8)
project (lpac)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

if (APPLE)
message(STATUS "Building for macOS")
set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64")
set(CMAKE_SYSTEM_NAME Darwin)
endif()

if(LINUX_MINGW32)
set(CMAKE_SYSTEM_NAME Windows)

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_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)
endif()

if(CYGWIN)
set(CMAKE_SYSTEM_NAME Windows)
message(STATUS "Building for Cygwin")
add_definitions(-DHAVE_TIMEGM=1)
endif()

cmake_minimum_required (VERSION 3.8)
project (lpac)


include_directories(.)
add_subdirectory(cjson)
add_subdirectory(euicc)
add_subdirectory(interface)
add_subdirectory(src)
if(LINUX_MINGW32)
if(MINGW)
add_subdirectory(dlfcn-win32)
set(DL_LIBRARY dlfcn-win32)
else()
set(DL_LIBRARY dl)
endif()
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ 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 -DCYGWIN=ON .. && make
cmake .. && 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
```
Expand All @@ -81,7 +81,7 @@ To run it outside Cygwin shell, you need copy `cygwin1.dll` to the program folde
sudo apt install build-essential cmake git g++ libpcsclite-dev libcurl4-openssl-dev gcc-mingw-w64 g++-mingw-w64
git clone --depth=1 https://github.com/estkme-group/lpac
cd lpac && mkdir build && cd build
cmake -DLINUX_MINGW32=ON .. && make
cmake -DCMAKE_TOOLCHAIN_FILE=./cmake/linux-mingw64.cmake .. && 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
```
Expand All @@ -92,7 +92,7 @@ wget https://curl.se/windows/dl-8.4.0_6/curl-8.4.0_6-win64-mingw.zip -O curl.zip
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc
git clone --depth=1 https://github.com/estkme-group/lpac
cd lpac && mkdir build && cd build
cmake -DLINUX_MINGW32=ON .. && ninja
cmake -DCMAKE_TOOLCHAIN_FILE=./cmake/linux-mingw64.cmake .. && ninja
# 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
```
Expand Down
4 changes: 2 additions & 2 deletions cjson/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
include_directories(.)
aux_source_directory(. LIB_CJSON_SRCS)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} LIB_CJSON_SRCS)
add_library(cjson-static STATIC ${LIB_CJSON_SRCS})
target_include_directories(cjson-static PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
15 changes: 15 additions & 0 deletions cmake/linux-mingw64.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
set(CMAKE_SYSTEM_NAME Windows)

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_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)

4 changes: 2 additions & 2 deletions dlfcn-win32/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
include_directories(.)
aux_source_directory(. LIB_DLFCN_SRCS)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} LIB_DLFCN_SRCS)
add_library(dlfcn-win32 STATIC ${LIB_DLFCN_SRCS})
target_include_directories(dlfcn-win32 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
10 changes: 4 additions & 6 deletions euicc/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
add_subdirectory(asn1c)
include_directories(asn1c)
include_directories(asn1c/asn1)
aux_source_directory(. LIB_EUICC_SRCS)
add_library (euicc STATIC ${LIB_EUICC_SRCS})
target_link_libraries(euicc euiccasn1)
target_link_libraries(euicc cjson-static)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} LIB_EUICC_SRCS)
add_library(euicc STATIC ${LIB_EUICC_SRCS})
target_link_libraries(euicc euiccasn1 cjson-static)
target_include_directories(euicc PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>)
11 changes: 6 additions & 5 deletions euicc/asn1c/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
include_directories(.)
aux_source_directory(asn1 LIB_EUICC_ASN1_SRCS)
add_library (euiccasn1 STATIC ${LIB_EUICC_ASN1_SRCS})
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/asn1 LIB_EUICC_ASN1_SRCS)
add_library(euiccasn1 STATIC ${LIB_EUICC_ASN1_SRCS})
target_compile_definitions(euiccasn1 PRIVATE HAVE_CONFIG_H)
target_include_directories(euiccasn1 PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/asn1>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)

option(LINUX_MINGW32 "Build for windows on Linux" OFF)
if(LINUX_MINGW32)
if(MINGW)
add_subdirectory(mingw32)
target_link_libraries(euiccasn1 euiccasn1mingw32)
endif()
6 changes: 3 additions & 3 deletions euicc/asn1c/mingw32/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
include_directories(.)
aux_source_directory(. LIB_EUICC_ASN1_MINGW32_SRCS)
add_library (euiccasn1mingw32 STATIC ${LIB_EUICC_ASN1_MINGW32_SRCS})
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} LIB_EUICC_ASN1_MINGW32_SRCS)
add_library(euiccasn1mingw32 STATIC ${LIB_EUICC_ASN1_MINGW32_SRCS})
target_include_directories(euiccasn1mingw32 PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
11 changes: 5 additions & 6 deletions interface/apdu/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,27 +1,26 @@
option(LINUX_MINGW32 "Build for windows on Linux" OFF)

add_library(apduinterface_pcsc SHARED pcsc.c)
target_link_libraries(apduinterface_pcsc cjson-static)
target_link_libraries(apduinterface_pcsc euicc 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")
install(TARGETS apduinterface_pcsc LIBRARY DESTINATION lib/lpac)

if(LINUX_MINGW32 OR CYGWIN)
if(MINGW OR CYGWIN)
target_link_libraries(apduinterface_pcsc winscard)
elseif (APPLE)
elseif(APPLE)
target_link_libraries(apduinterface_pcsc "-framework PCSC")
else()
find_package(PCSCLite)
target_link_libraries(apduinterface_pcsc PCSCLite::PCSCLite)
endif()

add_library(apduinterface_at SHARED at.c)
target_link_libraries(apduinterface_at euicc)
set_target_properties(apduinterface_at PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
set_target_properties(apduinterface_at PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
install(TARGETS apduinterface_at LIBRARY DESTINATION lib/lpac)

add_library(apduinterface_stdio SHARED stdio.c)
target_link_libraries(apduinterface_stdio cjson-static)
target_link_libraries(apduinterface_stdio euicc cjson-static)
set_target_properties(apduinterface_stdio PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
set_target_properties(apduinterface_stdio PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
install(TARGETS apduinterface_stdio LIBRARY DESTINATION lib/lpac)
11 changes: 2 additions & 9 deletions interface/http/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
option(LINUX_MINGW32 "Build for windows on Linux" OFF)


add_library(httpinterface_curl SHARED curl.c)
if(LINUX_MINGW32)
target_link_libraries(httpinterface_curl dlfcn-win32)
else()
target_link_libraries(httpinterface_curl dl)
endif()
target_link_libraries(httpinterface_curl euicc ${DL_LIBRARY})
set_target_properties(httpinterface_curl PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
set_target_properties(httpinterface_curl PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
install(TARGETS httpinterface_curl LIBRARY DESTINATION lib/lpac)


add_library(httpinterface_stdio SHARED stdio.c)
target_link_libraries(httpinterface_stdio cjson-static)
target_link_libraries(httpinterface_stdio euicc cjson-static)
set_target_properties(httpinterface_stdio PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
set_target_properties(httpinterface_stdio PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output")
install(TARGETS httpinterface_stdio LIBRARY DESTINATION lib/lpac)
24 changes: 7 additions & 17 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,28 +1,18 @@
option(LINUX_MINGW32 "Build for windows on Linux" OFF)

if(APPLE)
set(RPATH_BINARY_PATH "@loader_path")
else()
set(RPATH_BINARY_PATH "$ORIGIN")
endif()

include_directories(.)
aux_source_directory(. DIR_LPAC_SRCS)
aux_source_directory(applet DIR_LPAC_SRCS)
aux_source_directory(applet/chip DIR_LPAC_SRCS)
aux_source_directory(applet/notification DIR_LPAC_SRCS)
aux_source_directory(applet/profile DIR_LPAC_SRCS)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} DIR_LPAC_SRCS)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/applet DIR_LPAC_SRCS)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/applet/chip DIR_LPAC_SRCS)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/applet/notification DIR_LPAC_SRCS)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/applet/profile DIR_LPAC_SRCS)
add_executable(lpac ${DIR_LPAC_SRCS})
set_target_properties(lpac PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/output"
BUILD_RPATH "${RPATH_BINARY_PATH}"
)
target_link_libraries(lpac euicc)

if(LINUX_MINGW32)
target_link_libraries(lpac dlfcn-win32)
else()
target_link_libraries(lpac dl)
endif()

install(TARGETS lpac RUNTIME DESTINATION bin)
target_link_libraries(lpac euicc ${DL_LIBRARY})
target_include_directories(lpac PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)

0 comments on commit 086e8fb

Please sign in to comment.