Skip to content

Commit 266cd67

Browse files
authored
Merge pull request #240 from fabinsch/cmake-fix-find-openmp
cmake: fix path to find-external/OpenMP
2 parents 1a1b547 + 85b0309 commit 266cd67

File tree

4 files changed

+46
-17
lines changed

4 files changed

+46
-17
lines changed

.github/workflows/ci-linux-osx-win-conda.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,18 @@ jobs:
119119
shell: bash -l {0}
120120
run: |
121121
echo $(where ccache)
122+
ls C:\\Miniconda3\\envs\\proxsuite\\Library\\lib
122123
git submodule update --init
123124
mkdir build
124125
cd build
125-
cmake .. -G"Visual Studio 16 2019" -T "ClangCl" -DCMAKE_GENERATOR_PLATFORM=x64 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX}/Library -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DBUILD_PYTHON_INTERFACE:BOOL=ON -DPYTHON_SITELIB=${CONDA_PREFIX}/Lib/site-packages -DPYTHON_EXECUTABLE=${CONDA_PREFIX}/python.exe -DOpenMP_ROOT=$CONDA_PREFIX -DBUILD_WITH_OPENMP_SUPPORT:BOOL=OFF -DLINK_PYTHON_INTERFACE_TO_OPENMP:BOOL=ON -DBUILD_DOCUMENTATION:BOOL=ON -DINSTALL_DOCUMENTATION:BOOL=ON
126+
cmake .. -G"Visual Studio 16 2019" -T "ClangCl" -DCMAKE_GENERATOR_PLATFORM=x64 -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX}/Library -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DBUILD_PYTHON_INTERFACE:BOOL=ON -DPYTHON_SITELIB=${CONDA_PREFIX}/Lib/site-packages -DPYTHON_EXECUTABLE=${CONDA_PREFIX}/python.exe -DOpenMP_ROOT=$CONDA_PREFIX -DBUILD_WITH_OPENMP_SUPPORT:BOOL=ON -DLINK_PYTHON_INTERFACE_TO_OPENMP:BOOL=ON -DBUILD_DOCUMENTATION:BOOL=ON -DINSTALL_DOCUMENTATION:BOOL=ON
126127
127128
- name: Configure [Conda/Windows-latest]
128129
if: contains(matrix.os, 'windows-latest')
129130
shell: bash -l {0}
130131
run: |
131132
echo $(where ccache)
133+
ls C:\\Miniconda3\\envs\\proxsuite\\Library\\lib
132134
git submodule update --init
133135
mkdir build
134136
cd build

CMakeLists.txt

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,12 @@ project(${PROJECT_NAME} ${PROJECT_ARGS})
4848

4949
include(${CMAKE_CURRENT_LIST_DIR}/cmake-module/ide.cmake)
5050
include(${CMAKE_CURRENT_LIST_DIR}/cmake-module/apple.cmake)
51-
if(APPLE OR WIN32) # Use the handmade approach
52-
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/find-external/OpenMP
53-
${CMAKE_MODULE_PATH})
54-
elseif(UNIX)
55-
if(${CMAKE_VERSION} VERSION_GREATER "3.20.0" OR ${CMAKE_VERSION}
56-
VERSION_EQUAL "3.20.0")
57-
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/find-external/OpenMP
58-
${CMAKE_MODULE_PATH})
59-
endif()
60-
endif(APPLE OR WIN32)
51+
52+
if(NOT ${CMAKE_VERSION} VERSION_GREATER "3.26.0" OR WIN32)
53+
set(CMAKE_MODULE_PATH
54+
${CMAKE_CURRENT_LIST_DIR}/cmake-module/find-external/OpenMP
55+
${CMAKE_MODULE_PATH})
56+
endif()
6157
include(${CMAKE_CURRENT_LIST_DIR}/cmake-module/julia.cmake)
6258
include(CMakeDependentOption)
6359

bindings/python/CMakeLists.txt

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,44 @@ add_header_group(PYWRAP_HEADERS)
130130
add_source_group(PYWRAP_SOURCES)
131131

132132
# --- INSTALL SCRIPTS
133-
set(PYTHON_FILES __init__.py)
134133

135-
foreach(python ${PYTHON_FILES})
136-
python_build(${PROJECT_NAME} ${python})
137-
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/proxsuite/${python}"
134+
# On Windows, we need to enforce the environment variable KMP_DUPLICATE_LIB_OK
135+
# to True to to allow the program to continue to execute with OpenMP support
136+
if(WIN32
137+
AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang"
138+
AND BUILD_WITH_OPENMP_SUPPORT)
139+
set(OPENMP_KMP_DUPLICATE_LIB_OK_SCRIPT
140+
"import os\n" "os.environ[\"KMP_DUPLICATE_LIB_OK\"] = \"1\"\n\n")
141+
142+
if(CMAKE_GENERATOR MATCHES "Visual Studio|Xcode")
143+
set(PYTHON_MODULE_DIR "${CMAKE_CURRENT_BINARY_DIR}/proxsuite/$<CONFIG>")
144+
else()
145+
set(PYTHON_MODULE_DIR "${CMAKE_CURRENT_BINARY_DIR}/proxsuite")
146+
endif()
147+
148+
set(original_init_dot_py_file ${CMAKE_CURRENT_LIST_DIR}/proxsuite/__init__.py)
149+
set(generated_init_dot_py_file
150+
${CMAKE_CURRENT_BINARY_DIR}/proxsuite/__init__.py)
151+
set(generated_init_dot_pyc_file ${PYTHON_MODULE_DIR}/__init__.pyc)
152+
153+
# Copy content of the __init__.py file
154+
file(READ ${original_init_dot_py_file} INIT_CONTENT)
155+
# Create a new __init__.py file containing both the content of __init__.py
156+
# prepended with the OPENMP_KMP_DUPLICATE_LIB_OK_SCRIPT content
157+
file(WRITE ${generated_init_dot_py_file}
158+
${OPENMP_KMP_DUPLICATE_LIB_OK_SCRIPT})
159+
file(APPEND ${generated_init_dot_py_file} ${INIT_CONTENT})
160+
161+
python_build_file(${generated_init_dot_py_file}
162+
${generated_init_dot_pyc_file})
163+
install(FILES "${generated_init_dot_py_file}"
164+
DESTINATION ${${PYWRAP}_INSTALL_DIR})
165+
166+
else()
167+
python_build(${PROJECT_NAME} __init__.py)
168+
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/proxsuite/__init__.py"
138169
DESTINATION ${${PYWRAP}_INSTALL_DIR})
139-
endforeach(python)
170+
endif()
140171

141172
python_build_get_target(compile_pyc)
142173
add_dependencies(python ${compile_pyc})

0 commit comments

Comments
 (0)