You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
5.4 KiB
169 lines
5.4 KiB
|
|
# Original FindJulia.cmake from https://github.com/QuantStack/xtensor-julia-cookiecutter/blob/master/%7B%7Bcookiecutter.github_project_name%7D%7D/cmake/FindJulia.cmake |
|
if(Julia_FOUND) |
|
return() |
|
endif() |
|
|
|
#################### |
|
# Julia Executable # |
|
#################### |
|
|
|
find_program(Julia_EXECUTABLE julia DOC "Julia executable") |
|
|
|
################# |
|
# Julia Version # |
|
################# |
|
|
|
if(Julia_EXECUTABLE) |
|
message(STATUS "Found Julia executable: " ${Julia_EXECUTABLE}) |
|
|
|
execute_process( |
|
COMMAND "${Julia_EXECUTABLE}" --startup-file=no --version |
|
OUTPUT_VARIABLE Julia_VERSION_STRING |
|
) |
|
else() |
|
return() |
|
endif() |
|
|
|
string( |
|
REGEX REPLACE ".*([0-9]+\\.[0-9]+\\.[0-9]+).*" "\\1" |
|
Julia_VERSION_STRING "${Julia_VERSION_STRING}" |
|
) |
|
|
|
MESSAGE(STATUS "Julia_VERSION_STRING: ${Julia_VERSION_STRING}") |
|
|
|
################## |
|
# Julia Includes # |
|
################## |
|
|
|
set(JULIA_HOME_NAME "Sys.BINDIR") |
|
if(${Julia_VERSION_STRING} VERSION_LESS "0.7.0") |
|
set(JULIA_HOME_NAME "JULIA_HOME") |
|
else() |
|
set(USING_LIBDL "using Libdl") |
|
endif() |
|
|
|
if(DEFINED ENV{JULIA_INCLUDE_DIRS}) |
|
set(Julia_INCLUDE_DIRS $ENV{JULIA_INCLUDE_DIRS} |
|
CACHE STRING "Location of Julia include files") |
|
elseif(Julia_EXECUTABLE) |
|
execute_process( |
|
COMMAND ${Julia_EXECUTABLE} --startup-file=no -E "julia_include_dir = joinpath(match(r\"(.*)(bin)\",${JULIA_HOME_NAME}).captures[1],\"include\",\"julia\")\n |
|
if !isdir(julia_include_dir) # then we're running directly from build\n |
|
julia_base_dir_aux = splitdir(splitdir(${JULIA_HOME_NAME})[1])[1] # useful for running-from-build\n |
|
julia_include_dir = joinpath(julia_base_dir_aux, \"usr\", \"include\" )\n |
|
julia_include_dir *= \";\" * joinpath(julia_base_dir_aux, \"src\", \"support\" )\n |
|
julia_include_dir *= \";\" * joinpath(julia_base_dir_aux, \"src\" )\n |
|
end\n |
|
julia_include_dir" |
|
OUTPUT_VARIABLE Julia_INCLUDE_DIRS |
|
) |
|
|
|
string(REGEX REPLACE "\"" "" Julia_INCLUDE_DIRS "${Julia_INCLUDE_DIRS}") |
|
string(REGEX REPLACE "\n" "" Julia_INCLUDE_DIRS "${Julia_INCLUDE_DIRS}") |
|
set(Julia_INCLUDE_DIRS ${Julia_INCLUDE_DIRS} |
|
CACHE PATH "Location of Julia include files") |
|
elseif(Julia_PREFIX) |
|
set(Julia_INCLUDE_DIRS ${Julia_PREFIX}/include/julia) |
|
endif() |
|
MESSAGE(STATUS "Julia_INCLUDE_DIRS: ${Julia_INCLUDE_DIRS}") |
|
|
|
################### |
|
# Julia Libraries # |
|
################### |
|
|
|
if(WIN32) |
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .a) |
|
endif() |
|
|
|
if(Julia_EXECUTABLE) |
|
execute_process( |
|
COMMAND ${Julia_EXECUTABLE} --startup-file=no -E "${USING_LIBDL}\nabspath(Libdl.dlpath((ccall(:jl_is_debugbuild, Cint, ()) != 0) ? \"libjulia-debug\" : \"libjulia\"))" |
|
OUTPUT_VARIABLE Julia_LIBRARY |
|
) |
|
|
|
string(REGEX REPLACE "\"" "" Julia_LIBRARY "${Julia_LIBRARY}") |
|
string(REGEX REPLACE "\n" "" Julia_LIBRARY "${Julia_LIBRARY}") |
|
string(STRIP "${Julia_LIBRARY}" Julia_LIBRARY) |
|
|
|
if(WIN32) |
|
get_filename_component(Julia_LIBRARY_DIR ${Julia_LIBRARY} DIRECTORY) |
|
get_filename_component(Julia_LIBRARY_DIR ${Julia_LIBRARY_DIR} DIRECTORY) |
|
find_library(win_Julia_LIBRARY |
|
NAMES libjulia.dll.a |
|
PATHS "${Julia_LIBRARY_DIR}/lib" |
|
NO_DEFAULT_PATH |
|
) |
|
set(Julia_LIBRARY "${win_Julia_LIBRARY}") |
|
endif() |
|
|
|
set(Julia_LIBRARY "${Julia_LIBRARY}" |
|
CACHE PATH "Julia library") |
|
else() |
|
find_library(Julia_LIBRARY NAMES libjulia.${Julia_VERSION_STRING}.dylib julia libjulia libjulia.dll.a CMAKE_FIND_ROOT_PATH_BOTH) |
|
endif() |
|
|
|
get_filename_component(Julia_LIBRARY_DIR ${Julia_LIBRARY} DIRECTORY) |
|
|
|
MESSAGE(STATUS "Julia_LIBRARY_DIR: ${Julia_LIBRARY_DIR}") |
|
MESSAGE(STATUS "Julia_LIBRARY: ${Julia_LIBRARY}") |
|
|
|
############## |
|
# JULIA_HOME # |
|
############## |
|
|
|
if(Julia_EXECUTABLE) |
|
execute_process( |
|
COMMAND ${Julia_EXECUTABLE} --startup-file=no -E "${JULIA_HOME_NAME}" |
|
OUTPUT_VARIABLE JULIA_HOME |
|
) |
|
|
|
string(REGEX REPLACE "\"" "" JULIA_HOME "${JULIA_HOME}") |
|
string(REGEX REPLACE "\n" "" JULIA_HOME "${JULIA_HOME}") |
|
|
|
MESSAGE(STATUS "JULIA_HOME: ${JULIA_HOME}") |
|
|
|
################### |
|
# libLLVM version # |
|
################### |
|
|
|
execute_process( |
|
COMMAND ${Julia_EXECUTABLE} --startup-file=no -E "Base.libllvm_version" |
|
OUTPUT_VARIABLE Julia_LLVM_VERSION |
|
) |
|
|
|
string(REGEX REPLACE "\"" "" Julia_LLVM_VERSION "${Julia_LLVM_VERSION}") |
|
string(REGEX REPLACE "\n" "" Julia_LLVM_VERSION "${Julia_LLVM_VERSION}") |
|
|
|
MESSAGE(STATUS "Julia_LLVM_VERSION: ${Julia_LLVM_VERSION}") |
|
endif() |
|
|
|
################################## |
|
# Check for Existence of Headers # |
|
################################## |
|
|
|
find_path(Julia_MAIN_HEADER julia.h HINTS ${Julia_INCLUDE_DIRS}) |
|
|
|
####################################### |
|
# Determine if we are on 32 or 64 bit # |
|
####################################### |
|
|
|
if(Julia_EXECUTABLE) |
|
execute_process( |
|
COMMAND ${Julia_EXECUTABLE} --startup-file=no -E "Sys.WORD_SIZE" |
|
OUTPUT_VARIABLE Julia_WORD_SIZE |
|
) |
|
string(REGEX REPLACE "\n" "" Julia_WORD_SIZE "${Julia_WORD_SIZE}") |
|
MESSAGE(STATUS "Julia_WORD_SIZE: ${Julia_WORD_SIZE}") |
|
endif() |
|
|
|
########################### |
|
# FindPackage Boilerplate # |
|
########################### |
|
|
|
include(FindPackageHandleStandardArgs) |
|
find_package_handle_standard_args(Julia |
|
REQUIRED_VARS Julia_LIBRARY Julia_LIBRARY_DIR Julia_INCLUDE_DIRS Julia_MAIN_HEADER Julia_EXECUTABLE |
|
VERSION_VAR Julia_VERSION_STRING |
|
FAIL_MESSAGE "Julia not found" |
|
)
|
|
|