Skip to content

Commit aeeb39f

Browse files
committed
Do not define project(CBMC ...) twice to fix CMake failures
`project(P, ...)` sets the CMake variablee `P_SOURCE_DIR` to whichever directory that CMake file is in. We happen to rely on the value of `CBMC_SOURCE_DIR` in several places. Invoking `project(P, ...)` twice in different directories for the same value of `P` will cause hard-to-reproduce behaviour. Even though this duplication was in place ever since, 7949cac, we apparently got lucky until a few days ago. Now, however, we see sporadic failures on GitHub runners, such as https://github.com/diffblue/cbmc/actions/runs/10677152028/job/29591809621. GitHub's runner image notes do not point out any recent change to CMake, but it might as well be changes to the kernel's scheduler.
1 parent 27b845c commit aeeb39f

File tree

10 files changed

+23
-25
lines changed

10 files changed

+23
-25
lines changed

jbmc/regression/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
set(test_pl_path "${CBMC_SOURCE_DIR}/../regression/test.pl")
1+
set(test_pl_path "${CBMC_SOURCE_DIR}/regression/test.pl")
22

33
# For the best possible utilisation of multiple cores when
44
# running tests in parallel, it is important that these directories are

jbmc/src/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ macro(generic_includes name)
77
${JBMC_BINARY_DIR}
88
${JBMC_SOURCE_DIR}
99
${CBMC_BINARY_DIR}
10-
${CBMC_SOURCE_DIR}
10+
${CBMC_SOURCE_DIR}/src
1111
${CMAKE_CURRENT_BINARY_DIR}
1212
${CMAKE_CURRENT_SOURCE_DIR}
1313
${CUDD_INCLUDE}

jbmc/unit/CMakeLists.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
file(GLOB_RECURSE sources "*.cpp" "*.h")
2-
list(APPEND sources ${CBMC_SOURCE_DIR}/../unit/unit_tests.cpp)
2+
list(APPEND sources ${CBMC_SOURCE_DIR}/unit/unit_tests.cpp)
33

44
file(GLOB_RECURSE java-testing_utils "java-testing-utils/*.cpp" "java-testing-utils/*.h")
55

