Skip to content

Commit

Permalink
ci: windows: add GitHub Actions
Browse files Browse the repository at this point in the history
  • Loading branch information
adriweb authored and debrouxl committed Nov 26, 2023
1 parent a6e3dab commit 33e1d37
Show file tree
Hide file tree
Showing 14 changed files with 280 additions and 92 deletions.
10 changes: 5 additions & 5 deletions .github/workflows/build.linux.workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Build Linux

on:
push:
branches: [ master, experimental, experimental2 ]
branches: [ master, experimental, experimental2, feature/ci-windows ]
pull_request:
branches: [ master, experimental, experimental2 ]
branches: [ master, experimental, experimental2, feature/ci-windows ]
release:
types: [published]

Expand Down 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/
10 changes: 5 additions & 5 deletions .github/workflows/build.mac.workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: Build macOS

on:
push:
branches: [ master, experimental, experimental2 ]
branches: [ master, experimental, experimental2, feature/ci-windows ]
pull_request:
branches: [ master, experimental, experimental2 ]
branches: [ master, experimental, experimental2, feature/ci-windows ]
release:
types: [published]

Expand Down 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, feature/ci-windows ]
pull_request:
branches: [ master, feature/github-actions, feature/ci-windows ]
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"
}
]
}
Loading

0 comments on commit 33e1d37

Please sign in to comment.