Skip to content

Commit

Permalink
Merge pull request #2098 from quentin/try-msvc
Browse files Browse the repository at this point in the history
MSVC support, CI github Actions `windows-2019`
  • Loading branch information
b-scholz committed Mar 10, 2022
2 parents 2fdbd07 + 4dff141 commit 4226e49
Show file tree
Hide file tree
Showing 180 changed files with 3,695 additions and 1,530 deletions.
4 changes: 2 additions & 2 deletions .github/images/arch-linux/PKGBUILD.in
Expand Up @@ -16,8 +16,8 @@ arch=('any')
url="https://github.com/souffle-lang/souffle"
license=('UPL')
groups=()
depends=('mcpp' 'gcc>=8' 'openmp' 'sqlite')
makedepends=('git' 'cmake>=3.15' 'bison>=3.0.4' 'flex' 'libffi' 'ncurses' 'zlib')
depends=('mcpp' 'gcc>=8' 'openmp' 'sqlite' 'python3')
makedepends=('git' 'cmake>=3.15' 'bison>=3.0.4' 'flex' 'libffi' 'ncurses' 'zlib' 'python3')
optdepends=('bash-completion')
provides=('souffle')
conflicts=('souffle-git')
Expand Down
76 changes: 76 additions & 0 deletions .github/workflows/VS-CI-Tests.yml
@@ -0,0 +1,76 @@
name: VS-CI-Tests

on:
# TODO remove me before merge
push:
branches:
- '**'
pull_request:
types: [opened, synchronize]
workflow_dispatch:

env:
CHOCO_CACHE_DIR: "${{ github.workspace }}/choco-cache"

jobs:

Windows-CMake-MSVC:
runs-on: windows-2019
steps:
- uses: actions/checkout@v2

- name: Dependencies Cache
uses: actions/cache@v2
env:
cache-name: cache-chocolatey
with:
# cache Chocolatey packages to speed-up the deployment.
path: |
${{ env.CHOCO_CACHE_DIR }}
key: windows-${{ hashFiles('choco-packages.config') }}

# Use Chocolatey to install binary dependencies.
- name: Binary Dependencies (Chocolatey)
run: |
choco config set cacheLocation ${{ env.CHOCO_CACHE_DIR }}
choco install choco-packages.config --no-progress --installargs 'ADD_CMAKE_TO_PATH=""System""'
# Use vcpkg to install devel library dependencies.
- name: Library Dependencies (vcpkg)
uses: lukka/run-vcpkg@v7
with:
vcpkgGitCommitId: '3a28333d605f92f8659f3af1137324b2d9886101'
vcpkgTriplet: x64-windows
vcpkgArguments: 'sqlite3 zlib libffi'

- name: Create Build Directory
working-directory: ${{github.workspace}}
run: mkdir build

- name: Configure Build
working-directory: ${{github.workspace}}
run: |
$env:ChocolateyInstall = Convert-Path "$((Get-Command choco).Path)\..\.."
Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1"
refreshenv
cmake -S . -B build -G "Visual Studio 16 2019" -A x64 "-DCMAKE_TOOLCHAIN_FILE=${{env.VCPKG_ROOT}}/scripts/buildsystems/vcpkg.cmake" -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=/bigobj -DSOUFFLE_DOMAIN_64BIT=ON -DCMAKE_FIND_LIBRARY_PREFIXES=";lib" -DCMAKE_FIND_LIBRARY_SUFFIXES=".lib;.dll" -DSOUFFLE_USE_CURSES=OFF -DSOUFFLE_USE_ZLIB=ON -DCMAKE_FIND_DEBUG_MODE=FALSE -DSOUFFLE_BASH_COMPLETION=OFF
- name: Build
working-directory: ${{github.workspace}}
run: cmake --build build --config Release -j4