@@ -14,8 +14,8 @@ add_executable(java-unit ${sources})
1414
target_include_directories(java-unit
1515
PUBLIC
1616
${CBMC_BINARY_DIR}
17-
${CBMC_SOURCE_DIR}
18-
${CBMC_SOURCE_DIR}/../unit
17+
${CBMC_SOURCE_DIR}/src
18+
${CBMC_SOURCE_DIR}/unit
1919
${CMAKE_CURRENT_SOURCE_DIR}
2020
)
2121
target_link_libraries(java-unit

jbmc/unit/java-testing-utils/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ target_link_libraries(java-testing-utils
77
target_include_directories(java-testing-utils
88
PUBLIC
99
${CMAKE_CURRENT_SOURCE_DIR}/..
10-
${CBMC_SOURCE_DIR}/../unit
10+
${CBMC_SOURCE_DIR}/unit
1111
)

regression/libcprover-cpp/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ cprover_default_properties(api-binary-driver)
44
target_include_directories(api-binary-driver
55
PUBLIC
66
${CBMC_BINARY_DIR}
7-
${CBMC_SOURCE_DIR}
7+
${CBMC_SOURCE_DIR}/src
88
# TODO: Should be fixed for the proper include form.
99
${CMAKE_CURRENT_SOURCE_DIR}/../src/libcprover-cpp/)
1010
target_link_libraries(api-binary-driver goto-programs util langapi ansi-c cprover-api-cpp)
1111

1212
# Enable test running
13-
set(test_pl_path "${CBMC_SOURCE_DIR}/../regression/test.pl")
13+
set(test_pl_path "${CBMC_SOURCE_DIR}/regression/test.pl")
1414

1515
macro(add_test_pl_profile name cmdline flag profile)
1616
add_test(

src/CMakeLists.txt

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
project(CBMC VERSION ${CBMC_VERSION})
2-
31
find_package(BISON REQUIRED)
42
find_package(FLEX REQUIRED)
53

@@ -66,8 +64,8 @@ endmacro(generic_flex)
6664
macro(generic_includes name)
6765
target_include_directories(${name}
6866
PUBLIC
69-
${CBMC_BINARY_DIR}
70-
${CBMC_SOURCE_DIR}
67+
${CBMC_BINARY_DIR}/src
68+
${CBMC_SOURCE_DIR}/src
7169
${CMAKE_CURRENT_BINARY_DIR}
7270
${CMAKE_CURRENT_SOURCE_DIR}
7371
)

src/solvers/CMakeLists.txt

+8-8
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ list(REMOVE_ITEM sources
5959

6060
add_library(solvers ${sources})
6161

62-
include("${CBMC_SOURCE_DIR}/../cmake/DownloadProject.cmake")
62+
include("${CBMC_SOURCE_DIR}/cmake/DownloadProject.cmake")
6363

6464
foreach(SOLVER ${sat_impl})
6565
if("${SOLVER}" STREQUAL "minisat2")
@@ -70,8 +70,8 @@ foreach(SOLVER ${sat_impl})
7070
# to 2 times)
7171
download_project(PROJ minisat2
7272
URL http://ftp.debian.org/debian/pool/main/m/minisat2/minisat2_2.2.1.orig.tar.gz
73-
PATCH_COMMAND patch -p1 -i ${CBMC_SOURCE_DIR}/../scripts/minisat-2.2.1-patch
74-
COMMAND cmake -E copy ${CBMC_SOURCE_DIR}/../scripts/minisat2_CMakeLists.txt CMakeLists.txt
73+
PATCH_COMMAND patch -p1 -i ${CBMC_SOURCE_DIR}/scripts/minisat-2.2.1-patch
74+
COMMAND cmake -E copy ${CBMC_SOURCE_DIR}/scripts/minisat2_CMakeLists.txt CMakeLists.txt
7575
URL_MD5 27faa19ee0508660bd6fb7f894646d42
7676
)
7777

@@ -103,8 +103,8 @@ foreach(SOLVER ${sat_impl})
103103

104104
download_project(PROJ glucose
105105
URL https://github.com/BrunoDutertre/glucose-syrup/archive/0bb2afd3b9baace6981cbb8b4a1c7683c44968b7.tar.gz
106-
PATCH_COMMAND patch -p1 -i ${CBMC_SOURCE_DIR}/../scripts/glucose-syrup-patch
107-
COMMAND cmake -E copy ${CBMC_SOURCE_DIR}/../scripts/glucose_CMakeLists.txt CMakeLists.txt
106+
PATCH_COMMAND patch -p1 -i ${CBMC_SOURCE_DIR}/scripts/glucose-syrup-patch
107+
COMMAND cmake -E copy ${CBMC_SOURCE_DIR}/scripts/glucose_CMakeLists.txt CMakeLists.txt
108108
URL_MD5 7c539c62c248b74210aef7414787323a
109109
)
110110

@@ -122,8 +122,8 @@ foreach(SOLVER ${sat_impl})
122122

123123
download_project(PROJ cadical
124124
URL https://github.com/arminbiere/cadical/archive/rel-2.0.0.tar.gz
125-
PATCH_COMMAND patch -p1 -i ${CBMC_SOURCE_DIR}/../scripts/cadical-2.0.0-patch
126-
COMMAND cmake -E copy ${CBMC_SOURCE_DIR}/../scripts/cadical_CMakeLists.txt CMakeLists.txt
125+
PATCH_COMMAND patch -p1 -i ${CBMC_SOURCE_DIR}/scripts/cadical-2.0.0-patch
126+
COMMAND cmake -E copy ${CBMC_SOURCE_DIR}/scripts/cadical_CMakeLists.txt CMakeLists.txt
127127
COMMAND ./configure
128128
URL_MD5 9fc2a66196b86adceb822a583318cc35
129129
)
@@ -145,7 +145,7 @@ foreach(SOLVER ${sat_impl})
145145

146146
download_project(PROJ cadical
147147
URL https://github.com/arminbiere/cadical/archive/rel-2.0.0.tar.gz
148-
PATCH_COMMAND patch -p1 -i ${CBMC_SOURCE_DIR}/../scripts/cadical-2.0.0-patch
148+
PATCH_COMMAND patch -p1 -i ${CBMC_SOURCE_DIR}/scripts/cadical-2.0.0-patch
149149
COMMAND ./configure
150150
URL_MD5 9fc2a66196b86adceb822a583318cc35
151151
)

src/util/CMakeLists.txt

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ find_package(Git)
55
if(GIT_FOUND)
66
file(WRITE ${CMAKE_BINARY_DIR}/version.cmake
77
"
8-
file(STRINGS \${CBMC_SOURCE_DIR}/config.inc
8+
file(STRINGS \${SRC}/src/config.inc
99
config_inc_v REGEX \"CBMC_VERSION *= *[0-9\.]+\")
1010
string(REGEX REPLACE \"^CBMC_VERSION *= *\" \"\" CBMC_RELEASE \${config_inc_v})
1111
execute_process(
@@ -20,7 +20,7 @@ if(GIT_FOUND)
2020
else()
2121
file(WRITE ${CMAKE_BINARY_DIR}/version.cmake
2222
"
23-
file(STRINGS \${CBMC_SOURCE_DIR}/config.inc
23+
file(STRINGS \${SRC}/src/config.inc
2424
config_inc_v REGEX \"CBMC_VERSION *= *[0-9\.]+\")
2525
string(REGEX REPLACE \"^CBMC_VERSION *= *\" \"\" CBMC_RELEASE \${config_inc_v})
2626
set(GIT_INFO \"n/a\")
@@ -35,7 +35,7 @@ add_custom_target(
3535
generate_version_cpp
3636
BYPRODUCTS version.cpp
3737
COMMAND ${CMAKE_COMMAND}
38-
-D CBMC_SOURCE_DIR=${CBMC_SOURCE_DIR}
38+
-D SRC=${CBMC_SOURCE_DIR}
3939
-D CUR=${CMAKE_CURRENT_BINARY_DIR}
4040
-P ${CMAKE_BINARY_DIR}/version.cmake
4141
)

unit/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ add_executable(unit ${sources})
7575
target_include_directories(unit
7676
PUBLIC
7777
${CBMC_BINARY_DIR}
78-
${CBMC_SOURCE_DIR}
78+
${CBMC_SOURCE_DIR}/src
7979
${CMAKE_CURRENT_SOURCE_DIR}
8080
${CMAKE_CURRENT_BINARY_DIR}
8181
${CUDD_INCLUDE}

unit/libcprover-cpp/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ file(GLOB_RECURSE sources "*.cpp" "*.h")
44
add_executable(lib-unit ${sources})
55
target_include_directories(lib-unit
66
PUBLIC
7-
${CBMC_SOURCE_DIR}/libcprover-cpp
7+
${CBMC_SOURCE_DIR}/src/libcprover-cpp
88
)
99
target_link_libraries(lib-unit
1010
cprover-api-cpp

0 commit comments

Comments
 (0)