Skip to content

Commit 6504b33

Browse files
committed
Merge branch 'release-2.7.0'
2 parents 6fee210 + f6a1e53 commit 6504b33

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+1233
-1459
lines changed

.github/workflows/smack-ci.yaml

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,10 @@ on: [push, pull_request]
44

55
jobs:
66
check-regressions:
7-
env:
8-
COMPILER_NAME: clang
9-
COMPILER: clang++
10-
CXX: clang++
11-
CC: clang
127
runs-on: ubuntu-20.04
138
strategy:
149
matrix:
15-
travis_env:
10+
regtest_env:
1611
[
1712
"--exhaustive --folder=c/basic",
1813
"--exhaustive --folder=c/data",
@@ -37,7 +32,9 @@ jobs:
3732
"--exhaustive --folder=rust/panic --languages=rust",
3833
"--exhaustive --folder=rust/recursion --languages=rust",
3934
"--exhaustive --folder=rust/structures --languages=rust",
40-
"--exhaustive --folder=rust/vector --languages=rust"
35+
"--exhaustive --folder=rust/vector --languages=rust",
36+
"--exhaustive --folder=rust/cargo/** --languages=cargo --threads=1",
37+
"--exhaustive --folder=llvm --languages=llvm-ir"
4138
]
4239
steps:
4340
- uses: actions/checkout@v2
@@ -47,20 +44,58 @@ jobs:
4744
GITHUB_ACTIONS: true
4845
run: INSTALL_DEV_DEPENDENCIES=1 INSTALL_RUST=1 ./bin/build.sh
4946

50-
- run: python3 --version
51-
- run: $CXX --version
52-
- run: $CC --version
53-
- run: clang --version
54-
- run: clang++ --version
55-
- run: llvm-link --version
56-
- run: llvm-config --version
57-
5847
- name: format checking
5948
run: |
6049
./format/run-clang-format.py -r lib/smack include/smack tools share/smack/include share/smack/lib test examples
6150
flake8 test/regtest.py share/smack/ --extend-exclude share/smack/svcomp/,share/smack/reach.py
62-
51+
6352
- name: compile and test
6453
env:
65-
TRAVIS_ENV: ${{ matrix.travis_env }}
54+
REGTEST_ENV: ${{ matrix.regtest_env }}
6655
run: ./bin/build.sh
56+
57+
build-and-push-docker:
58+
runs-on: ubuntu-20.04
59+
needs: check-regressions
60+
61+
steps:
62+
- name: Check Out Repo
63+
uses: actions/checkout@v2
64+
65+
- name: Login to Docker Hub
66+
uses: docker/login-action@v1
67+
with:
68+
username: ${{ secrets.DOCKER_HUB_USERNAME }}
69+
password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
70+
71+
- name: Set up Docker Buildx
72+
id: buildx
73+
uses: docker/setup-buildx-action@v1
74+
75+
# borrowed from:
76+
# https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions/58035262
77+
- name: Extract branch name
78+
shell: bash
79+
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
80+
id: extract_branch
81+
82+
- name: Set tag name
83+
shell: bash
84+
id: set_tag
85+
run: |
86+
if [ ${{ steps.extract_branch.outputs.branch }} == 'master' ]; then echo "##[set-output name=docker_tag;]$(echo stable)" && exit 0; fi
87+
if [ ${{ steps.extract_branch.outputs.branch }} == 'develop' ]; then echo "##[set-output name=docker_tag;]$(echo latest)" && exit 0; fi
88+
echo "##[set-output name=docker_tag;]$(echo none)"
89+
90+
- name: Build and push
91+
if: ${{ steps.set_tag.outputs.docker_tag != 'none' }}
92+
id: docker_build
93+
uses: docker/build-push-action@v2
94+
with:
95+
context: ./
96+
file: ./Dockerfile
97+
push: true
98+
tags: smackers/smack:${{ steps.set_tag.outputs.docker_tag }}
99+
100+
- name: Image digest
101+
run: echo ${{ steps.docker_build.outputs.digest }}

CMakeLists.txt

Lines changed: 43 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,20 @@
55
cmake_minimum_required(VERSION 3.4.3)
66
project(smack)
77

8-
if (NOT WIN32 OR MSYS OR CYGWIN)
8+
if(NOT WIN32 OR MSYS OR CYGWIN)
99

