Skip to content

Commit

Permalink
ci: windows: add GitHub Actions
Browse files Browse the repository at this point in the history
[Lionel: adjusted configure.ac and link_usb.cc for the MinGW cross-build.]
  • Loading branch information
adriweb authored and debrouxl committed Nov 26, 2023
1 parent 5ab36f3 commit 14aabd4
Show file tree
Hide file tree
Showing 16 changed files with 285 additions and 91 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/build.linux.workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ jobs:
cmake --build . --target install
- name: Prepare install folder for upload
run: mv prefix tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps_${{ github.sha }}
run: mv prefix tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps

- name: Upload install folder
uses: actions/upload-artifact@v3
with:
name: tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps_${{ github.sha }}
path: tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps_${{ github.sha }}/
name: tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps
path: tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps/
6 changes: 3 additions & 3 deletions .github/workflows/build.mac.workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,10 @@ jobs:
cmake --build . --target install
- name: Prepare install folder for upload
run: mv prefix tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps_${{ github.sha }}
run: mv prefix tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps

- name: Upload install folder
uses: actions/upload-artifact@v3
with:
name: tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps_${{ github.sha }}
path: tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps_${{ github.sha }}/
name: tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps
path: tilibs_${{ matrix.os }}_${{ matrix.deps_type }}Deps/
73 changes: 73 additions & 0 deletions .github/workflows/build.windows.workflow.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Build Windows

on:
push:
branches: [ master, feature/github-actions ]
pull_request:
branches: [ master, feature/github-actions ]
release:
types: [published]

jobs:
build:
name: "Build: ${{ matrix.arch }} - ${{ matrix.deps_type }} deps"
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
arch: [x64]
config: [ReleaseDynamic,ReleaseStatic]
include:
- arch: x64
arch_name: 64-bit
arch_suffix: "64"
- config: ReleaseDynamic
deps_type: shared
- config: ReleaseStatic
deps_type: static

steps:
- name: Checkout Git Repo
uses: actions/checkout@v3
with:
submodules: 'recursive'

- name: Install latest CMake
uses: lukka/get-cmake@9781783c006d9d607cb391b971a1dcbed768a25a # latest as of 2023-11-12

- name: Restore artifacts, or setup vcpkg (do not install any package)
uses: lukka/run-vcpkg@6fe69898af670ac05f4a8427cc5cff4fb361cee5 # latest as of 2023-11-12
with:
vcpkgGitCommitId: '61f610845fb206298a69f708104a51d651872877' # latest as of 2023-11-12
prependedCacheKey: '${{ matrix.deps_type }}Deps'

- name: Create prefix folder
shell: cmd
run: mkdir prefix

- name: Build tilibs
uses: lukka/run-cmake@2ce8982be71b8e9a3c4d5e432135035afd1e76a7 # latest as of 2023-11-12
with:
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
configurePreset: '${{ matrix.arch }}-${{ matrix.config }}'
buildPreset: '${{ matrix.arch }}-${{ matrix.config }}'
env:
VCPKG_FORCE_SYSTEM_BINARIES: 1
CMAKE_INSTALL_PREFIX_OVERRIDE: '${{ github.workspace }}/prefix'

- name: Install tilibs
uses: lukka/run-cmake@2ce8982be71b8e9a3c4d5e432135035afd1e76a7 # latest as of 2023-11-12
with:
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
buildPreset: '${{ matrix.arch }}-${{ matrix.config }}'
buildPresetAdditionalArgs: "['--target install']"

- name: Prepare install folder for upload
shell: cmd
run: rename prefix tilibs_windows_${{ matrix.deps_type }}Deps

- name: Upload install folder
uses: actions/upload-artifact@v3
with:
name: tilibs_windows_${{ matrix.deps_type }}Deps
path: tilibs_windows_${{ matrix.deps_type }}Deps
61 changes: 0 additions & 61 deletions .github/workflows/codeql.yml

