xref: /aosp_15_r20/external/curl/src/CMakeLists.txt (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
2*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
3*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
4*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
5*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
6*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
7*6236dae4SAndroid Build Coastguard Worker#
8*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
9*6236dae4SAndroid Build Coastguard Worker#
10*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
11*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
12*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
13*6236dae4SAndroid Build Coastguard Worker#
14*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
16*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
17*6236dae4SAndroid Build Coastguard Worker#
18*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
20*6236dae4SAndroid Build Coastguard Worker#
21*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
22*6236dae4SAndroid Build Coastguard Worker#
23*6236dae4SAndroid Build Coastguard Worker###########################################################################
24*6236dae4SAndroid Build Coastguard Workerset(EXE_NAME curl)
25*6236dae4SAndroid Build Coastguard Workeradd_definitions("-DBUILDING_CURL")
26*6236dae4SAndroid Build Coastguard Worker
27*6236dae4SAndroid Build Coastguard Workerif(ENABLE_CURL_MANUAL AND HAVE_MANUAL_TOOLS)
28*6236dae4SAndroid Build Coastguard Worker  add_definitions("-DUSE_MANUAL")
29*6236dae4SAndroid Build Coastguard Worker  add_custom_command(
30*6236dae4SAndroid Build Coastguard Worker    OUTPUT "tool_hugehelp.c"
31*6236dae4SAndroid Build Coastguard Worker    COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_setup.h\"" > "tool_hugehelp.c"
32*6236dae4SAndroid Build Coastguard Worker    COMMAND ${CMAKE_COMMAND} -E echo "#ifndef HAVE_LIBZ" >> "tool_hugehelp.c"
33*6236dae4SAndroid Build Coastguard Worker    COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl"    < "${CURL_ASCIIPAGE}" >> "tool_hugehelp.c"
34*6236dae4SAndroid Build Coastguard Worker    COMMAND ${CMAKE_COMMAND} -E echo "#else" >> "tool_hugehelp.c"
35*6236dae4SAndroid Build Coastguard Worker    COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl" -c < "${CURL_ASCIIPAGE}" >> "tool_hugehelp.c"
36*6236dae4SAndroid Build Coastguard Worker    COMMAND ${CMAKE_COMMAND} -E echo "#endif /* HAVE_LIBZ */" >> "tool_hugehelp.c"
37*6236dae4SAndroid Build Coastguard Worker    DEPENDS
38*6236dae4SAndroid Build Coastguard Worker      generate-curl.1
39*6236dae4SAndroid Build Coastguard Worker      "${CMAKE_CURRENT_SOURCE_DIR}/mkhelp.pl"
40*6236dae4SAndroid Build Coastguard Worker      "${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h"
41*6236dae4SAndroid Build Coastguard Worker      "${CURL_ASCIIPAGE}"
42*6236dae4SAndroid Build Coastguard Worker    VERBATIM)
43*6236dae4SAndroid Build Coastguard Workerelse()
44*6236dae4SAndroid Build Coastguard Worker  add_custom_command(
45*6236dae4SAndroid Build Coastguard Worker    OUTPUT "tool_hugehelp.c"
46*6236dae4SAndroid Build Coastguard Worker    COMMAND ${CMAKE_COMMAND} -E echo "#include \"tool_hugehelp.h\"" > "tool_hugehelp.c"
47*6236dae4SAndroid Build Coastguard Worker    DEPENDS
48*6236dae4SAndroid Build Coastguard Worker      "${CMAKE_CURRENT_SOURCE_DIR}/tool_hugehelp.h"
49*6236dae4SAndroid Build Coastguard Worker    VERBATIM)
50*6236dae4SAndroid Build Coastguard Workerendif()
51*6236dae4SAndroid Build Coastguard Worker
52*6236dae4SAndroid Build Coastguard Worker# Get 'CURL_CFILES', 'CURLX_CFILES', 'CURL_HFILES', 'CURLTOOL_LIBCURL_CFILES' variables
53*6236dae4SAndroid Build Coastguard Workertransform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
54*6236dae4SAndroid Build Coastguard Workerinclude("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake")
55*6236dae4SAndroid Build Coastguard Worker
56*6236dae4SAndroid Build Coastguard Workerif(CURL_CA_EMBED_SET)
57*6236dae4SAndroid Build Coastguard Worker  if(PERL_FOUND)
58*6236dae4SAndroid Build Coastguard Worker    add_definitions("-DCURL_CA_EMBED")
59*6236dae4SAndroid Build Coastguard Worker    add_custom_command(
60*6236dae4SAndroid Build Coastguard Worker      OUTPUT "tool_ca_embed.c"
61*6236dae4SAndroid Build Coastguard Worker      COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/mk-file-embed.pl" --var curl_ca_embed
62*6236dae4SAndroid Build Coastguard Worker        < "${CURL_CA_EMBED}" > "tool_ca_embed.c"
63*6236dae4SAndroid Build Coastguard Worker      DEPENDS
64*6236dae4SAndroid Build Coastguard Worker        "${CMAKE_CURRENT_SOURCE_DIR}/mk-file-embed.pl"
65*6236dae4SAndroid Build Coastguard Worker        "${CURL_CA_EMBED}"
66*6236dae4SAndroid Build Coastguard Worker      VERBATIM)
67*6236dae4SAndroid Build Coastguard Worker    list(APPEND CURL_CFILES "tool_ca_embed.c")
68*6236dae4SAndroid Build Coastguard Worker  else()
69*6236dae4SAndroid Build Coastguard Worker    message(WARNING "Perl not found. Will not embed the CA bundle.")
70*6236dae4SAndroid Build Coastguard Worker  endif()
71*6236dae4SAndroid Build Coastguard Workerendif()
72*6236dae4SAndroid Build Coastguard Worker
73*6236dae4SAndroid Build Coastguard Workerif(WIN32)
74*6236dae4SAndroid Build Coastguard Worker  list(APPEND CURL_CFILES "curl.rc")
75*6236dae4SAndroid Build Coastguard Workerendif()
76*6236dae4SAndroid Build Coastguard Worker
77*6236dae4SAndroid Build Coastguard Workerif(BUILD_STATIC_CURL)
78*6236dae4SAndroid Build Coastguard Worker  set(CURLX_CFILES ${CURLTOOL_LIBCURL_CFILES})
79*6236dae4SAndroid Build Coastguard Workerendif()
80*6236dae4SAndroid Build Coastguard Worker
81*6236dae4SAndroid Build Coastguard Workerif(ENABLE_CURLDEBUG)
82*6236dae4SAndroid Build Coastguard Worker  # We must compile this source separately to avoid memdebug.h redefinitions
83*6236dae4SAndroid Build Coastguard Worker  # applying to them.
84*6236dae4SAndroid Build Coastguard Worker  set_source_files_properties("../lib/curl_multibyte.c" PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
85*6236dae4SAndroid Build Coastguard Workerendif()
86*6236dae4SAndroid Build Coastguard Worker
87*6236dae4SAndroid Build Coastguard Workeradd_executable(
88*6236dae4SAndroid Build Coastguard Worker  ${EXE_NAME}
89*6236dae4SAndroid Build Coastguard Worker  ${CURL_CFILES} ${CURLX_CFILES} ${CURL_HFILES}
90*6236dae4SAndroid Build Coastguard Worker)
91*6236dae4SAndroid Build Coastguard Worker
92*6236dae4SAndroid Build Coastguard Workeradd_executable(
93*6236dae4SAndroid Build Coastguard Worker  ${PROJECT_NAME}::${EXE_NAME}
94*6236dae4SAndroid Build Coastguard Worker  ALIAS ${EXE_NAME}
95*6236dae4SAndroid Build Coastguard Worker)
96*6236dae4SAndroid Build Coastguard Worker
97*6236dae4SAndroid Build Coastguard Workeradd_library(
98*6236dae4SAndroid Build Coastguard Worker  curltool  # special libcurltool library just for unittests
99*6236dae4SAndroid Build Coastguard Worker  STATIC
100*6236dae4SAndroid Build Coastguard Worker  EXCLUDE_FROM_ALL
101*6236dae4SAndroid Build Coastguard Worker  ${CURL_CFILES} ${CURLTOOL_LIBCURL_CFILES} ${CURL_HFILES}
102*6236dae4SAndroid Build Coastguard Worker)
103*6236dae4SAndroid Build Coastguard Workertarget_compile_definitions(curltool PUBLIC "UNITTESTS" "CURL_STATICLIB")
104*6236dae4SAndroid Build Coastguard Workertarget_link_libraries(curltool PRIVATE ${CURL_LIBS})
105*6236dae4SAndroid Build Coastguard Worker
106*6236dae4SAndroid Build Coastguard Workerif(CURL_HAS_LTO)
107*6236dae4SAndroid Build Coastguard Worker  set_target_properties(${EXE_NAME} PROPERTIES
108*6236dae4SAndroid Build Coastguard Worker    INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
109*6236dae4SAndroid Build Coastguard Worker    INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
110*6236dae4SAndroid Build Coastguard Workerendif()
111*6236dae4SAndroid Build Coastguard Worker
112*6236dae4SAndroid Build Coastguard Workerif(ENABLE_UNICODE AND MINGW)
113*6236dae4SAndroid Build Coastguard Worker  target_link_libraries(${EXE_NAME} "-municode")
114*6236dae4SAndroid Build Coastguard Workerendif()
115*6236dae4SAndroid Build Coastguard Worker
116*6236dae4SAndroid Build Coastguard Workersource_group("curlX source files" FILES ${CURLX_CFILES})
117*6236dae4SAndroid Build Coastguard Workersource_group("curl source files" FILES ${CURL_CFILES})
118*6236dae4SAndroid Build Coastguard Workersource_group("curl header files" FILES ${CURL_HFILES})
119*6236dae4SAndroid Build Coastguard Worker
120*6236dae4SAndroid Build Coastguard Workerinclude_directories(
121*6236dae4SAndroid Build Coastguard Worker  "${PROJECT_BINARY_DIR}/lib"  # for "curl_config.h"
122*6236dae4SAndroid Build Coastguard Worker  "${PROJECT_SOURCE_DIR}/lib"  # for "curl_setup.h"
123*6236dae4SAndroid Build Coastguard Worker  # This is needed as tool_hugehelp.c is generated in the binary dir
124*6236dae4SAndroid Build Coastguard Worker  "${PROJECT_SOURCE_DIR}/src"  # for "tool_hugehelp.h"
125*6236dae4SAndroid Build Coastguard Worker)
126*6236dae4SAndroid Build Coastguard Worker
127*6236dae4SAndroid Build Coastguard Worker# Build curl executable
128*6236dae4SAndroid Build Coastguard Workertarget_link_libraries(${EXE_NAME} ${LIB_SELECTED_FOR_EXE} ${CURL_LIBS})
129*6236dae4SAndroid Build Coastguard Worker
130*6236dae4SAndroid Build Coastguard Worker################################################################################
131*6236dae4SAndroid Build Coastguard Worker
132*6236dae4SAndroid Build Coastguard Workerinstall(TARGETS ${EXE_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION ${CMAKE_INSTALL_BINDIR})
133*6236dae4SAndroid Build Coastguard Workerexport(TARGETS ${EXE_NAME}
134*6236dae4SAndroid Build Coastguard Worker  FILE "${PROJECT_BINARY_DIR}/curl-target.cmake"
135*6236dae4SAndroid Build Coastguard Worker  NAMESPACE ${PROJECT_NAME}::
136*6236dae4SAndroid Build Coastguard Worker)
137