2013-12-29 06:27:36 +00:00
|
|
|
# This directory contains Lean builtin libraries and Lua scripts
|
|
|
|
# needed to run Lean. The builtin Lean libraries are compiled
|
|
|
|
# using ${LEAN_BINARY_DIR}/shell/lean
|
|
|
|
# The library builtin is not a real library.
|
|
|
|
# It is just a hack to force CMake to consider our custom targets
|
2013-12-29 06:06:11 +00:00
|
|
|
add_library(builtin builtin.cpp)
|
|
|
|
|
2013-12-29 06:27:36 +00:00
|
|
|
# We copy files to the shell directory, to make sure we can test lean
|
|
|
|
# without installing it.
|
|
|
|
set(SHELL_DIR ${LEAN_BINARY_DIR}/shell)
|
|
|
|
|
2013-12-29 19:19:17 +00:00
|
|
|
file(GLOB LEANLIB "*.lua")
|
|
|
|
FOREACH(FILE ${LEANLIB})
|
|
|
|
get_filename_component(FNAME ${FILE} NAME)
|
|
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FNAME}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${FILE} ${CMAKE_CURRENT_BINARY_DIR}/${FNAME}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${FILE} ${SHELL_DIR}/${FNAME}
|
|
|
|
DEPENDS ${FILE})
|
|
|
|
add_custom_target("${FNAME}_builtin" DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${FNAME})
|
|
|
|
add_dependencies(builtin "${FNAME}_builtin")
|
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} DESTINATION library)
|
|
|
|
ENDFOREACH(FILE)
|
|
|
|
|
2013-12-29 19:58:55 +00:00
|
|
|
# The following command invokes the lean binary.
|
|
|
|
# So, it CANNOT be executed if we are cross-compiling.
|
2013-12-29 10:44:49 +00:00
|
|
|
function(add_theory_core FILE ARG EXTRA_DEPS)
|
2013-12-29 06:06:11 +00:00
|
|
|
get_filename_component(BASENAME ${FILE} NAME_WE)
|
|
|
|
set(FNAME "${BASENAME}.olean")
|
2013-12-29 06:27:36 +00:00
|
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FNAME}
|
2014-01-09 23:31:58 +00:00
|
|
|
COMMAND ${SHELL_DIR}/lean ${ARG} -q -o ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${CMAKE_CURRENT_SOURCE_DIR}/${FILE}
|
2013-12-29 06:27:36 +00:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${SHELL_DIR}/${FNAME}
|
2013-12-30 21:46:39 +00:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${CMAKE_CURRENT_SOURCE_DIR}/obj/${FNAME}
|
2014-01-08 00:13:58 +00:00
|
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${SHELL_DIR}/lean ${EXTRA_DEPS})
|
2013-12-30 20:40:42 +00:00
|
|
|
add_custom_target("${BASENAME}_builtin" DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} ${EXTRA_DEPS})
|
2013-12-30 11:29:20 +00:00
|
|
|
add_dependencies(builtin ${BASENAME}_builtin)
|
2013-12-29 06:27:36 +00:00
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} DESTINATION library)
|
2014-01-07 22:34:21 +00:00
|
|
|
add_test("${BASENAME}_builtin_test" ${SHELL_DIR}/lean -o ${CMAKE_CURRENT_BINARY_DIR}/${FNAME}_test ${ARG} ${CMAKE_CURRENT_SOURCE_DIR}/${FILE})
|
2013-12-29 10:44:49 +00:00
|
|
|
endfunction()
|
|
|
|
|
2013-12-29 19:58:55 +00:00
|
|
|
# When cross compiling, we cannot execute lean during the build.
|
|
|
|
# So, we just copy the precompiled .olean files.
|
|
|
|
function(copy_olean FILE)
|
|
|
|
get_filename_component(BASENAME ${FILE} NAME_WE)
|
|
|
|
set(FNAME "${BASENAME}.olean")
|
|
|
|
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FNAME}
|
2013-12-30 21:46:39 +00:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/obj/${FNAME} ${CMAKE_CURRENT_BINARY_DIR}/${FNAME}
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/obj/${FNAME} ${SHELL_DIR}/${FNAME}
|
|
|
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/obj/${FNAME})
|
2013-12-30 11:29:20 +00:00
|
|
|
add_custom_target("${BASENAME}_builtin" DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${FNAME})
|
|
|
|
add_dependencies(builtin ${BASENAME}_builtin)
|
2013-12-29 19:58:55 +00:00
|
|
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${FNAME} DESTINATION library)
|
|
|
|
endfunction()
|
|
|
|
|
2013-12-30 20:40:42 +00:00
|
|
|
function(add_kernel_theory FILE DEPS)
|
2013-12-29 19:58:55 +00:00
|
|
|
if(CMAKE_CROSSCOMPILING)
|
|
|
|
copy_olean(${FILE})
|
|
|
|
else()
|
2013-12-30 20:40:42 +00:00
|
|
|
add_theory_core(${FILE} "-n" "${DEPS}")
|
2013-12-29 19:58:55 +00:00
|
|
|
endif()
|
2013-12-29 10:44:49 +00:00
|
|
|
endfunction()
|
|
|
|
|
2013-12-30 20:40:42 +00:00
|
|
|
function(add_theory FILE DEPS)
|
2013-12-29 19:58:55 +00:00
|
|
|
if(CMAKE_CROSSCOMPILING)
|
|
|
|
copy_olean(${FILE})
|
|
|
|
else()
|
2013-12-30 20:40:42 +00:00
|
|
|
add_theory_core(${FILE} "" "${DEPS}")
|
2013-12-29 19:58:55 +00:00
|
|
|
endif()
|
2013-12-29 10:44:49 +00:00
|
|
|
endfunction()
|
|
|
|
|
2014-01-10 02:09:53 +00:00
|
|
|
# The following command invokes the lean binary to update .cpp/.h interface files
|
|
|
|
# associated with a .lean file.
|
|
|
|
function(update_interface FILE DEST ARG)
|
|
|
|
get_filename_component(BASENAME ${FILE} NAME_WE)
|
|
|
|
set(CPPFILE "${LEAN_SOURCE_DIR}/${DEST}/${BASENAME}_decls.cpp")
|
|
|
|
set(HFILE "${LEAN_SOURCE_DIR}/${DEST}/${BASENAME}_decls.h")
|
|
|
|
add_custom_command(OUTPUT ${CPPFILE} ${HFILE}
|
|
|
|
COMMAND ${SHELL_DIR}/lean ${ARG} -q ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${CMAKE_CURRENT_SOURCE_DIR}/name_conv.lua ${CMAKE_CURRENT_SOURCE_DIR}/lean2cpp.lean > ${CPPFILE}
|
|
|
|
COMMAND ${SHELL_DIR}/lean ${ARG} -q ${CMAKE_CURRENT_SOURCE_DIR}/${FILE} ${CMAKE_CURRENT_SOURCE_DIR}/name_conv.lua ${CMAKE_CURRENT_SOURCE_DIR}/lean2h.lean > ${HFILE}
|
|
|
|
DEPENDS ${FILE})
|
|
|
|
add_custom_target("${BASENAME}_decls" DEPENDS ${CPPFILE})
|
|
|
|
add_dependencies(builtin ${BASENAME}_decls)
|
|
|
|
endfunction()
|
|
|
|
|
2013-12-30 20:40:42 +00:00
|
|
|
add_kernel_theory("kernel.lean" "${CMAKE_CURRENT_BINARY_DIR}/macros.lua")
|
2014-01-01 21:52:25 +00:00
|
|
|
add_kernel_theory("Nat.lean" "${CMAKE_CURRENT_BINARY_DIR}/kernel.olean")
|
2013-12-30 20:40:42 +00:00
|
|
|
|
2014-01-09 22:06:23 +00:00
|
|
|
add_theory("if_then_else.lean" "${CMAKE_CURRENT_BINARY_DIR}/Nat.olean")
|
|
|
|
add_theory("Int.lean" "${CMAKE_CURRENT_BINARY_DIR}/if_then_else.olean")
|
|
|
|
add_theory("Real.lean" "${CMAKE_CURRENT_BINARY_DIR}/Int.olean")
|
|
|
|
add_theory("specialfn.lean" "${CMAKE_CURRENT_BINARY_DIR}/Real.olean")
|
|
|
|
add_theory("cast.lean" "${CMAKE_CURRENT_BINARY_DIR}/Nat.olean")
|
2014-01-10 02:09:53 +00:00
|
|
|
|
|
|
|
update_interface("kernel.lean" "kernel" "-n")
|
|
|
|
update_interface("Nat.lean" "library/arith" "-n")
|
|
|
|
update_interface("Int.lean" "library/arith" "")
|
|
|
|
update_interface("Real.lean" "library/arith" "")
|