This file was deleted.

2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Thumbs.db
.\#*
\#*\#
.idea/
.vs/
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
Expand All @@ -84,3 +85,4 @@ Session.vim

# CMake
cmake-build-*/
tilibs.build/
23 changes: 15 additions & 8 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,30 @@ project(tilibs C CXX)
# - probably doesn't work very well with ancient toolchains or on uncommon OSes
#
# Notes:
# - this has been succesfully tested on recent macOS and Linux.
# - this has been succesfully tested on recent macOS, Linux, and Windows (with vcpkg).
# - The TRY_STATIC_LIBS CMake option will try to build the libs (both shared and static) using as many static
# dependent libraries as possible.
# Let's note however that there is currently not much advantage in building that way, using shared libs is preferred,
# but at least you have the choice to do whatever you want should you ever really need a static build.
# but at least you have the choice to do whatever you want should you ever really need a static build (may be useful on Windows)
#
# In the future...:
# - TODO: add support to build the ROM dumpers (will end up just launching the external tools...)
# - WISH: do not hardcode the (auto-generated...) potfiles_* target names
# - WISH: better expose each lib's generated install target (NTS: look at cmake's components feature?)
# - WISH: provide Find* CMake modules for the libs themselves?
# - WISH: add support for Windows (that will probably be annoying)
#

