azure-sdk-for-cpp/cmake-modules/TSPCompile.cmake
gearama 125c305961
Keyvault Secrets remake (#6463)
* first stab at a client tsp /tspconfig scripts

* space

* updates to clientTSP

* update for latest specs for KV

* gfd

* gfd

* hghf

* dfgdf

* jhg

* oopsie

* comments

* headers

* clang & param

* coverage

* more comments not gened

* spell

* more comments

* regen for testing

* gfd

* gdf

* tretre

* update to use tsp client

* vcxvx

* fdsfsd

* fds

* round 2

* api view

* dsa

* rte

* update to use code injection

* clang and comments

* gfd

* updates

* clang

* fsd

* spell

* comments

* some cleanup

* first test passing

* dsa

* second test

* startdeletesecret

* update secret ptoeprties

* recover secret

* cleanup clang

* docs

* update recordings and clean up tests

* ggfd

* ooops

* samples build

* gdf

* samples run

* perf tests

* CLANG

* fds

* CLAAAAAAAAANG

* update to latest version of the TSPs

* update to latest codegen

* gdfgdf

* replace method

* client and stuffs

* PR comments

* remove security from path

* clang

* qfe

* gdf

* update to models and to the lastest codegen

* forgot cmake file

* Update sdk/keyvault/azure-security-keyvault-secrets/samples/sample1-basic-operations/sample1_basic_operations.cpp

Co-authored-by: Anton Kolesnyk <41349689+antkmsft@users.noreply.github.com>

* test api view

* dfsfsd

* ccxcvx

* step1

* delete, and lor and paged

* all work

* works and serializers and test for them gone

* cleanup test files

* sample

* tests passing

* dfsfsd

* latest codegen

* after merge

* fsd

* gfd

* gfd

* ApiView

* move to _details namespace

* put back readme

* update readmes

* clang

* dfsd

* get rid of snippets, validation fails without explanation as to what the failure is

* update locations of methods tp cpp files

* format files

* cover

---------

Co-authored-by: Anton Kolesnyk <41349689+antkmsft@users.noreply.github.com>
2025-03-14 13:46:49 -07:00

162 lines
6.2 KiB
CMake

# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
find_package(Git)
macro(GenerateCodeFromTypeSpec TSP_DESTINATION TSP_SERVICE_PATH CODEGEN_SHA CODEGEN_DESTINATION GEN_FILES_DESTINATION COPY_CLIENT_TSP)
message("\
GenerateCodeFromTypeSpec using the following params \n\
TSP_DESTINATION=${TSP_DESTINATION} \n\
TSP_SERVICE_PATH=${TSP_SERVICE_PATH} \n\
CODEGEN_SHA=${CODEGEN_SHA} \n\
CODEGEN_DESTINATION=${CODEGEN_DESTINATION} \n\
GEN_FILES_DESTINATION=${GEN_FILES_DESTINATION}")
set(CODEGEN_PATH packages/typespec-cpp)
DownloadTSPFiles(${TSP_DESTINATION})
DownloadCodeGenerator(${CODEGEN_SHA} ${CODEGEN_DESTINATION})
GenerateCodeFromTSP(${TSP_DESTINATION} ${TSP_SERVICE_PATH} ${CODEGEN_DESTINATION} ${CODEGEN_PATH} ${GEN_FILES_DESTINATION} ${COPY_CLIENT_TSP})
endmacro()
macro(DownloadTSPFiles TSP_DESTINATION)
set(TSP_REPO "https://github.com/Azure/azure-rest-api-specs.git")
message ("\
DownloadTSPFiles using the following params \n\
TSP_REPO = ${TSP_REPO} \n\
TSP_DESTINATION=${TSP_DESTINATION}")
set(DOWNLOAD_TSP_FOLDER ${CMAKE_SOURCE_DIR}/build/${TSP_DESTINATION})
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/tsp-location.yaml
DESTINATION ${DOWNLOAD_TSP_FOLDER})
set(SCRIPTS_FOLDER ${CMAKE_SOURCE_DIR}/eng/scripts/typespec/)
file(COPY ${SCRIPTS_FOLDER}/Run-Tsp-Update.ps1
DESTINATION ${DOWNLOAD_TSP_FOLDER})
execute_process(COMMAND pwsh Run-Tsp-Update.ps1
WORKING_DIRECTORY ${DOWNLOAD_TSP_FOLDER})
if(NOT ${STATUS_CODE} EQUAL 0)
message(FATAL_ERROR "TSP download failed.")
endif()
endmacro()
macro (DownloadCodeGenerator CODEGEN_SHA CODEGEN_DESTINATION)
message("\
DownloadCodeGenerator using the following params \n\
CODEGEN_REPO=${CODEGEN_REPO} \n\
CODEGEN_SHA=${CODEGEN_SHA} \n\
CODEGEN_DESTINATION=${CODEGEN_DESTINATION}")
if(Git_FOUND)
message("Git found: ${GIT_EXECUTABLE}")
else()
message(FATAL_ERROR "Git not found")
endif()
set(CODEGEN_REPO "https://github.com/Azure/autorest.cpp.git")
set(DOWNLOAD_CODEGEN_FOLDER ${CMAKE_SOURCE_DIR}/build/${CODEGEN_DESTINATION})
# if we have the git folder, we don't need to download it again
# this also saves times on incremental builds
if(NOT EXISTS ${DOWNLOAD_CODEGEN_FOLDER}/.git)
message("First time setting up the ${CODEGEN_DESTINATION} repo.")
#make folder
make_directory(${DOWNLOAD_CODEGEN_FOLDER})
#init git in folder
execute_process(COMMAND ${GIT_EXECUTABLE} clone ${CODEGEN_REPO} ${DOWNLOAD_CODEGEN_FOLDER})
else()
message("Repo detected at ${TSP_DESTINATION}. Jumping ahead to checkout.")
endif()
#checkout SHA
execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${CODEGEN_SHA}
WORKING_DIRECTORY ${DOWNLOAD_CODEGEN_FOLDER})
if(NOT ${STATUS_CODE} EQUAL 0)
message(FATAL_ERROR "CODEGEN download failed.")
endif()
endmacro()
macro(GenerateCodeFromTSP TSP_DESTINATION TSP_SERVICE_PATH CODEGEN_DESTINATION CODEGEN_PATH GEN_FILES_DESTINATION COPY_CLIENT_TSP )
message("\
GenerateCodeFromTSP using the following params \n\
TSP_DESTINATION=${TSP_DESTINATION}\n\
TSP_SERVICE_PATH=${TSP_SERVICE_PATH}\n\
CODEGEN_DESTINATION=${CODEGEN_DESTINATION}\n\
CODEGEN_PATH=${CODEGEN_PATH}\n\
GEN_FILES_DESTINATION$=${GEN_FILES_DESTINATION}")
message("Remember to Download the typspec-cpp emitter from npmjs.org")
#TODO : https://github.com/Azure/azure-sdk-for-cpp/issues/6071
set(DOWNLOAD_CODEGEN_FOLDER ${CMAKE_SOURCE_DIR}/build/${CODEGEN_DESTINATION}/${CODEGEN_PATH}/specs/${TSP_SERVICE_PATH})
set(DOWNLOAD_TSP_FOLDER ${CMAKE_SOURCE_DIR}/build/${TSP_DESTINATION}/TempTypeSpecFiles)
set(TSP_FINAL_LOCATION ${DOWNLOAD_CODEGEN_FOLDER}/${TSP_SERVICE_PATH})
set(SCRIPTS_FOLDER ${CMAKE_SOURCE_DIR}/eng/scripts/typespec/)
message("\
Will copy tsp files from \n\
${DOWNLOAD_TSP_FOLDER} to \n\
${DOWNLOAD_CODEGEN_FOLDER}")
#copy tsp files to the codegen folder
file(COPY ${DOWNLOAD_TSP_FOLDER}/
DESTINATION ${DOWNLOAD_CODEGEN_FOLDER})
message("\
Will copy tsp generation scripts from \n\
${SCRIPTS_FOLDER} to \n\
${TSP_FINAL_LOCATION}")
file(COPY ${SCRIPTS_FOLDER}
DESTINATION ${TSP_FINAL_LOCATION})
if(${COPY_CLIENT_TSP})
message("\
Will copy \n\
${CMAKE_CURRENT_SOURCE_DIR}/client.tsp to \n\
${TSP_FINAL_LOCATION}")
# file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/client.tsp
# DESTINATION ${TSP_FINAL_LOCATION})
endif()
message("\
Will copy \n\
${CMAKE_CURRENT_SOURCE_DIR}/tspconfig.yaml to \n\
${TSP_FINAL_LOCATION}")
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/tspconfig.yaml
DESTINATION ${TSP_FINAL_LOCATION})
#build codegen
message("Building codegen in folder \n\
${TSP_FINAL_LOCATION}")
execute_process(COMMAND pwsh Build-Codegen.ps1
WORKING_DIRECTORY ${TSP_FINAL_LOCATION})
#generate code
message("\
Use codegen in folder \n\
${TSP_FINAL_LOCATION}")
execute_process(COMMAND pwsh Generate-Code.ps1 -outputPath ${GEN_FILES_DESTINATION}
WORKING_DIRECTORY ${TSP_FINAL_LOCATION})
endmacro()
macro(UpdateCodeFilesFromGenerated CODEGEN_DESTINATION TSP_SERVICE_PATH INCLUDE_DESTINATION SOURCE_DESTINATION)
message("\
Updating code files using the following params \n\
CODEGEN_DESTINATION=${CODEGEN_DESTINATION} \n\
TSP_SERVICE_PATH=${TSP_SERVICE_PATH} \n\
INCLUDE_DESTINATION=${INCLUDE_DESTINATION} \n\
SOURCE_DESTINATION=${SOURCE_DESTINATION}")
set(CODEGEN_PATH packages/typespec-cpp/specs/${TSP_SERVICE_PATH}/${TSP_SERVICE_PATH})
set(INCLUDE_SRC ${CMAKE_SOURCE_DIR}/build/${CODEGEN_DESTINATION}/${CODEGEN_PATH}/generated/inc/)
set(SOURCE_SRC ${CMAKE_SOURCE_DIR}/build/${CODEGEN_DESTINATION}/${CODEGEN_PATH}/generated/src/)
message("\
Copying files from \n\
${INCLUDE_SRC} to \n\
${INCLUDE_DESTINATION}")
file(COPY ${INCLUDE_SRC} DESTINATION ${INCLUDE_DESTINATION})
message("\
Copying files from \n\
${SOURCE_SRC} to \n\
${SOURCE_DESTINATION}")
file(COPY ${SOURCE_SRC} DESTINATION ${SOURCE_DESTINATION})
message("CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
endmacro()