moved the cmake folder to client root folder

This commit is contained in:
vladimir.kuznetsov 2022-12-14 19:16:12 +03:00
parent 4df918d6a5
commit bd382e3cc7
3 changed files with 2 additions and 0 deletions

72
client/cmake/golang.cmake Normal file
View file

@ -0,0 +1,72 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
## Find the absolute path to the go build tool.
find_program(GOLANG_BUILD_TOOL NAMES go REQUIRED)
## Create a library target built from a golang c-archive.
function(add_go_library GOTARGET SOURCE)
cmake_parse_arguments(GOLANG
""
"GOOS;GOARCH"
"CGO_CFLAGS;CGO_LDFLAGS"
${ARGN})
get_filename_component(SRC_NAME ${SOURCE} NAME)
get_filename_component(DIR_NAME ${SOURCE} DIRECTORY)
get_filename_component(DIR_ABSOLUTE ${DIR_NAME} ABSOLUTE)
file(GLOB_RECURSE SRC_DEPS ${DIR_NAME}/*.go)
set(HEADER_NAME "${GOTARGET}.h")
set(ARCHIVE_NAME "${GOTARGET}${CMAKE_STATIC_LIBRARY_SUFFIX}")
set(GOCACHE ${CMAKE_BINARY_DIR}/go-cache)
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_BINARY_DIR}/go-cache)
set(GOFLAGS -buildmode=c-archive -trimpath -v)
if(IS_DIRECTORY ${DIR_NAME}/vendor)
set(GOFLAGS ${GOFLAGS} -mod vendor)
endif()
## Add extras to the CGO compiler and linker flags.
execute_process(OUTPUT_VARIABLE DEFAULT_CGO_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND ${GOLANG_BUILD_TOOL} env CGO_CFLAGS)
execute_process(OUTPUT_VARIABLE DEFAULT_CGO_LDFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND ${GOLANG_BUILD_TOOL} env CGO_LDFLAGS)
separate_arguments(DEFAULT_CGO_CFLAGS NATIVE_COMMAND ${DEFAULT_CGO_CFLAGS})
separate_arguments(DEFAULT_CGO_LDFLAGS NATIVE_COMMAND ${DEFAULT_CGO_LDFLAGS})
list(PREPEND GOLANG_CGO_CFLAGS ${DEFAULT_CGO_CFLAGS})
list(PREPEND GOLANG_CGO_LDFLAGS ${DEFAULT_CGO_LDFLAGS})
if(NOT GOLANG_GOOS)
execute_process(OUTPUT_VARIABLE GOLANG_GOOS OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND ${GOLANG_BUILD_TOOL} env GOOS)
endif()
if(NOT GOLANG_GOARCH)
execute_process(OUTPUT_VARIABLE GOLANG_GOARCH OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND ${GOLANG_BUILD_TOOL} env GOARCH)
endif()
if(APPLE AND CMAKE_OSX_SYSROOT)
execute_process(OUTPUT_VARIABLE SDKROOT OUTPUT_STRIP_TRAILING_WHITESPACE COMMAND xcrun --sdk ${CMAKE_OSX_SYSROOT} --show-sdk-path)
list(APPEND GOLANG_CGO_CFLAGS -isysroot ${SDKROOT})
list(APPEND GOLANG_CGO_LDFLAGS -isysroot ${SDKROOT})
endif()
## The actual commands that do the building.
add_custom_target(golang_${GOTARGET}
BYPRODUCTS ${ARCHIVE_NAME} ${HEADER_NAME}
WORKING_DIRECTORY ${DIR_ABSOLUTE}
SOURCES ${SRC_DEPS} ${DIR_NAME}/go.mod
COMMAND ${CMAKE_COMMAND} -E env GOCACHE=${GOCACHE}
CGO_ENABLED=1
CGO_CFLAGS="${GOLANG_CGO_CFLAGS}"
CGO_LDFLAGS="${GOLANG_CGO_LDFLAGS}"
GOOS="${GOLANG_GOOS}"
GOARCH="${GOLANG_GOARCH}"
${GOLANG_BUILD_TOOL} build ${GOFLAGS} -o ${CMAKE_CURRENT_BINARY_DIR}/${ARCHIVE_NAME} ${SRC_NAME}
)
set_target_properties(golang_${GOTARGET} PROPERTIES FOLDER "Libs")
## Wrap up the built library as an imported target.
add_library(${GOTARGET} STATIC IMPORTED GLOBAL)
add_dependencies(${GOTARGET} golang_${GOTARGET})
set_target_properties(${GOTARGET} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_BINARY_DIR}
INTERFACE_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${HEADER_NAME}
IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${ARCHIVE_NAME})
endfunction(add_go_library)

148
client/cmake/osxtools.cmake Normal file
View file

@ -0,0 +1,148 @@
if(NOT APPLE)
message(FATAL_ERROR "OSX Tools are only supported on Apple targets")
endif()
if(CMAKE_COLOR_MAKEFILE)
set(COMMENT_ECHO_COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --blue --bold)
else()
set(COMMENT_ECHO_COMMAND ${CMAKE_COMMAND} -E echo)
endif()
if(CODE_SIGN_IDENTITY)
find_program(CODESIGN_BIN NAMES codesign)
if(NOT CODESIGN_BIN)
messsage(FATAL_ERROR "Cannot sign code, could not find 'codesign' executable")
endif()
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY ${CODE_SIGN_IDENTITY})
endif()
## A helper to copy files into the application bundle
function(osx_bundle_files TARGET)
cmake_parse_arguments(BUNDLE
""
"DESTINATION"
"FILES"
${ARGN})
if(NOT BUNDLE_DESTINATION)
set(BUNDLE_DESTINATION Resources)
endif()
foreach(FILE ${BUNDLE_FILES})
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND_EXPAND_LISTS
COMMAND ${COMMENT_ECHO_COMMAND} "Bundling ${FILE}"
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_BUNDLE_CONTENT_DIR:${TARGET}>/${BUNDLE_DESTINATION}
COMMAND ${CMAKE_COMMAND} -E copy ${FILE} $<TARGET_BUNDLE_CONTENT_DIR:${TARGET}>/${BUNDLE_DESTINATION}/
)
endforeach()
endfunction(osx_bundle_files)
## A helper to bundle an asset catalog.
function(osx_bundle_assetcatalog TARGET)
cmake_parse_arguments(XCASSETS
""
"CATALOG;PLATFORM"
"DEVICES"
${ARGN})
if(XCASSETS_PLATFORM)
set(XCASSETS_TARGET_ARGS --platform ${XCASSETS_PLATFORM})
elseif(IOS)
set(XCASSETS_TARGET_ARGS --platform iphoneos)
else()
set(XCASSETS_TARGET_ARGS --platform macosx)
endif()
foreach(DEVNAME ${XCASSETS_DEVICES})
list(APPEND XCASSETS_TARGET_ARGS --target-device ${DEVNAME})
endforeach()
list(APPEND XCASSETS_TARGET_ARGS --minimum-deployment-target ${CMAKE_OSX_DEPLOYMENT_TARGET})
## Compile the asset catalog
set(XCASSETS_GEN_PLIST ${CMAKE_CURRENT_BINARY_DIR}/xcassets_generated_info.plist)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/xcassets/Assets.car ${XCASSETS_GEN_PLIST}
MAIN_DEPENDENCY ${XCASSETS_CATALOG}/Contents.json
COMMENT "Building asset catalog"
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/xcassets
COMMAND actool --output-format human-readable-text --notices --warnings
${XCASSETS_TARGET_ARGS}
--app-icon AppIcon
--output-partial-info-plist ${XCASSETS_GEN_PLIST}
--development-region en --enable-on-demand-resources NO
--compile ${CMAKE_CURRENT_BINARY_DIR}/xcassets ${XCASSETS_CATALOG}
)
## Patch the asset catalog into the target bundle.
if(NOT IOS)
set(XCASSETS_RESOURCE_DIR "Resources")
endif()
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMENT "Bundling asset catalog"
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_BINARY_DIR}/xcassets $<TARGET_BUNDLE_CONTENT_DIR:${TARGET}>/${XCASSETS_RESOURCE_DIR}
COMMAND ${CMAKE_SOURCE_DIR}/scripts/macos/merge_plist.py ${XCASSETS_GEN_PLIST} -o $<TARGET_BUNDLE_CONTENT_DIR:${TARGET}>/Info.plist
)
target_sources(${TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/xcassets/Assets.car)
set_source_files_properties(
${CMAKE_CURRENT_BINARY_DIR}/xcassets/Assets.car
${XCASSETS_GEN_PLIST}
PROPERTIES
GENERATED TRUE
HEADER_FILE_ONLY TRUE
)
target_sources(${TARGET} PRIVATE ${XCASSETS_GEN_PLIST})
set_source_files_properties(${XCASSETS_GEN_PLIST} PROPERTIES GENERATED TRUE)
endfunction()
## A helper to code-sign an executable.
function(osx_codesign_target TARGET)
## Xcode should perform automatic code-signing for us.
if(XCODE)
return()
endif()
if(CODE_SIGN_IDENTITY)
cmake_parse_arguments(CODESIGN
"FORCE"
""
"OPTIONS;FILES"
${ARGN})
set(CODESIGN_ARGS --timestamp -s "${CODE_SIGN_IDENTITY}")
if(CODESIGN_FORCE)
list(APPEND CODESIGN_ARGS -f)
endif()
if(CODESIGN_OPTIONS)
list(JOIN CODESIGN_OPTIONS , CODESIGN_OPTIONS_JOINED)
list(APPEND CODESIGN_ARGS "--option=${CODESIGN_OPTIONS_JOINED}")
endif()
## Process the entitlements as though Xcode has done variable expansion.
## This only supports the PRODUCT_BUNDLE_IDENTIFIER and DEVELOPMENT_TEAM
## for now.
get_target_property(CODESIGN_ENTITLEMENTS ${TARGET} XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS)
if(CODESIGN_ENTITLEMENTS)
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_SOURCE_DIR}/scripts/utils/make_template.py ${CODESIGN_ENTITLEMENTS}
-k PRODUCT_BUNDLE_IDENTIFIER=$<TARGET_PROPERTY:${TARGET},XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER>
-k DEVELOPMENT_TEAM=$<TARGET_PROPERTY:${TARGET},XCODE_ATTRIBUTE_DEVELOPMENT_TEAM>
-o ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_codesign.entitlements
)
list(APPEND CODESIGN_ARGS --entitlements ${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_codesign.entitlements)
endif()
## If no files were specified, sign the target itself.
if(NOT CODESIGN_FILES)
set(CODESIGN_FILES $<TARGET_FILE:${TARGET}>)
endif()
foreach(FILE ${CODESIGN_FILES})
add_custom_command(TARGET ${TARGET} POST_BUILD VERBATIM
COMMAND ${COMMENT_ECHO_COMMAND} "Signing ${TARGET}: ${FILE}"
COMMAND ${CODESIGN_BIN} ${CODESIGN_ARGS} ${FILE}
)
endforeach()
endif()
endfunction()