diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b5a32932..d630397f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -95,6 +95,9 @@ jobs: run: | mkdir -p build cd build + export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$LD_LIBRARY_PATH" + echo $LD_LIBRARY_PATH + find "$CONDA_PREFIX/include" cmake .. \ -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \ -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 50d05828..08299132 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,7 +123,7 @@ endif() find_package(argparse REQUIRED) find_package(pugixml REQUIRED) - +find_package(OpenMP) # Configuration # ============= @@ -135,8 +135,15 @@ function(configure_kernel kernel) set(XEUS_CPP_PATH "$ENV{PATH}") set(XEUS_CPP_LD_LIBRARY_PATH "$ENV{LD_LIBRARY_PATH}") set(XEUS_CPP_RESOURCE_DIR ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/clang/${CPPINTEROP_LLVM_VERSION_MAJOR}) - set(XEUS_CPP_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include) + set(XEUS_CPP_INCLUDE_DIR ${CMAKE_INSTALL_PREFIX}/include/) + + if(${kernel} MATCHES "omp/$") + set(XEUS_CPP_OMP "${OpenMP_CXX_FLAGS}") + endif() + message(Configure_Kernel "${kernel}") + message(CPP_OMP_FLAG "${XEUS_CPP_OMP}") + message(CPP_INCLUDE_DIR "${XEUS_CPP_INCLUDE_DIR}") if (WIN32) string(REPLACE "\\" "/" kernel "${kernel}") string(REPLACE "\\" "/" XEUS_CPP_PATH "${XEUS_CPP_PATH}") @@ -167,7 +174,9 @@ message("Configure kernels: ...") configure_kernel("/share/jupyter/kernels/xcpp11/") configure_kernel("/share/jupyter/kernels/xcpp14/") configure_kernel("/share/jupyter/kernels/xcpp17/") +configure_kernel("/share/jupyter/kernels/xcpp17-omp/") configure_kernel("/share/jupyter/kernels/xcpp20/") +configure_kernel("/share/jupyter/kernels/xcpp20-omp/") # Source files # ============ diff --git a/environment-dev.yml b/environment-dev.yml index 28348596..eccb9153 100644 --- a/environment-dev.yml +++ b/environment-dev.yml @@ -20,4 +20,5 @@ dependencies: - jupyter_kernel_test>=0.4.3 - nbval - pytest-rerunfailures - - doctest \ No newline at end of file + - doctest + - llvm-openmp diff --git a/share/jupyter/kernels/xcpp11/kernel.json.in b/share/jupyter/kernels/xcpp11/kernel.json.in index 1f4f73a6..05ac80b5 100644 --- a/share/jupyter/kernels/xcpp11/kernel.json.in +++ b/share/jupyter/kernels/xcpp11/kernel.json.in @@ -10,7 +10,7 @@ "{connection_file}", "-resource-dir", "@XEUS_CPP_RESOURCE_DIR@", "-I", "@XEUS_CPP_INCLUDE_DIR@", - "-std=c++11"@XEUS_CPP_OMP@ + "-std=c++11","@XEUS_CPP_OMP@" ], "language": "cpp", "metadata": {"debugger": false} diff --git a/share/jupyter/kernels/xcpp14/kernel.json.in b/share/jupyter/kernels/xcpp14/kernel.json.in index b6718dcf..35d7ce2a 100644 --- a/share/jupyter/kernels/xcpp14/kernel.json.in +++ b/share/jupyter/kernels/xcpp14/kernel.json.in @@ -13,7 +13,7 @@ "-std=c++14", "-fno-exceptions", "-O2", - "-v"@XEUS_CPP_OMP@ + "-v","@XEUS_CPP_OMP@" ], "language": "cpp", "metadata": {"debugger": false} diff --git a/share/jupyter/kernels/xcpp17-omp/kernel.json.in b/share/jupyter/kernels/xcpp17-omp/kernel.json.in index f74379f1..c3215c94 100644 --- a/share/jupyter/kernels/xcpp17-omp/kernel.json.in +++ b/share/jupyter/kernels/xcpp17-omp/kernel.json.in @@ -10,7 +10,7 @@ "{connection_file}", "-resource-dir", "@XEUS_CPP_RESOURCE_DIR@", "-I", "@XEUS_CPP_INCLUDE_DIR@", - "-std=c++17"@XEUS_CPP_OMP@ + "-std=c++17","@XEUS_CPP_OMP@" ], "language": "cpp", "metadata": {"debugger": false diff --git a/share/jupyter/kernels/xcpp17/kernel.json.in b/share/jupyter/kernels/xcpp17/kernel.json.in index ea76e2d9..efda6c85 100644 --- a/share/jupyter/kernels/xcpp17/kernel.json.in +++ b/share/jupyter/kernels/xcpp17/kernel.json.in @@ -10,7 +10,7 @@ "{connection_file}", "-resource-dir", "@XEUS_CPP_RESOURCE_DIR@", "-I", "@XEUS_CPP_INCLUDE_DIR@", - "-std=c++17"@XEUS_CPP_OMP@ + "-std=c++17","@XEUS_CPP_OMP@" ], "language": "cpp", "metadata": {"debugger": false diff --git a/share/jupyter/kernels/xcpp20-omp/kernel.json.in b/share/jupyter/kernels/xcpp20-omp/kernel.json.in new file mode 100644 index 00000000..604f2231 --- /dev/null +++ b/share/jupyter/kernels/xcpp20-omp/kernel.json.in @@ -0,0 +1,19 @@ +{ + "display_name": "C++20 (xcpp+OpenMP)", + "env": { + "PATH":"@XEUS_CPP_PATH@", + "LD_LIBRARY_PATH":"@XEUS_CPP_LD_LIBRARY_PATH@", + "CPLUS_INCLUDE_PATH":"@CMAKE_CPLUS_INCLUDE_PATH@" + }, + "argv": [ + "@XEUS_CPP_KERNELSPEC_PATH@xcpp", + "-f", + "{connection_file}", + "-resource-dir", "@XEUS_CPP_RESOURCE_DIR@", + "-I", "@XEUS_CPP_INCLUDE_DIR@", + "-std=c++20","@XEUS_CPP_OMP@" + ], + "language": "cpp", + "metadata": {"debugger": false + } +} diff --git a/share/jupyter/kernels/xcpp20-omp/logo-32x32.png b/share/jupyter/kernels/xcpp20-omp/logo-32x32.png new file mode 100644 index 00000000..c09c4585 Binary files /dev/null and b/share/jupyter/kernels/xcpp20-omp/logo-32x32.png differ diff --git a/share/jupyter/kernels/xcpp20-omp/logo-64x64.png b/share/jupyter/kernels/xcpp20-omp/logo-64x64.png new file mode 100644 index 00000000..396c2446 Binary files /dev/null and b/share/jupyter/kernels/xcpp20-omp/logo-64x64.png differ diff --git a/share/jupyter/kernels/xcpp20-omp/logo-svg.svg b/share/jupyter/kernels/xcpp20-omp/logo-svg.svg new file mode 100644 index 00000000..5e117077 --- /dev/null +++ b/share/jupyter/kernels/xcpp20-omp/logo-svg.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + diff --git a/share/jupyter/kernels/xcpp20/kernel.json.in b/share/jupyter/kernels/xcpp20/kernel.json.in index 3736754f..509e0326 100644 --- a/share/jupyter/kernels/xcpp20/kernel.json.in +++ b/share/jupyter/kernels/xcpp20/kernel.json.in @@ -10,7 +10,7 @@ "{connection_file}", "-resource-dir", "@XEUS_CPP_RESOURCE_DIR@", "-I", "@XEUS_CPP_INCLUDE_DIR@", - "-std=c++20"@XEUS_CPP_OMP@ + "-std=c++20","@XEUS_CPP_OMP@" ], "language": "cpp", "metadata": {"debugger": false diff --git a/test/test_xcpp_kernel.py b/test/test_xcpp_kernel.py index f6c470a9..814a7d41 100644 --- a/test/test_xcpp_kernel.py +++ b/test/test_xcpp_kernel.py @@ -70,7 +70,7 @@ def test_continuation(self) -> None: if platform.system() != 'Windows': class XCppTests(jupyter_kernel_test.KernelTests): - kernel_name = 'xcpp20' + kernel_name = 'xcpp20-omp' # language_info.name in a kernel_info_reply should match this language_name = 'C++' @@ -131,6 +131,17 @@ class XCppTests(jupyter_kernel_test.KernelTests): 'mime': 'image/png' } ] + code_omp=""" + #include + #include + #include + """ + def test_xcpp_omp(self): + self.flush_channels() + reply, output_msgs = self.execute_helper(code=self.code_omp,timeout=20) + self.assertEqual(output_msgs[0]['msg_type'], 'stream') + self.assertEqual(output_msgs[0]['content']['name'], 'stderr') + self.assertEqual(output_msgs[0]['content']['text'], '2') class XCppTests2(jupyter_kernel_test.KernelTests): @@ -145,4 +156,4 @@ class XCppTests2(jupyter_kernel_test.KernelTests): if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main()