Skip to content

Commit dc133ee

Browse files
committed
Merge branch 'osx' into ci
2 parents cec85e3 + b39432a commit dc133ee

6 files changed

Lines changed: 52 additions & 12 deletions

File tree

.github/workflows/CI-Tests.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,7 @@ jobs:
158158
- name: cmake-test-64bit
159159
uses: ./.github/actions/cmake-test
160160
with:
161-
# disable openmp on ARM architecture, see souffle-lang/souffle#2476
162-
cmake-flags: -DSOUFFLE_DOMAIN_64BIT=ON -DSOUFFLE_USE_OPENMP=OFF
161+
cmake-flags: -DSOUFFLE_DOMAIN_64BIT=ON -DOpenMP_ROOT=/opt/homebrew/opt/libomp
163162
n-chunks: ${{ needs.Test-Setup.outputs.n-chunks }}
164163
chunk: ${{ matrix.chunk }}
165164

CMakeLists.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,26 @@ if (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
233233
message(STATUS "Found Flex keg installed by Homebrew at ${BREW_FLEX_PREFIX}")
234234
set(FLEX_EXECUTABLE "${BREW_FLEX_PREFIX}/bin/flex")
235235
endif()
236+
237+
# Xcode 15 needs the -ld_classic flag to be set. In Xcode 26 it is no longer
238+
# needed but does generate deprecation warnings.
239+
execute_process(
240+
COMMAND xcodebuild -version
241+
OUTPUT_VARIABLE XCODE_OUT
242+
ERROR_VARIABLE XCODE_ERR
243+
RESULT_VARIABLE XCODE_SUCCESS
244+
OUTPUT_STRIP_TRAILING_WHITESPACE
245+
)
246+
247+
if (XCODE_SUCCESS EQUAL 0)
248+
string(REGEX MATCH "Xcode[ ]+([0-9]+(\\.[0-9]+)+)" XCODE_VERSION "${XCODE_OUT}")
249+
set(XCODE_VERSION "${CMAKE_MATCH_1}")
250+
message(STATUS "Xcode version ${XCODE_VERSION} found")
251+
else()
252+
message(STATUS "xcodebuild -version failed. -ld_classic will not be used.")
253+
set(XCODE_VERSION "0")
254+
endif()
255+
236256
endif()
237257
find_package(FLEX REQUIRED)
238258
find_package(BISON "3.2" REQUIRED)
@@ -257,6 +277,9 @@ endif()
257277
# --------------------------------------------------
258278
if (SOUFFLE_USE_SQLITE)
259279
find_package(SQLite3 REQUIRED)
280+
if(NOT TARGET SQLite3::SQLite3) # CMake < 4.3
281+
add_library(SQLite3::SQLite3 ALIAS SQLite::SQLite3)
282+
endif()
260283
if (SOUFFLE_ENABLE_TESTING)
261284
find_program(SQLITE3_BINARY sqlite3 REQUIRED)
262285
endif()

sh/setup/install_macos_arm_deps.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ set -e
88
set -x
99

1010
# Install requirements of MAC OS X
11-
brew install libtool mcpp swig bison libffi
11+
brew install libtool mcpp swig bison libffi libomp
1212
#brew install gcc@13
1313
#brew link gcc@13
1414

sh/setup/install_macos_deps.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ set -e
88
set -x
99

1010
# Install requirements of MAC OS X
11-
brew install bison libtool mcpp libffi swig
11+
brew install bison libtool mcpp libffi swig libomp
1212
brew install gcc@12
1313
brew link gcc@12
1414

src/CMakeLists.txt

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -309,8 +309,8 @@ endif()
309309
if (SOUFFLE_USE_SQLITE)
310310
target_compile_definitions(libsouffle PUBLIC USE_SQLITE)
311311
target_compile_definitions(compiled PUBLIC USE_SQLITE)
312-
target_link_libraries(libsouffle PUBLIC SQLite::SQLite3)
313-
target_link_libraries(compiled PUBLIC SQLite::SQLite3)
312+
target_link_libraries(libsouffle PUBLIC SQLite3::SQLite3)
313+
target_link_libraries(compiled PUBLIC SQLite3::SQLite3)
314314
target_include_directories(compiled PUBLIC ${SQLite3_INCLUDE_DIRS})
315315
endif()
316316

@@ -440,12 +440,14 @@ endif (MSVC)
440440

441441
if (APPLE)
442442
if ("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "arm64")
443-
# work around a known issue with xcode15 linker
444-
# c++ exceptions handling is broken otherwise
445-
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -Wl,-ld_classic")
446-
target_link_options(libsouffle PUBLIC "-ld_classic")
447-
target_link_options(compiled PUBLIC "-ld_classic")
448-
target_link_options(souffleprof PUBLIC "-ld_classic")
443+
if (XCODE_VERSION VERSION_LESS "26" AND NOT XCODE_VERSION VERSION_LESS "15")
444+
# work around a known issue with xcode15 linker
445+
# c++ exceptions handling is broken otherwise
446+
set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -Wl,-ld_classic")
447+
target_link_options(libsouffle PUBLIC "-ld_classic")
448+
target_link_options(compiled PUBLIC "-ld_classic")
449+
target_link_options(souffleprof PUBLIC "-ld_classic")
450+
endif()
449451
endif()
450452
endif()
451453

@@ -474,6 +476,9 @@ endif()
474476

475477
if (OPENMP_FOUND)
476478
string(APPEND SOUFFLE_COMPILED_CXX_FLAGS " ${OpenMP_CXX_FLAGS}")
479+
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
480+
string(APPEND SOUFFLE_COMPILED_CXX_FLAGS " ${OpenMP_CXX_LIBRARIES}")
481+
endif()
477482
list(APPEND SOUFFLE_COMPILED_INCS ${OpenMP_CXX_INCLUDE_DIRS})
478483
endif()
479484

@@ -560,6 +565,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
560565
set(SOUFFLE_COMPILED_LINK_OPTIONS "/link ${SOUFFLE_COMPILED_LINK_OPTIONS}")
561566
endif ()
562567

568+
list(REMOVE_DUPLICATES SOUFFLE_COMPILED_RPATHS)
563569
list(JOIN SOUFFLE_COMPILED_RPATHS "${OS_PATH_DELIMITER}" SOUFFLE_COMPILED_RPATH_LIST)
564570

565571
list(TRANSFORM SOUFFLE_COMPILED_INCS PREPEND "-I")

tests/interface/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,19 @@ function(SOUFFLE_RUN_CPP_TEST)
2525
set(ADDITIONNAL_FLAGS)
2626

2727
if (OPENMP_FOUND)
28+
# CXX_FLAGS may be space separated, e.g., '-Xclang -fopenmp'
2829
list(APPEND ADDITIONNAL_FLAGS ${OpenMP_CXX_FLAGS})
30+
separate_arguments(ADDITIONNAL_FLAGS)
31+
32+
# AppleClang needs a little more help to find omp
33+
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
34+
if (NOT OpenMP_CXX_INCLUDE_DIRS STREQUAL "")
35+
list(APPEND ADDITIONNAL_FLAGS "-I${OpenMP_CXX_INCLUDE_DIRS}")
36+
endif()
37+
if (NOT OpenMP_CXX_LIBRARIES STREQUAL "")
38+
list(APPEND ADDITIONNAL_FLAGS "${OpenMP_CXX_LIBRARIES}")
39+
endif()
40+
endif()
2941
endif()
3042

3143
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")

0 commit comments

Comments
 (0)