blob: 22a181fb160c029ca813fb119fbdfc0f63ab96de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
enable_language(C)
set(prototypes [[
#include <stdio.h>
#include <zlib.h>
#include <resolv.h>
int func1();
int func2();
int func3();
int func4();
int func5();
]])
set(impl [[
{
printf("%p %p\n", compress, res_close);
return func1() + func2() + func3() + func4() + func5();
}
]])
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/mainOuter.c
"${prototypes}\nint main(int argc, char** argv) ${impl}"
)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/funcOuter.c
"${prototypes}\nint funcOuter() ${impl}"
)
foreach(i RANGE 1 5)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/func${i}.c
"int func${i}() { return 32 + ${i}; }\n"
)
endforeach()
add_executable(app1 mainOuter.c)
add_library(static1 STATIC funcOuter.c)
add_library(shared1 SHARED funcOuter.c)
add_library(module1 MODULE funcOuter.c)
add_library(obj1 OBJECT funcOuter.c)
add_library(staticFramework1 STATIC funcOuter.c)
add_library(sharedFramework1 SHARED funcOuter.c)
set_target_properties(staticFramework1 PROPERTIES FRAMEWORK TRUE)
set_target_properties(sharedFramework1 PROPERTIES FRAMEWORK TRUE)
add_library(static2 STATIC func1.c)
add_library(shared2 SHARED func2.c)
add_library(obj2 OBJECT func3.c)
add_library(staticFramework2 STATIC func4.c)
add_library(sharedFramework2 SHARED func5.c)
set_target_properties(staticFramework2 PROPERTIES FRAMEWORK TRUE)
set_target_properties(sharedFramework2 PROPERTIES FRAMEWORK TRUE)
# Pick a couple of libraries that are always present in the Xcode SDK
find_library(libz z REQUIRED)
find_library(libresolv resolv REQUIRED)
add_library(imported2 UNKNOWN IMPORTED)
set_target_properties(imported2 PROPERTIES IMPORTED_LOCATION ${libz})
# Save these for the check script to use
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/foundLibs.cmake "
set(libz \"${libz}\")
set(libresolv \"${libresolv}\")
")
set(mainTargets
app1
static1
shared1
module1
obj1
staticFramework1
sharedFramework1
)
set(linkToThings
static2
shared2
obj2
staticFramework2
sharedFramework2
imported2
${libresolv}
)
foreach(mainTarget IN LISTS mainTargets)
foreach(linkTo IN LISTS linkToThings)
target_link_libraries(${mainTarget} PRIVATE ${linkTo})
endforeach()
endforeach()
|