10-
file(STRINGS "bin/versions" LLVM_VERSION_STR REGEX "LLVM_SHORT_VERSION=\"[0-9]+\"")
10+
file(STRINGS "bin/versions" LLVM_VERSION_STR
11+
REGEX "LLVM_FULL_VERSION=\"[0-9]+\.[0-9]+\.[0-9]+")
12+
string(REGEX MATCH "[0-9]+\.[0-9]+" LLVM_EXTENDED_VERSION "${LLVM_VERSION_STR}")
13+
14+
file(STRINGS "bin/versions" LLVM_VERSION_STR
15+
REGEX "LLVM_SHORT_VERSION=\"[0-9]+")
1116
string(REGEX MATCH "[0-9]+" LLVM_SHORT_VERSION "${LLVM_VERSION_STR}")
1217

13-
find_program(LLVM_CONFIG_EXECUTABLE NAMES llvm-config-${LLVM_SHORT_VERSION} llvm-config PATHS ${LLVM_CONFIG} DOC "llvm-config")
18+
find_program(LLVM_CONFIG_EXECUTABLE NAMES llvm-config-${LLVM_SHORT_VERSION}
19+
llvm-config PATHS ${LLVM_CONFIG} DOC "llvm-config")
1420

15-
if (LLVM_CONFIG_EXECUTABLE STREQUAL "LLVM_CONFIG_EXECUTABLE-NOTFOUND")
21+
if(LLVM_CONFIG_EXECUTABLE STREQUAL "LLVM_CONFIG_EXECUTABLE-NOTFOUND")
1622
message(FATAL_ERROR "llvm-config could not be found!")
1723
endif()
1824

@@ -22,36 +28,12 @@ if (NOT WIN32 OR MSYS OR CYGWIN)
2228
OUTPUT_STRIP_TRAILING_WHITESPACE
2329
)
2430

25-
# TODO: explain why these are required.
26-
string(REPLACE "-DNDEBUG" "" LLVM_CXXFLAGS "${LLVM_CXXFLAGS}")
27-
string(REPLACE "-Wno-maybe-uninitialized" "" LLVM_CXXFLAGS "${LLVM_CXXFLAGS}")
28-
string(REPLACE "-fuse-ld=gold" "" LLVM_CXXFLAGS "${LLVM_CXXFLAGS}")
29-
string(REPLACE "--no-keep-files-mapped" "" LLVM_CXXFLAGS "${LLVM_CXXFLAGS}")
30-
string(REPLACE "--no-map-whole-files" "" LLVM_CXXFLAGS "${LLVM_CXXFLAGS}")
31-
string(REPLACE "-Wl," "" LLVM_CXXFLAGS "${LLVM_CXXFLAGS}")
32-
string(REPLACE "-gsplit-dwarf" "" LLVM_CXXFLAGS "${LLVM_CXXFLAGS}")
33-
string(REGEX REPLACE "-O[0-9]" "" CMAKE_CXX_FLAGS "${LLVM_CXXFLAGS}")
34-
35-
# TODO: append these one at a time; give rationale.
36-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions -fno-rtti -Wno-undefined-var-template")
37-
38-
# Apparently avoids a problem with inconsistent visibility settings from LLVM:
39-
#
40-
# > ld: warning: direct access in function 'llvm::_'
41-
# > from file '/usr/local/opt/llvm@8/lib/_'
42-
# > to global weak symbol 'llvm::_'
43-
# > from file 'libsmackTranslator.a(_.cpp.o)'
44-
# > means the weak symbol cannot be overridden at runtime.
45-
# > This was likely caused by different translation units being compiled
46-
# > with different visibility settings.
47-
#
48-
# Solution found on Stack Overflow:
49-
# https://stackoverflow.com/questions/8685045/xcode-with-boost-linkerid-warning-about-visibility-settings
50-
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -fvisibility=hidden")
51-
52-
# TODO: explain why these are required.
53-
string(APPEND CMAKE_CXX_FLAGS_DEBUG " -O0")
54-
string(APPEND CMAKE_C_FLAGS_DEBUG " -O0")
31+
# SMACK doesn't catch or throw exceptions, so -fno-exceptions is justified.
32+
# SMACK doesn't use C++ runtime type identification features, so -fno-rtti
33+
# is justified.
34+
# Shaobo: enable O3 so SMACK can save some time.
35+
set(CMAKE_CXX_FLAGS
36+
"${LLVM_CXXFLAGS} -fno-exceptions -fno-rtti -O3")
5537

