Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make it buildable on Windows with VS, and add windows Github Actions CI with vcpkg #75

Merged
merged 2 commits into from
Nov 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 ]
adriweb marked this conversation as resolved.
Show resolved Hide resolved
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/
26 changes: 15 additions & 11 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,12 +121,10 @@ 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()

# Needed for C++ compat
add_definitions(-Drestrict=__restrict)

# i18n support checking
include(FindGettext)
include(FindIntl)
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
Loading