aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorArun Isaac2021-02-10 14:25:53 +0530
committerArun Isaac2021-02-10 14:53:45 +0530
commit7b74734e6b9356cf4208950ba254b75d756aec5b (patch)
treefa11af8ed06a289e5d9c175e27f360e6f834f7b9 /CMakeLists.txt
parente3cdcaf807ff3833f2a9ef642301bcaa3172a8ad (diff)
downloadnsmc-7b74734e6b9356cf4208950ba254b75d756aec5b.tar.gz
nsmc-7b74734e6b9356cf4208950ba254b75d756aec5b.tar.lz
nsmc-7b74734e6b9356cf4208950ba254b75d756aec5b.zip
Add scheme wrapper.
* scm/extent-sampling/load-libs.scm.in, scm/extent-sampling/wrap.scm: New files. * CMakeLists.txt: Check for guile. Build and install scheme wrapper. (change_extension): New function.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt32
1 files changed, 32 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 935c3b3..beae2ff 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,6 +4,15 @@ project(extent-sampling VERSION 0.1.0)
find_package(GSL REQUIRED)
find_program(SC NAMES sc REQUIRED)
find_program(INDENT NAMES indent)
+# TODO: Maybe, support other versions of guile such as 2.2.
+pkg_check_modules(GUILE guile-3.0)
+pkg_get_variable(GUILD guile-3.0 guild)
+
+function(change_extension var filename extension)
+ get_filename_component(basename ${filename} NAME_WE)
+ get_filename_component(dirname ${filename} DIRECTORY)
+ set(${var} ${dirname}/${basename}.${extension} PARENT_SCOPE)
+endfunction()
# Generate C source files from SC source files, and optionally indent
# them.
@@ -37,3 +46,26 @@ set_target_properties(extentsampling PROPERTIES
PUBLIC_HEADER "include/extent-sampling.h;include/gaussian-nd-random.h;include/nd-random.h;include/oracles.h")
install(TARGETS extentsampling LIBRARY
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/extent-sampling)
+
+# Build and install scheme wrapper.
+if(${GUILE_FOUND})
+ configure_file(scm/extent-sampling/load-libs.scm.in scm/extent-sampling/load-libs.scm)
+ set(SCM_WRAPPER_PATH scm/extent-sampling/wrap.scm)
+ change_extension(SCM_WRAPPER_GO_PATH ${SCM_WRAPPER_PATH} go)
+ add_custom_command(
+ OUTPUT ${SCM_WRAPPER_GO_PATH}
+ COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/${SCM_WRAPPER_PATH} ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_PATH}
+ COMMAND ${GUILD} compile ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_PATH} -o ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_GO_PATH}
+ DEPENDS ${SCM_WRAPPER_PATH}
+ VERBATIM)
+ add_custom_target(scheme ALL DEPENDS ${SCM_WRAPPER_GO_PATH})
+ string(REPLACE "." ";" GUILE_VERSION_LIST ${GUILE_VERSION})
+ list(GET GUILE_VERSION_LIST 0 GUILE_MAJOR_VERSION)
+ list(GET GUILE_VERSION_LIST 1 GUILE_MINOR_VERSION)
+ install(FILES ${CMAKE_BINARY_DIR}/scm/extent-sampling/load-libs.scm
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/guile/site/${GUILE_MAJOR_VERSION}.${GUILE_MINOR_VERSION}/extent-sampling)
+ install(FILES ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_PATH}
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/guile/site/${GUILE_MAJOR_VERSION}.${GUILE_MINOR_VERSION}/extent-sampling)
+ install(FILES ${CMAKE_BINARY_DIR}/${SCM_WRAPPER_GO_PATH}
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/guile/site/${GUILE_MAJOR_VERSION}.${GUILE_MINOR_VERSION}/site-ccache/extent-sampling)
+endif()