Back to home page

EIC code displayed by LXR

 
 

    


Warning, /acts/cmake/ActsCodegen.cmake is written in an unsupported language. File is not indexed.

0001 include_guard(GLOBAL)
0002 
0003 message(STATUS "Configuring codegen: preparing uv")
0004 
0005 find_program(uv_exe uv)
0006 
0007 set(_uv_version "0.6.1")
0008 set(_base_url
0009     "https://github.com/astral-sh/uv/releases/download/${_uv_version}"
0010 )
0011 
0012 if(uv_exe STREQUAL "uv_exe-NOTFOUND")
0013     message(STATUS "uv not found, installing it")
0014 
0015     if(NOT APPLE AND NOT UNIX)
0016         message(FATAL_ERROR "Unsupported platform: ${CMAKE_SYSTEM_NAME}")
0017     endif()
0018 
0019     if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)")
0020         if(APPLE)
0021             set(UV_NAME "${_base_url}/uv-x86_64-apple-darwin.tar.gz")
0022             set(UV_HASH
0023                 "SHA256=d8609b53f280d5e784a7586bf7a3fd90c557656af109cee8572b24a0c1443191"
0024             )
0025         elseif(UNIX)
0026             set(UV_URL "${_base_url}/uv-x86_64-unknown-linux-musl.tar.gz")
0027             set(UV_HASH
0028                 "SHA256=143dba84867f72107048e1f95be8f894d59f456e018a34276d9d2d6bacdf8f99"
0029             )
0030         endif()
0031     elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(arm)|(ARM)|(aarch64)")
0032         if(APPLE)
0033             set(UV_URL "${_base_url}/uv-aarch64-apple-darwin.tar.gz")
0034             set(UV_HASH
0035                 "SHA256=90e10cc7f26cbaf3eaa867cf99344ffd550e942fd4b660e88f2f91c23022dc5a"
0036             )
0037         elseif(UNIX)
0038             set(UV_URL "${_base_url}/uv-aarch64-unknown-linux-musl.tar.gz")
0039             set(UV_HASH
0040                 "SHA256=6455886f9aef3392df0af630dee9df892787fdffda0f0800245f86a735bd810d"
0041             )
0042         endif()
0043     else()
0044         message(
0045             FATAL_ERROR
0046             "Unsupported architecture: ${CMAKE_SYSTEM_PROCESSOR}"
0047         )
0048     endif()
0049 
0050     message(STATUS "Downloading uv from ${UV_URL}")
0051     set(UV_DIR "${CMAKE_BINARY_DIR}/uv")
0052     file(DOWNLOAD ${UV_URL} ${UV_DIR}/uv.tar.gz EXPECTED_HASH ${UV_HASH})
0053 
0054     file(ARCHIVE_EXTRACT INPUT ${UV_DIR}/uv.tar.gz DESTINATION ${UV_DIR})
0055 
0056     file(REMOVE ${UV_DIR}/uv.tar.gz)
0057 
0058     file(GLOB uv_extracted ${UV_DIR}/uv*)
0059     message(STATUS "Extracted uv: ${uv_extracted}")
0060 
0061     find_program(uv_exe uv PATHS ${uv_extracted} REQUIRED NO_DEFAULT_PATH)
0062 endif()
0063 
0064 message(STATUS "Found uv: ${uv_exe}")
0065 
0066 execute_process(
0067     COMMAND ${uv_exe} --version
0068     OUTPUT_VARIABLE uv_version
0069     OUTPUT_STRIP_TRAILING_WHITESPACE
0070 )
0071 message(STATUS "uv version: ${uv_version}")
0072 
0073 function(acts_code_generation)
0074     set(options ISOLATED)
0075     set(oneValueArgs TARGET PYTHON PYTHON_VERSION OUTPUT)
0076     set(multiValueArgs DEPENDS WITH_REQUIREMENTS WITH)
0077     cmake_parse_arguments(
0078         PARSE_ARGV
0079         0
0080         ARGS
0081         "${options}"
0082         "${oneValueArgs}"
0083         "${multiValueArgs}"
0084     )
0085 
0086     if(NOT DEFINED ARGS_PYTHON_VERSION)
0087         set(ARGS_PYTHON_VERSION "3.13")
0088     endif()
0089 
0090     if(NOT DEFINED ARGS_PYTHON)
0091         message(SEND_ERROR "No python script specified")
0092         return()
0093     endif()
0094 
0095     if(NOT EXISTS ${ARGS_PYTHON})
0096         if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_PYTHON})
0097             set(ARGS_PYTHON ${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_PYTHON})
0098         else()
0099             message(SEND_ERROR "Python script not found: ${ARGS_PYTHON}")
0100             return()
0101         endif()
0102     endif()
0103 
0104     set(_arg_isolated "")
0105     if(ARGS_ISOLATED)
0106         set(_arg_isolated "--isolated")
0107     endif()
0108 
0109     set(_depends "${ARGS_PYTHON}")
0110     set(_with_args "")
0111     foreach(_requirement ${ARGS_WITH_REQUIREMENTS})
0112         list(APPEND _depends ${_requirement})
0113         list(APPEND _with_args "--with-requirements;${_requirement}")
0114     endforeach()
0115 
0116     foreach(_requirement ${ARGS_WITH})
0117         list(APPEND _with_args "--with;${_requirement}")
0118         if(IS_DIRECTORY ${_requirement})
0119             file(GLOB_RECURSE _depends_py ${_requirement}/*)
0120             list(APPEND _depends ${_depends_py})
0121         endif()
0122     endforeach()
0123 
0124     get_filename_component(_output_name ${ARGS_OUTPUT} NAME)
0125 
0126     set(_codegen_root ${CMAKE_CURRENT_BINARY_DIR}/codegen/${ARGS_TARGET})
0127     set(_output_file ${_codegen_root}/${ARGS_OUTPUT})
0128 
0129     get_filename_component(_output_dir ${_output_file} DIRECTORY)
0130     file(MAKE_DIRECTORY ${_output_dir})
0131 
0132     add_custom_command(
0133         OUTPUT ${_output_file}
0134         COMMAND
0135             env -i ${uv_exe} run --quiet --python ${ARGS_PYTHON_VERSION}
0136             --no-project ${_arg_isolated} ${_with_args} ${ARGS_PYTHON}
0137             ${_output_file}
0138         DEPENDS ${_depends}
0139         COMMENT "Generating ${ARGS_OUTPUT}"
0140         VERBATIM
0141     )
0142 
0143     add_custom_target(${ARGS_TARGET}_Internal DEPENDS ${_output_file})
0144     add_library(${ARGS_TARGET} INTERFACE)
0145     target_include_directories(${ARGS_TARGET} INTERFACE ${_codegen_root})
0146 
0147     add_dependencies(${ARGS_TARGET} ${ARGS_TARGET}_Internal)
0148 endfunction()