2
2
include (CMakeParseArguments )
3
3
include (SwiftBenchmarkUtils )
4
4
5
- macro (configure_build )
5
+ macro (configure_build )
6
6
add_definitions (-DSWIFT_EXEC -DSWIFT_LIBRARY_PATH -DONLY_PLATFORMS
7
7
-DSWIFT_OPTIMIZATION_LEVELS -DSWIFT_BENCHMARK_EMIT_SIB )
8
8
9
9
if (NOT ONLY_PLATFORMS )
10
- set (ONLY_PLATFORMS "macosx" "iphoneos" "appletvos" "watchos" )
10
+ set (ONLY_PLATFORMS "macosx" "iphoneos" "appletvos" "watchos" "linux" )
11
11
endif ()
12
12
13
- if (NOT SWIFT_EXEC )
14
- runcmd (COMMAND "xcrun" "-f" "swiftc"
15
- VARIABLE SWIFT_EXEC
16
- ERROR "Unable to find Swift driver" )
13
+ if ("${CMAKE_SYSTEM_NAME} " STREQUAL "Darwin" )
14
+ if (NOT SWIFT_EXEC )
15
+ runcmd (COMMAND "xcrun" "-f" "swiftc"
16
+ VARIABLE SWIFT_EXEC
17
+ ERROR "Unable to find Swift driver" )
18
+ endif ()
19
+
20
+ # If the CMAKE_C_COMPILER is already clang, don't find it again,
21
+ # thus allowing the --host-cc build-script argument to work here.
22
+ get_filename_component (c_compiler ${CMAKE_C_COMPILER} NAME )
23
+
24
+ if (${c_compiler} STREQUAL "clang" )
25
+ set (CLANG_EXEC ${CMAKE_C_COMPILER} )
26
+ else ()
27
+ runcmd (COMMAND "xcrun" "-toolchain" "${SWIFT_DARWIN_XCRUN_TOOLCHAIN} " "-f" "clang"
28
+ VARIABLE CLANG_EXEC
29
+ ERROR "Unable to find Clang driver" )
30
+ endif ()
31
+ elseif ("${CMAKE_SYSTEM_NAME} " STREQUAL "Linux" )
32
+ # We always require SWIFT_EXEC and CLANG_EXEC to be specified explicitly
33
+ # when compiling for Linux.
34
+ #
35
+ # TODO: Investigate if we can eliminate CLANG_EXEC/SWIFT_EXEC and use more
36
+ # normal like cmake patterns.
37
+ precondition (SWIFT_EXEC )
38
+ precondition (CLANG_EXEC )
39
+ else ()
40
+ message (FATAL_ERROR "Unsupported platform?!" )
17
41
endif ()
18
42
43
+ # We always infer the SWIFT_LIBRARY_PATH from SWIFT_EXEC unless
44
+ # SWIFT_LIBRARY_PATH is specified explicitly.
19
45
if (NOT SWIFT_LIBRARY_PATH )
20
46
get_filename_component (tmp_dir "${SWIFT_EXEC} " DIRECTORY )
21
47
get_filename_component (tmp_dir "${tmp_dir} " DIRECTORY )
22
48
set (SWIFT_LIBRARY_PATH "${tmp_dir} /lib/swift" )
23
49
endif ()
24
-
25
- # If the CMAKE_C_COMPILER is already clang, don't find it again,
26
- # thus allowing the --host-cc build-script argument to work here.
27
- get_filename_component (c_compiler ${CMAKE_C_COMPILER} NAME )
28
-
29
- if (${c_compiler} STREQUAL "clang" )
30
- set (CLANG_EXEC ${CMAKE_C_COMPILER} )
31
- else ()
32
- runcmd (COMMAND "xcrun" "-toolchain" "${SWIFT_DARWIN_XCRUN_TOOLCHAIN} " "-f" "clang"
33
- VARIABLE CLANG_EXEC
34
- ERROR "Unable to find Clang driver" )
35
- endif ()
36
50
endmacro ()
37
51
38
- macro ( configure_sdks )
52
+ macro ( configure_sdks_darwin )
39
53
set (macosx_arch "x86_64" )
40
54
set (iphoneos_arch "arm64" "armv7" )
41
55
set (appletvos_arch "arm64" )
@@ -54,6 +68,7 @@ macro (configure_sdks)
54
68
set (sdks )
55
69
set (platforms )
56
70
foreach (platform ${ONLY_PLATFORMS} )
71
+ set (${platform} _is_darwin TRUE )
57
72
execute_process (
58
73
COMMAND "xcrun" "--sdk" "${platform} " "--show-sdk-path"
59
74
OUTPUT_VARIABLE ${platform} _sdk
@@ -66,6 +81,31 @@ macro (configure_sdks)
66
81
endforeach ()
67
82
endmacro ()
68
83
84
+ macro (configure_sdks_linux )
85
+ # TODO: Get the correct triple.
86
+ set (linux_arch "x86_64" )
87
+ set (linux_ver "" ) # Linux doesn't use the ver field
88
+ set (linux_vendor "unknown" )
89
+ set (linux_triple_platform "linux" )
90
+ set (linux_sdk "" ) # Linux doesn't use sdks.
91
+ set (linux_is_darwin FALSE )
92
+
93
+ # This is not applicable on linux since on linux we do not use
94
+ # SDKs/frameworks when building our benchmarks.
95
+ set (sdks "N/A" )
96
+ set (platforms "linux" )
97
+ endmacro ()
98
+
99
+ macro (configure_sdks )
100
+ if ("${CMAKE_SYSTEM_NAME} " STREQUAL "Darwin" )
101
+ configure_sdks_darwin ()
102
+ elseif ("${CMAKE_SYSTEM_NAME} " STREQUAL "Linux" )
103
+ configure_sdks_linux ()
104
+ else ()
105
+ message (FATAL_ERROR "Unsupported system: ${CMAKE_SYSTEM_NAME} ?!" )
106
+ endif ()
107
+ endmacro ()
108
+
69
109
function (add_swift_benchmark_library objfile_out sibfile_out )
70
110
cmake_parse_arguments (BENCHLIB "" "MODULE_PATH;SOURCE_DIR;OBJECT_DIR" "SOURCES;LIBRARY_FLAGS;DEPENDS" ${ARGN} )
71
111
@@ -229,11 +269,13 @@ endfunction()
229
269
230
270
function (swift_benchmark_compile_archopts )
231
271
cmake_parse_arguments (BENCH_COMPILE_ARCHOPTS "" "PLATFORM;ARCH;OPT" "" ${ARGN} )
272
+ set (is_darwin ${${BENCH_COMPILE_ARCHOPTS_PLATFORM}_is_darwin} )
232
273
set (sdk ${${BENCH_COMPILE_ARCHOPTS_PLATFORM}_sdk} )
274
+ set (vendor ${${BENCH_COMPILE_ARCHOPTS_PLATFORM}_vendor} )
233
275
set (ver ${${BENCH_COMPILE_ARCHOPTS_PLATFORM}_ver} )
234
276
set (triple_platform ${${BENCH_COMPILE_ARCHOPTS_PLATFORM}_triple_platform} )
235
277
236
- set (target "${BENCH_COMPILE_ARCHOPTS_ARCH} -apple -${triple_platform}${ver} " )
278
+ set (target "${BENCH_COMPILE_ARCHOPTS_ARCH} -${vendor} -${triple_platform}${ver} " )
237
279
238
280
set (objdir "${CMAKE_CURRENT_BINARY_DIR} /${BENCH_COMPILE_ARCHOPTS_OPT} -${target} " )
239
281
file (MAKE_DIRECTORY "${objdir} " )
@@ -250,12 +292,16 @@ function (swift_benchmark_compile_archopts)
250
292
251
293
set (common_options
252
294
"-c"
253
- "-sdk" "${sdk} "
254
295
"-target" "${target} "
296
+ "-${BENCH_COMPILE_ARCHOPTS_OPT} " )
297
+
298
+ if (is_darwin )
299
+ list (APPEND common_options
300
+ "-I" "${srcdir} /utils/ObjectiveCTests"
255
301
"-F" "${sdk} /../../../Developer/Library/Frameworks"
256
- "-${BENCH_COMPILE_ARCHOPTS_OPT } "
257
- "-no-link-objc-runtime"
258
- "-I" " ${srcdir} /utils/ObjectiveCTests" )
302
+ "-sdk" " ${sdk } "
303
+ "-no-link-objc-runtime" )
304
+ endif ( )
259
305
260
306
set (opt_view_main_dir )
261
307
if (SWIFT_BENCHMARK_GENERATE_OPT_VIEW AND LLVM_HAVE_OPT_VIEWER_MODULES )
@@ -274,12 +320,15 @@ function (swift_benchmark_compile_archopts)
274
320
275
321
set (common_options_driver
276
322
"-c"
277
- "-sdk" "${sdk} "
278
323
"-target" "${target} "
324
+ "-${driver_opt} " )
325
+
326
+ if (is_darwin )
327
+ list (APPEND common_options_driver
328
+ "-sdk" "${sdk} "
279
329
"-F" "${sdk} /../../../Developer/Library/Frameworks"
280
- "-${driver_opt} "
281
330
"-no-link-objc-runtime" )
282
-
331
+ endif ()
283
332
set (bench_library_objects )
284
333
set (bench_library_sibfiles )
285
334
set (opt_view_dirs )
@@ -490,65 +539,97 @@ function (swift_benchmark_compile_archopts)
490
539
"${source} " )
491
540
list (APPEND SWIFT_BENCH_OBJFILES "${objdir} /${module_name} .o" )
492
541
493
- if ("${BENCH_COMPILE_ARCHOPTS_PLATFORM} " STREQUAL "macosx" )
494
- set (OUTPUT_EXEC "${benchmark-bin-dir}/Benchmark_${BENCH_COMPILE_ARCHOPTS_OPT} " )
495
- else ()
496
- set (OUTPUT_EXEC "${benchmark-bin-dir}/Benchmark_${BENCH_COMPILE_ARCHOPTS_OPT} -${target} " )
542
+ set (objcfile )
543
+ if (is_darwin )
544
+ set (objcfile "${objdir} /ObjectiveCTests.o" )
545
+ add_custom_command (
546
+ OUTPUT "${objcfile} "
547
+ DEPENDS "${srcdir} /utils/ObjectiveCTests/ObjectiveCTests.m"
548
+ "${srcdir} /utils/ObjectiveCTests/ObjectiveCTests.h"
549
+ COMMAND
550
+ "${CLANG_EXEC} "
551
+ "-fno-stack-protector"
552
+ "-fPIC"
553
+ "-Werror=date-time"
554
+ "-fcolor-diagnostics"
555
+ "-O3"
556
+ "-target" "${target} "
557
+ "-isysroot" "${sdk} "
558
+ "-fobjc-arc"
559
+ "-arch" "${BENCH_COMPILE_ARCHOPTS_ARCH} "
560
+ "-F" "${sdk} /../../../Developer/Library/Frameworks"
561
+ "-m${triple_platform} -version-min=${ver} "
562
+ "-I" "${srcdir} /utils/ObjectiveCTests"
563
+ "${srcdir} /utils/ObjectiveCTests/ObjectiveCTests.m"
564
+ "-c"
565
+ "-o" "${objcfile} " )
497
566
endif ()
498
567
499
- set (objcfile "${objdir} /ObjectiveCTests.o" )
500
- add_custom_command (
501
- OUTPUT "${objcfile} "
502
- DEPENDS "${srcdir} /utils/ObjectiveCTests/ObjectiveCTests.m"
503
- "${srcdir} /utils/ObjectiveCTests/ObjectiveCTests.h"
504
- COMMAND
505
- "${CLANG_EXEC} "
506
- "-fno-stack-protector"
507
- "-fPIC"
508
- "-Werror=date-time"
509
- "-fcolor-diagnostics"
510
- "-O3"
511
- "-target" "${target} "
512
- "-isysroot" "${sdk} "
513
- "-fobjc-arc"
514
- "-arch" "${BENCH_COMPILE_ARCHOPTS_ARCH} "
515
- "-F" "${sdk} /../../../Developer/Library/Frameworks"
516
- "-m${triple_platform} -version-min=${ver} "
517
- "-I" "${srcdir} /utils/ObjectiveCTests"
518
- "${srcdir} /utils/ObjectiveCTests/ObjectiveCTests.m"
519
- "-c"
520
- "-o" "${objcfile} " )
568
+ if (is_darwin )
569
+ # If host == target.
570
+ if ("${BENCH_COMPILE_ARCHOPTS_PLATFORM} " STREQUAL "macosx" )
571
+ set (OUTPUT_EXEC "${benchmark-bin-dir}/Benchmark_${BENCH_COMPILE_ARCHOPTS_OPT} " )
572
+ else ()
573
+ set (OUTPUT_EXEC "${benchmark-bin-dir}/Benchmark_${BENCH_COMPILE_ARCHOPTS_OPT} -${target} " )
574
+ endif ()
575
+ else ()
576
+ # If we are on Linux, we do not support cross compiling.
577
+ set (OUTPUT_EXEC "${benchmark-bin-dir}/Benchmark_${BENCH_COMPILE_ARCHOPTS_OPT} " )
578
+ endif ()
521
579
522
- add_custom_command (
523
- OUTPUT "${OUTPUT_EXEC} "
524
- DEPENDS
525
- ${bench_library_objects} ${bench_driver_objects} ${SWIFT_BENCH_OBJFILES}
526
- "${objcfile} " ${opt_view_dirs}
527
- COMMAND
528
- "${CLANG_EXEC} "
529
- "-fno-stack-protector"
530
- "-fPIC"
531
- "-Werror=date-time"
532
- "-fcolor-diagnostics"
533
- "-O3"
534
- "-Wl,-search_paths_first"
535
- "-Wl,-headerpad_max_install_names"
536
- "-target" "${target} "
537
- "-isysroot" "${sdk} "
538
- "-arch" "${BENCH_COMPILE_ARCHOPTS_ARCH} "
539
- "-F" "${sdk} /../../../Developer/Library/Frameworks"
540
- "-m${triple_platform} -version-min=${ver} "
541
- "-lobjc"
542
- "-L${SWIFT_LIBRARY_PATH} /${BENCH_COMPILE_ARCHOPTS_PLATFORM} "
543
- "-Xlinker" "-rpath"
544
- "-Xlinker" "@executable_path/../lib/swift/${BENCH_COMPILE_ARCHOPTS_PLATFORM} "
545
- ${bench_library_objects}
546
- ${bench_driver_objects}
547
- ${SWIFT_BENCH_OBJFILES}
548
- ${objcfile}
549
- "-o" "${OUTPUT_EXEC} "
550
- COMMAND
580
+ # TODO: Unify the linux and darwin builds here.
581
+ #
582
+ # We are avoiding this for now until it is investigated if swiftc and clang
583
+ # both do exactly the same thing with both sets of arguments. It also lets us
584
+ # avoid issues around code-signing.
585
+ if (is_darwin )
586
+ add_custom_command (
587
+ OUTPUT "${OUTPUT_EXEC} "
588
+ DEPENDS
589
+ ${bench_library_objects} ${bench_driver_objects} ${SWIFT_BENCH_OBJFILES}
590
+ "${objcfile} " ${opt_view_dirs}
591
+ COMMAND
592
+ "${CLANG_EXEC} "
593
+ "-fno-stack-protector"
594
+ "-fPIC"
595
+ "-Werror=date-time"
596
+ "-fcolor-diagnostics"
597
+ "-O3"
598
+ "-Wl,-search_paths_first"
599
+ "-Wl,-headerpad_max_install_names"
600
+ "-target" "${target} "
601
+ "-isysroot" "${sdk} "
602
+ "-arch" "${BENCH_COMPILE_ARCHOPTS_ARCH} "
603
+ "-F" "${sdk} /../../../Developer/Library/Frameworks"
604
+ "-m${triple_platform} -version-min=${ver} "
605
+ "-lobjc"
606
+ "-L${SWIFT_LIBRARY_PATH} /${BENCH_COMPILE_ARCHOPTS_PLATFORM} "
607
+ "-Xlinker" "-rpath"
608
+ "-Xlinker" "@executable_path/../lib/swift/${BENCH_COMPILE_ARCHOPTS_PLATFORM} "
609
+ ${bench_library_objects}
610
+ ${bench_driver_objects}
611
+ ${SWIFT_BENCH_OBJFILES}
612
+ ${objcfile}
613
+ "-o" "${OUTPUT_EXEC} "
614
+ COMMAND
551
615
"codesign" "-f" "-s" "-" "${OUTPUT_EXEC} " )
616
+ else ()
617
+ # TODO: rpath.
618
+ add_custom_command (
619
+ OUTPUT "${OUTPUT_EXEC} "
620
+ DEPENDS
621
+ ${bench_library_objects} ${bench_driver_objects} ${SWIFT_BENCH_OBJFILES}
622
+ "${objcfile} " ${opt_view_dirs}
623
+ COMMAND
624
+ "${SWIFT_EXEC} "
625
+ "-O"
626
+ "-target" "${target} "
627
+ "-L${SWIFT_LIBRARY_PATH} /${BENCH_COMPILE_ARCHOPTS_PLATFORM} "
628
+ ${bench_library_objects}
629
+ ${bench_driver_objects}
630
+ ${SWIFT_BENCH_OBJFILES}
631
+ "-o" "${OUTPUT_EXEC} " )
632
+ endif ()
552
633
set (new_output_exec "${OUTPUT_EXEC} " PARENT_SCOPE )
553
634
endfunction ()
554
635
0 commit comments