# In case there was an env-var override...
if(DEFINED ENV{CMAKE_INSTALL_PREFIX_OVERRIDE})
set(CMAKE_INSTALL_PREFIX "$ENV{CMAKE_INSTALL_PREFIX_OVERRIDE}")
endif()
# Be sure to have the expected install prefix format
if(CMAKE_INSTALL_PREFIX)
file(TO_CMAKE_PATH "${CMAKE_INSTALL_PREFIX}" CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "CMAKE_INSTALL_PREFIX" FORCE)
message("CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
endif()

# Our modules
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/.cmake)
file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/.cmake/*.cmake")
Expand All @@ -61,7 +71,7 @@ else()
endif()

option(TRY_STATIC_LIBS "Build using as many static libs as possible" OFF)
if (VCPKG_TARGET_TRIPLET MATCHES "-static(-md|-release)?$")
if (VCPKG_TARGET_TRIPLET MATCHES "-static")
if(NOT TRY_STATIC_LIBS)
message(WARNING "Setting TRY_STATIC_LIBS to ON anyway due to static vcpkg target")
set(TRY_STATIC_LIBS ON)
Expand All @@ -72,10 +82,6 @@ if(TRY_STATIC_LIBS)
message("Will try to build as statically as possible...")
if(WIN32)
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
if (NOT VCPKG_TARGET_TRIPLET MATCHES "-static-md$")
message("Using static MSVC runtime...")
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()
else()
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
endif()
Expand Down Expand Up @@ -115,6 +121,7 @@ elseif(MINGW)
elseif(WIN32)
add_compile_definitions(__WIN32__)
add_compile_definitions(HAVE_CONFIG_H)
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
include_directories(${CMAKE_SOURCE_DIR}/win32_config)
endif()

Expand Down
119 changes: 119 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 21,
"patch": 1
},
"configurePresets": [
{
"name": "ninja-vcpkg",
"hidden": true,
"generator": "Ninja",
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"binaryDir": "${sourceDir}/tilibs.build/${presetName}",
"installDir": "${sourceDir}/tilibs.build/${presetName}",
"cacheVariables": {
"VCPKG_MANIFEST_MODE": {
"type": "BOOL",
"value": "True"
},
"VCPKG_MANIFEST_INSTALL": {
"type": "BOOL",
"value": "True"
}
}
},
{
"name": "ninja-vcpkg-x64",
"hidden": true,
"inherits": "ninja-vcpkg",
"architecture": {
"strategy": "external",
"value": "x64"
},
"cacheVariables": {
"TRY_STATIC_LIBS": {
"type": "BOOL",
"value": "OFF"
},
"VCPKG_TARGET_TRIPLET": {
"type": "STRING",
"value": "x64-windows-release"
}
}
},
{
"name": "x64-Debug",
"inherits": "ninja-vcpkg-x64",
"cacheVariables": {
"CMAKE_BUILD_TYPE": {
"type": "STRING",
"value": "Debug"
}
}
},
{
"name": "x64-ReleaseStatic",
"inherits": "ninja-vcpkg-x64",
"cacheVariables": {
"CMAKE_BUILD_TYPE": {
"type": "STRING",
"value": "Release"
},
"TRY_STATIC_LIBS": {
"type": "BOOL",
"value": "ON"
},
"VCPKG_HOST_TRIPLET": {
"type": "STRING",
"value": "x64-windows-static-release"
},
"VCPKG_TARGET_TRIPLET": {
"type": "STRING",
"value": "x64-windows-static-release"
},
"VCPKG_INSTALL_OPTIONS": {
"type": "STRING",
"value": "--allow-unsupported"
}
}
},
{
"name": "x64-ReleaseDynamic",
"inherits": "ninja-vcpkg-x64",
"cacheVariables": {
"CMAKE_BUILD_TYPE": {
"type": "STRING",
"value": "Release"
},
"TRY_STATIC_LIBS": {
"type": "BOOL",
"value": "ON"
},
"VCPKG_HOST_TRIPLET": {
"type": "STRING",
"value": "x64-windows-release"
},
"VCPKG_TARGET_TRIPLET": {
"type": "STRING",
"value": "x64-windows-release"
}
}
}
],
"buildPresets": [
{
"name": "x64-Debug",
"configurePreset": "x64-Debug"
},
{
"name": "x64-ReleaseStatic",
"configurePreset": "x64-ReleaseStatic"
},
{
"name": "x64-ReleaseDynamic",
"configurePreset": "x64-ReleaseDynamic"
}
]
}
21 changes: 14 additions & 7 deletions libticables/trunk/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,26 @@ if(WIN32)
endif()

# external deps lookup
pkg_check_modules(DEPS REQUIRED glib-2.0 libusb-1.0>=1.0.16)
if(WIN32)
pkg_check_modules(DEPS REQUIRED glib-2.0)
list(APPEND DEPS_LIBRARIES "libusb0")
list(APPEND DEPS_STATIC_LIBRARIES "libusb0")
else()
pkg_check_modules(DEPS REQUIRED glib-2.0 libusb-1.0>=1.0.16)
# Needed for the .pc files configured in the function below.
set(TICABLES_LIBUSB_REQUIRES_PRIVATE "libusb-1.0")
endif()

try_static_libs_if_needed()

# Needed for the .pc files configured in the function below.
set(TICABLES_LIBUSB_REQUIRES_PRIVATE "libusb-1.0")

# auto-creation of all targets with flags etc.
create_targets_both_lib_types(ticables2)

if(NOT WIN32)
# additional internal defines
target_compile_definitions(ticables2_objlib PUBLIC HAVE_LIBUSB_1_0=1 HAVE_LIBUSB10_STRERROR=1 HAVE_TERMIOS_H=1)
endif()

set_target_properties(ticables2_shared PROPERTIES VERSION 8.0.0 SOVERSION 8)

# Takes care of the i18n po/pot/gmo/mo files
Expand All @@ -62,9 +72,6 @@ if(ENABLE_NLS)
add_dependencies(ticables2_objlib potfiles_2)
endif()

# additional internal defines
target_compile_definitions(ticables2_objlib PUBLIC HAVE_LIBUSB_1_0=1 HAVE_LIBUSB10_STRERROR=1 HAVE_TERMIOS_H=1)

# check includes for parallel and serial support
if(LINUX)
include(CheckIncludeFile)
Expand Down
Loading

0 comments on commit 14aabd4

Please sign in to comment.