5638
execute_process(
5739
COMMAND ${LLVM_CONFIG_EXECUTABLE} --libs
@@ -76,12 +58,12 @@ else()
7658
set(LLVM_BUILD "" CACHE PATH "LLVM build directory")
7759
set(LLVM_BUILD_TYPE "" CACHE STRING "LLVM build type")
7860

79-
if (NOT EXISTS "${LLVM_SRC}/include/llvm")
61+
if(NOT EXISTS "${LLVM_SRC}/include/llvm")
8062
message(FATAL_ERROR "Invalid LLVM source directory: ${LLVM_SRC}")
8163
endif()
8264

8365
set(LLVM_LIBDIR "${LLVM_BUILD}/lib/${LLVM_BUILD_TYPE}")
84-
if (NOT EXISTS "${LLVM_LIBDIR}")
66+
if(NOT EXISTS "${LLVM_LIBDIR}")
8567
message(FATAL_ERROR "Invalid LLVM build directory: ${LLVM_BUILD}")
8668
endif()
8769

@@ -92,7 +74,11 @@ else()
9274
set(CMAKE_CXX_FLAGS "\"/I${LLVM_SRC}/include\" \"/I${LLVM_BUILD}/include\" -D_SCL_SECURE_NO_WARNINGS -wd4146 -wd4244 -wd4355 -wd4482 -wd4800")
9375

9476
set(LLVM_LDFLAGS "")
95-
set(LLVM_LIBS "${LLVM_LIBDIR}/LLVMTransformUtils.lib" "${LLVM_LIBDIR}/LLVMipa.lib" "${LLVM_LIBDIR}/LLVMAnalysis.lib" "${LLVM_LIBDIR}/LLVMTarget.lib" "${LLVM_LIBDIR}/LLVMMC.lib" "${LLVM_LIBDIR}/LLVMObject.lib" "${LLVM_LIBDIR}/LLVMBitReader.lib" "${LLVM_LIBDIR}/LLVMCore.lib" "${LLVM_LIBDIR}/LLVMSupport.lib")
77+
set(LLVM_LIBS "${LLVM_LIBDIR}/LLVMTransformUtils.lib"
78+
"${LLVM_LIBDIR}/LLVMipa.lib" "${LLVM_LIBDIR}/LLVMAnalysis.lib"
79+
"${LLVM_LIBDIR}/LLVMTarget.lib" "${LLVM_LIBDIR}/LLVMMC.lib"
80+
"${LLVM_LIBDIR}/LLVMObject.lib" "${LLVM_LIBDIR}/LLVMBitReader.lib"
81+
"${LLVM_LIBDIR}/LLVMCore.lib" "${LLVM_LIBDIR}/LLVMSupport.lib")
9682

9783
endif()
9884

@@ -170,13 +156,17 @@ add_executable(llvm2bpl
170156
)
171157

172158
# We need to include Boost header files at least for macOS
173-
find_package (Boost 1.55)
174-
if (Boost_FOUND)
175-
include_directories (${Boost_INCLUDE_DIRS})
176-
endif ()
159+
find_package(Boost 1.55)
160+
if(Boost_FOUND)
161+
include_directories(${Boost_INCLUDE_DIRS})
162+
endif()
177163
# We have to import LLVM's cmake definitions to build sea-dsa
178164
# Borrowed from sea-dsa's CMakeLists.txt
179-
find_package (LLVM ${LLVM_SHORT_VERSION} CONFIG)
165+
# Borrowed from https://github.com/banach-space/llvm-tutor/commit/72cb20d058b9b3f51717c7a17607f7a4c7398642
166+
find_package (LLVM ${LLVM_EXTENDED_VERSION} REQUIRED CONFIG)
167+
if (NOT ${LLVM_SHORT_VERSION} VERSION_EQUAL "${LLVM_VERSION_MAJOR}")
168+
message(FATAL_ERROR "Found LLVM ${LLVM_VERSION_MAJOR}, but need ${LLVM_SHORT_VERSION}")
169+
endif ()
180170
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
181171
include(AddLLVM)
182172
include(HandleLLVMOptions)
@@ -188,14 +178,15 @@ set(CMAKE_BUILD_TYPE "Release")
188178
add_subdirectory(sea-dsa/lib/seadsa)
189179
set(CMAKE_BUILD_TYPE ${SMACK_BUILD_TYPE})
190180

191-
target_link_libraries(smackTranslator ${LLVM_LIBS} ${LLVM_SYSTEM_LIBS} ${LLVM_LDFLAGS})
181+
target_link_libraries(smackTranslator ${LLVM_LIBS} ${LLVM_SYSTEM_LIBS}
182+
${LLVM_LDFLAGS})
192183
target_link_libraries(llvm2bpl smackTranslator utils SeaDsaAnalysis)
193184

194-
INSTALL(TARGETS llvm2bpl
185+
install(TARGETS llvm2bpl
195186
RUNTIME DESTINATION bin
196187
)
197188

198-
INSTALL(FILES
189+
install(FILES
199190
${CMAKE_CURRENT_SOURCE_DIR}/bin/smack
200191
${CMAKE_CURRENT_SOURCE_DIR}/bin/smack-doctor
201192
${CMAKE_CURRENT_SOURCE_DIR}/bin/smack-svcomp-wrapper.sh
@@ -204,30 +195,31 @@ INSTALL(FILES
204195
DESTINATION bin
205196
)
206197

207-
INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/share/smack
198+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/share/smack
208199
DESTINATION share
209200
USE_SOURCE_PERMISSIONS
210-
FILES_MATCHING PATTERN "*.py" PATTERN "*.h" PATTERN "*.c" PATTERN "Makefile" PATTERN "*.rs" PATTERN "*.f90" PATTERN "*.di" PATTERN "*.toml"
201+
FILES_MATCHING PATTERN "*.py" PATTERN "*.h" PATTERN "*.c" PATTERN "Makefile"
202+
PATTERN "*.rs" PATTERN "*.f90" PATTERN "*.di" PATTERN "*.toml"
211203
)
212204

213-
INSTALL(FILES
205+
install(FILES
214206
${CMAKE_CURRENT_SOURCE_DIR}/bin/versions
215207
DESTINATION share/smack
216208
RENAME versions.py
217209
)
218210

219-
INSTALL(FILES
211+
install(FILES
220212
${CMAKE_CURRENT_SOURCE_DIR}/share/smack/lib/smack/Cargo.toml
221213
${CMAKE_CURRENT_SOURCE_DIR}/share/smack/lib/smack/build.rs
222214
DESTINATION share/smack/lib
223215
)
224216

225-
INSTALL(FILES
217+
install(FILES
226218
${CMAKE_CURRENT_SOURCE_DIR}/share/smack/lib/smack-rust.c
227219
DESTINATION share/smack/lib/src
228220
)
229221

230-
INSTALL(FILES
222+
install(FILES
231223
${CMAKE_CURRENT_SOURCE_DIR}/share/smack/lib/smack.rs
232224
DESTINATION share/smack/lib/src
233225
RENAME lib.rs

Dockerfile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
FROM ubuntu:18.04
2-
MAINTAINER Shaobo He <[email protected]>
1+
FROM ubuntu:20.04
2+
MAINTAINER Shaobo He <[email protected]>
33

44
ENV SMACKDIR /home/user/smack
55

66
RUN apt-get update && \
77
apt-get -y install \
88
software-properties-common \
99
wget \
10-
sudo
10+
sudo \
11+
g++
1112

1213
# Borrowed from JFS
1314
# Create `user` user for container with password `user`. and give it
@@ -26,7 +27,7 @@ ADD --chown=user . $SMACKDIR
2627
WORKDIR $SMACKDIR
2728

2829
# Build SMACK
29-
RUN sudo bin/build.sh
30+
RUN bin/build.sh
3031

3132
# Add envinronment
3233
RUN echo "source /home/user/smack.environment" >> ~/.bashrc

Doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#---------------------------------------------------------------------------
66
DOXYFILE_ENCODING = UTF-8
77
PROJECT_NAME = smack
8-
PROJECT_NUMBER = 2.6.3
8+
PROJECT_NUMBER = 2.7.0
99
PROJECT_BRIEF = "A bounded software verifier."
1010
PROJECT_LOGO =
1111
OUTPUT_DIRECTORY = docs

LICENSE

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
The MIT License
22

3-
Copyright (c) 2008-2020 Zvonimir Rakamaric ([email protected]),
3+
Copyright (c) 2008-2021 Zvonimir Rakamaric ([email protected]),
44
Michael Emmi ([email protected])
5-
Modified work Copyright (c) 2013-2020 Marek Baranowski,
5+
Modified work Copyright (c) 2013-2021 Marek Baranowski,
66
Montgomery Carter,
77
Pantazis Deligiannis,
88
Jack J. Garzella,

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ See below for system requirements, installation, usage, and everything else.
4848
### Acknowledgements
4949

5050
SMACK project has been partially supported by funding from the National Science
51-
Foundation, VMware, and Microsoft Research. We also rely on University of
51+
Foundation, VMware, Amazon, and Microsoft Research. We also rely on University of
5252
Utah's [Emulab](http://www.emulab.net/) infrastructure for extensive
5353
benchmarking of SMACK.
5454

Vagrantfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ Vagrant.configure(2) do |config|
2626
# end
2727

2828
config.vm.provision "shell", binary: true, privileged: false, inline: <<-SHELL
29-
apt-get update
30-
apt-get install -y software-properties-common
29+
sudo apt update
30+
sudo apt install -y build-essential
3131
cd /home/vagrant
3232
./#{project_name}/bin/build.sh
3333
echo source smack.environment >> .bashrc

0 commit comments

Comments
 (0)