diff --git a/c++/CMakeLists.txt b/c++/CMakeLists.txt index 308d59efeec71b88a25296778622f103468a9229..fb9588b7334eb0ead27d45517df83bc585b77bc7 100644 --- a/c++/CMakeLists.txt +++ b/c++/CMakeLists.txt @@ -6,11 +6,53 @@ set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++20") -# julia -# TODO: use JULIA_BINDIR -# with -# ${JULIA_BINDIR}/../lib -# ${JULIA_BINDIR}/../include/ +# find `julia` command +if(NOT DEFINED JULIA_BIN) + find_program(JULIA_BIN julia) + if(NOT JULIA_BIN) + message(FATAL_ERROR "Julia binary not found. Please set the JULIA_BIN variable.") + endif() +endif() + +# Find Julia's shared directory +execute_process( + COMMAND ${JULIA_BIN} -e "print(joinpath(Sys.BINDIR, Base.DATAROOTDIR, \"julia\"))" + OUTPUT_VARIABLE JL_SHAREDIR +) + +# Get flags from julia-config.jl +execute_process( + COMMAND ${JL_SHAREDIR}/julia-config.jl --cflags + OUTPUT_VARIABLE JULIA_CFLAGS +) +execute_process( + COMMAND ${JL_SHAREDIR}/julia-config.jl --cflags + OUTPUT_VARIABLE JULIA_CXXFLAGS +) +execute_process( + COMMAND ${JL_SHAREDIR}/julia-config.jl --ldflags + OUTPUT_VARIABLE JULIA_LDFLAGS +) +execute_process( + COMMAND ${JL_SHAREDIR}/julia-config.jl --ldlibs + OUTPUT_VARIABLE JULIA_LDLIBS +) + +# Strip any leading/trailing whitespace from the flags +string(STRIP "${JULIA_CFLAGS}" JULIA_CFLAGS) +string(STRIP "${JULIA_CXXFLAGS}" JULIA_CXXFLAGS) +string(STRIP "${JULIA_LDFLAGS}" JULIA_LDFLAGS) +string(STRIP "${JULIA_LDLIBS}" JULIA_LDLIBS) + +# Set the flags +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${JULIA_CFLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${JULIA_CXXFLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${JULIA_LDFLAGS}") +set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${JULIA_LDFLAGS}") +# Link the libraries +#target_link_libraries(${PROJECT_NAME} ${JULIA_LDLIBS}) + + set(JULIA_DIR "" CACHE PATH "Base directory where julia lib/ and include/ directories are located") find_library(JULIA_LIB NAMES julia HINTS ${JULIA_DIR}/lib) if(NOT JULIA_LIB)