1 Star 0 Fork 0

gaojuxin/la-util_libs

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
CMakeLists.txt 5.32 KB
一键复制 编辑 原始数据 按行查看 历史
Gerwin Klein 提交于 2021-02-08 18:32 . Convert to SPDX license identifiers
#
# Copyright 2018, Data61, CSIRO (ABN 41 687 119 230)
#
# SPDX-License-Identifier: BSD-2-Clause
#
cmake_minimum_required(VERSION 3.7.2)
project(libpicotcp NONE)
include(external-project-helpers)
set(configure_string "")
config_option(LibPicotcp LIB_PICOTCP "Build libpicotcp" DEFAULT OFF)
config_option(
LibPicotcpBsd
LIB_PICOTCP_BSD
"Build libpicotcp with bsd socket support"
DEFAULT
OFF
DEPENDS
LibPicotcp
)
mark_as_advanced(LibPicotcp LibPicotcpBsd)
add_config_library(picotcp "${configure_string}")
if(LibPicotcp)
# find pico tcp location
find_file(PICOTCP_PATH picotcp PATHS ${CMAKE_SOURCE_DIR}/projects CMAKE_FIND_ROOT_PATH_BOTH)
mark_as_advanced(FORCE PICOTCP_PATH)
if("${PICOTCP_PATH}" STREQUAL "PICOTCP_PATH-NOTFOUND")
message(
FATAL_ERROR "Failed to find picotcp. Consider cmake -DPICOTCP_PATH=/path/to/picotcp"
)
endif()
# extract compiler args from cmake
get_property(compile_options DIRECTORY PROPERTY COMPILE_OPTIONS)
separate_arguments(cmake_c_flags_sep NATIVE_COMMAND "${CMAKE_C_FLAGS}")
list(APPEND compile_options "${cmake_c_flags_sep}")
# add the location of muslc headers to the cflags
string(
APPEND compile_options
" -I$<JOIN:$<TARGET_PROPERTY:muslc,INTERFACE_INCLUDE_DIRECTORIES>, -I>"
)
if (CMAKE_C_COMPILER_ID STREQUAL "Clang")
list(APPEND compile_options "${CMAKE_C_COMPILE_OPTIONS_TARGET}${CMAKE_C_COMPILER_TARGET}")
set(C_COMPILER clang)
else()
set(C_COMPILER ${CROSS_COMPILER_PREFIX}gcc)
endif()
if (NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
set(perf_flags "\"PERF=1\" \"DEBUG=0\"")
endif()
# generate a build.sh script to avoid nasty escape issues, we then invoke this in ExternalProject_Add
file(
GENERATE
OUTPUT
"${CMAKE_CURRENT_BINARY_DIR}/picotcp_external/picotcp/build.sh"
CONTENT
"${CMAKE_COMMAND} -E env \
\"PLATFORM_CFLAGS=$<JOIN:${compile_options}, >\" \
\"CROSS_COMPILE=${CROSS_COMPILER_PREFIX}\" \
\"C_COMPILER=${C_COMPILER}\" \
${perf_flags} \
make -s -j"
)
add_custom_target(get_muslc)
add_dependencies(get_muslc muslc)
# build picotcp using its very own build system
include(ExternalProject)
ExternalProject_Add(
picotcp_external
SOURCE_DIR
"picotcp_external"
DOWNLOAD_COMMAND
rsync
-qur
--exclude='.git'
${PICOTCP_PATH}
<SOURCE_DIR>
UPDATE_COMMAND
""
PATCH_COMMAND
sed
-i
"s/(CROSS_COMPILE)gcc/(C_COMPILER)/g"
picotcp/Makefile
CONFIGURE_COMMAND
""
BUILD_COMMAND
cd
<SOURCE_DIR>/picotcp/
&&
sh
build.sh
BUILD_IN_SOURCE
1
INSTALL_COMMAND
""
EXCLUDE_FROM_ALL
BUILD_BYPRODUCTS
"<SOURCE_DIR>/picotcp/build/lib/libpicotcp.a"
DEPENDS
get_muslc
)
file(
GLOB
deps
${PICOTCP_PATH}/modules/*.c
${PICOTCP_PATH}/modules/*.h
${PICOTCP_PATH}/stack/*.c
${PICOTCP_PATH}/include/**/*.h
)
# Add file dependencies to picotcp
ExternalProject_Add_StepDependencies(
picotcp_external
download
DEPENDS
${PICOTCP_PATH}/Makefile
DEPENDS
${deps}
)
# get the dir that the picotcp sources have been copied to by ExternalProject_Add
ExternalProject_Get_Property(picotcp_external SOURCE_DIR)
set(BUILD_DIR "${SOURCE_DIR}/picotcp/build/")
DeclareExternalProjObjectFiles(picotcp_external "${BUILD_DIR}/lib/" FILES "libpicotcp.a")
# create a library which is the sources
add_library(picotcp_sources STATIC IMPORTED GLOBAL)
add_dependencies(picotcp_sources picotcp_external)
set_property(TARGET picotcp_sources PROPERTY IMPORTED_LOCATION "${BUILD_DIR}/lib/libpicotcp.a")
# create a library which is the header files, that depends on the sources
add_library(picotcp INTERFACE)
add_dependencies(picotcp picotcp_sources)
set_property(TARGET picotcp PROPERTY INTERFACE_LINK_LIBRARIES picotcp_sources)
target_include_directories(
picotcp
INTERFACE
"${BUILD_DIR}/include" "$<TARGET_PROPERTY:picotcp_Config,INTERFACE_INCLUDE_DIRECTORIES>"
"$<TARGET_PROPERTY:sel4_autoconf,INTERFACE_INCLUDE_DIRECTORIES>"
)
endif()
if(LibPicotcpBsd)
# find pico tcp location
find_file(
PICOTCP_BSD_PATH picotcp-bsd
PATHS ${CMAKE_SOURCE_DIR}/projects
CMAKE_FIND_ROOT_PATH_BOTH
)
mark_as_advanced(FORCE PICOTCP_BSD_PATH)
if("${PICOTCP_BSD_PATH}" STREQUAL "PICOTCP_BSD_PATH-NOTFOUND")
message(
FATAL_ERROR
"Failed to find picotcp-bsd. Consider cmake -DPICOTCP_BSD_PATH=/path/to/picotcp-bsd"
)
endif()
add_definitions(-DSTDSOCKET)
add_definitions(-U__linux__)
add_definitions(-D_SYS_POLL_H)
# create picotcp_bsd library
add_library(
picotcp_bsd
STATIC
EXCLUDE_FROM_ALL
${PICOTCP_BSD_PATH}/pico_bsd_sockets.c
${PICOTCP_BSD_PATH}/pico_osal_noos.c
)
target_include_directories(picotcp_bsd PUBLIC ${PICOTCP_BSD_PATH})
target_link_libraries(picotcp_bsd muslc picotcp picotcp_Config sel4_autoconf)
endif()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/gaojuxin09/la-util_libs.git
[email protected]:gaojuxin09/la-util_libs.git
gaojuxin09
la-util_libs
la-util_libs
master

搜索帮助