# Run the tests, Visual Studio must be in the environment because cl.exe is required for compiled Souffle.
- name: Check interpreter
working-directory: ${{github.workspace}}/build
shell: cmd
run: |
pushd "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build" & call vcvars64.bat & popd
ctest --output-on-failure --build-config Release --progress -j4 -L interpreted
- name: Check others
working-directory: ${{github.workspace}}/build
shell: cmd
run: |
pushd "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build" & call vcvars64.bat & popd
ctest --output-on-failure --build-config Release --progress -j2 -LE interpreted
2 changes: 1 addition & 1 deletion .github/workflows/cancel.yml
@@ -1,7 +1,7 @@
name: Cancel
on:
workflow_run:
workflows: ["CI-Tests"]
workflows: ["CI-Tests", "VS-CI-Tests"]
types:
- requested
jobs:
Expand Down
64 changes: 42 additions & 22 deletions CMakeLists.txt
Expand Up @@ -99,6 +99,7 @@ option(SOUFFLE_GENERATE_DOXYGEN "Generate Doxygen files (html;htmlhelp;man;rtf;x
option(SOUFFLE_CODE_COVERAGE "Enable coverage reporting" OFF)
option(SOUFFLE_BASH_COMPLETION "Enable/Disable bash completion" OFF)
option(SOUFFLE_USE_LIBFFI "Enable/Disable use of libffi" ON)
option(SOUFFLE_CUSTOM_GETOPTLONG "Enable/Disable custom getopt_long implementation" OFF)

cmake_dependent_option(SOUFFLE_USE_LIBCPP "Link to libc++ instead of libstdc++" ON
"CMAKE_CXX_COMPILER_ID STREQUAL Clang" OFF)
Expand All @@ -120,6 +121,24 @@ if (SOUFFLE_USE_LIBCPP)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -lc++abi")
endif()

if (WIN32)
# Search libraries with and without 'lib' prefix.
set(CMAKE_FIND_LIBRARY_PREFIXES ";lib")

# Prefix all shared libraries with 'lib'.
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")

# Prefix all static libraries with 'lib'.
set(CMAKE_STATIC_LIBRARY_PREFIX "lib")

SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
endif ()

# --------------------------------------------------
# curses libraries for Provenance information
# --------------------------------------------------
Expand Down Expand Up @@ -147,7 +166,7 @@ if (SOUFFLE_SWIG_PYTHON OR SOUFFLE_SWIG_JAVA)
find_package(SWIG REQUIRED)

if (SOUFFLE_SWIG_PYTHON)
find_package(Python "3.7" REQUIRED)
find_package(Python3 3.7 REQUIRED)
endif()

if (SOUFFLE_SWIG_JAVA)
Expand Down Expand Up @@ -218,7 +237,10 @@ endif()
# libffi
# --------------------------------------------------
if (SOUFFLE_USE_LIBFFI)
find_package(LibFFI REQUIRED)
find_package(libffi CONFIG QUIET)
if (NOT libffi_FOUND)
find_package(LibFFI REQUIRED)
endif()
endif()

# --------------------------------------------------
Expand All @@ -232,11 +254,6 @@ find_package(Threads REQUIRED)
# --------------------------------------------------
if (SOUFFLE_USE_OPENMP)
find_package(OpenMP)
if (OPENMP_FOUND)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()
endif()

# --------------------------------------------------
Expand Down Expand Up @@ -338,6 +355,7 @@ endif(SOUFFLE_CODE_COVERAGE AND CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
add_subdirectory(src)

if (SOUFFLE_ENABLE_TESTING)
find_package(Python3 3.7 REQUIRED)
add_subdirectory(src/tests)
add_subdirectory(tests)
endif()
Expand Down Expand Up @@ -367,6 +385,7 @@ IF (SOUFFLE_BASH_COMPLETION)
endif()


if (NOT WIN32)
# --------------------------------------------------
# CPack configuration
# --------------------------------------------------
Expand Down Expand Up @@ -396,7 +415,7 @@ if (CHECK_OS_RESULT EQUAL 0)
# --------------------------------------------------

# Specifying runtime dependencies
set(CPACK_DEBIAN_PACKAGE_DEPENDS "g++ (>= 8), libffi-dev, libncurses5-dev, libsqlite3-dev, mcpp, zlib1g-dev")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "g++ (>= 8), libffi-dev, libncurses5-dev, libsqlite3-dev, mcpp, zlib1g-dev, python3")

# Auto-generate any runtime dependencies that are required
SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
Expand All @@ -407,22 +426,23 @@ if (CHECK_OS_RESULT EQUAL 0)
endif()

if (CHECK_OS_OUTPUT MATCHES "FEDORA" OR CHECK_OS_OUTPUT MATCHES "CENTOS")
SET(CPACK_RPM_PACKAGE_GROUP "Unspecified")
SET(CPACK_RPM_PACKAGE_LICENSE "UPL-1.0 License")
SET(CPACK_RPM_PACKAGE_VENDOR "Souffle-lang")
SET(CPACK_RPM_PACKAGE_GROUP "Unspecified")
SET(CPACK_RPM_PACKAGE_LICENSE "UPL-1.0 License")
SET(CPACK_RPM_PACKAGE_VENDOR "Souffle-lang")

# Generate both DEB and RPM packages
SET(CPACK_GENERATOR "RPM")
# Generate both DEB and RPM packages
SET(CPACK_GENERATOR "RPM")

# --------------------------------------------------
# Variables relevent to RPM packages
# --------------------------------------------------
# --------------------------------------------------
# Variables relevent to RPM packages
# --------------------------------------------------

# Specifying runtime dependencies
set(CPACK_RPM_PACKAGE_REQUIRES "gcc-c++ >= 8, libffi, libffi-devel, ncurses-devel, sqlite-devel, mcpp, zlib-devel")
# Specifying runtime dependencies
set(CPACK_RPM_PACKAGE_REQUIRES "gcc-c++ >= 8, libffi, libffi-devel, ncurses-devel, sqlite-devel, mcpp, zlib-devel, python3")

# Note: By default automatic dependency detection is enabled by rpm generator.
# SET(CPACK_RPM_PACKAGE_AUTOREQPROV "no")
INCLUDE(CPack)
endif()
# Note: By default automatic dependency detection is enabled by rpm generator.
# SET(CPACK_RPM_PACKAGE_AUTOREQPROV "no")
INCLUDE(CPack)
endif()
endif()
endif()
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -6,6 +6,7 @@ domain-specific language for analysis problems.

[![License: UPL](https://img.shields.io/badge/License-UPL--1.0-blue.svg)](https://github.com/souffle-lang/souffle/blob/master/LICENSE)
[![CI-Tests](https://github.com/souffle-lang/souffle/actions/workflows/CI-Tests.yml/badge.svg)](https://github.com/souffle-lang/souffle/actions/workflows/CI-Tests.yml)
[![MSVC-CI-Tests](https://github.com/souffle-lang/souffle/actions/workflows/VS-CI-Tests.yml/badge.svg)](https://github.com/souffle-lang/souffle/actions/workflows/VS-CI-Tests.yml)
[![codecov](https://codecov.io/gh/souffle-lang/souffle/branch/master/graph/badge.svg)](https://codecov.io/gh/souffle-lang/souffle)

## Features of Soufflé
Expand Down
6 changes: 6 additions & 0 deletions choco-packages.config
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="winflexbison3"/>
<package id="sqlite"/>
<package id="cmake" version="3.21.3"/>
</packages>

0 comments on commit 4226e49

Please sign in to comment.