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()