@@ -15,9 +15,30 @@ set(CLR_DIR ${CMAKE_CURRENT_SOURCE_DIR})
15
15
set (VM_DIR ${CMAKE_CURRENT_SOURCE_DIR} /src/vm )
16
16
set (GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} /src/inc )
17
17
18
+ function (clr_unknown_arch )
19
+ if (WIN32 )
20
+ message (FATAL_ERROR "Only AMD64 and I386 are supported" )
21
+ else ()
22
+ message (FATAL_ERROR "Only AMD64, ARM64 and ARM are supported" )
23
+ endif ()
24
+ endfunction ()
25
+
18
26
if (CMAKE_SYSTEM_NAME STREQUAL Linux )
19
27
set (CLR_CMAKE_PLATFORM_UNIX 1 )
20
- set (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 1 )
28
+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 )
29
+ set (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 1 )
30
+ elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l )
31
+ set (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM 1 )
32
+ # Because we don't use CMAKE_C_COMPILER/CMAKE_CXX_COMPILER to use clang
33
+ # we have to set the triple by adding a compiler argument
34
+ add_compile_options (-target armv7-linux-gnueabihf )
35
+ add_compile_options (-mthumb )
36
+ add_compile_options (-mfpu=vfpv3 )
37
+ elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 )
38
+ set (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64 1 )
39
+ else ()
40
+ clr_unknown_arch ()
41
+ endif ()
21
42
set (CLR_CMAKE_PLATFORM_LINUX 1 )
22
43
endif (CMAKE_SYSTEM_NAME STREQUAL Linux )
23
44
@@ -46,6 +67,24 @@ if(CMAKE_SYSTEM_NAME STREQUAL NetBSD)
46
67
set (CLR_CMAKE_PLATFORM_NETBSD 1 )
47
68
endif (CMAKE_SYSTEM_NAME STREQUAL NetBSD )
48
69
70
+ if (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM )
71
+ set (CLR_CMAKE_PLATFORM_ARCH_ARM 1 )
72
+ elseif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64 )
73
+ set (CLR_CMAKE_PLATFORM_ARCH_ARM64 1 )
74
+ elseif (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 )
75
+ set (CLR_CMAKE_PLATFORM_ARCH_AMD64 1 )
76
+ elseif (WIN32 )
77
+ if (CLR_CMAKE_TARGET_ARCH STREQUAL x64 )
78
+ set (CLR_CMAKE_PLATFORM_ARCH_AMD64 1 )
79
+ set (IS_64BIT_BUILD 1 )
80
+ elseif (CLR_CMAKE_TARGET_ARCH STREQUAL x86 )
81
+ set (CLR_CMAKE_PLATFORM_ARCH_I386 1 )
82
+ set (IS_64BIT_BUILD 0 )
83
+ else ()
84
+ clr_unknown_arch ()
85
+ endif ()
86
+ endif ()
87
+
49
88
if (WIN32 )
50
89
enable_language (ASM_MASM )
51
90
else ()
@@ -121,7 +160,7 @@ function(generate_exports_file inputFilename outputFilename)
121
160
add_custom_command (
122
161
OUTPUT ${outputFilename}
123
162
COMMAND ${AWK} -f ${CMAKE_SOURCE_DIR} /${AWK_SCRIPT} ${inputFilename} >${outputFilename}
124
- DEPENDS ${inputFilename}
163
+ DEPENDS ${inputFilename} ${CMAKE_SOURCE_DIR} /${AWK_SCRIPT}
125
164
COMMENT "Generating exports file ${outputFilename} "
126
165
)
127
166
set_source_files_properties (${outputFilename}
@@ -203,21 +242,15 @@ add_subdirectory(src/pal/prebuilt/inc)
203
242
204
243
if (WIN32 )
205
244
set (OVERRIDE_CMAKE_CXX_FLAGS 1 )
206
-
207
- # Set flag to indicate if this will be a 64bit Windows build
208
- if (CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64 )
209
- set (IS_64BIT_BUILD 1 )
210
- endif (CMAKE_SYSTEM_PROCESSOR STREQUAL AMD64 )
211
-
212
245
elseif (CLR_CMAKE_PLATFORM_UNIX )
213
246
# Set flag to indicate if this will be a 64bit build
214
247
# CMAKE_SYSTEM_PROCESSOR returns the value of `uname -p`.
215
248
# For the AMD/Intel 64bit architecure two different strings are common.
216
249
# Linux and Darwin identify it as "x86_64" while FreeBSD uses the
217
250
# "amd64" string. Accept either of the two here.
218
- if (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 )
251
+ if (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 )
219
252
set (IS_64BIT_BUILD 1 )
220
- endif (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 )
253
+ endif (CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL amd64 OR CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64 )
221
254
222
255
add_definitions (-DFEATURE_IMPLICIT_TLS )
223
256
endif (WIN32 )
@@ -255,6 +288,10 @@ add_compile_options(/wd4960 /wd4961 /wd4603 /wd4627 /wd4838 /wd4456 /wd4457 /wd4
255
288
add_compile_options (/O1 ) # minimize space
256
289
add_compile_options (/Zi ) # enable debugging information
257
290
291
+ if (CLR_CMAKE_PLATFORM_ARCH_I386 )
292
+ add_compile_options (/Gz )
293
+ endif (CLR_CMAKE_PLATFORM_ARCH_I386 )
294
+
258
295
add_compile_options ($< $< OR:$< CONFIG:Release> ,$< CONFIG:Relwithdebinfo> > :/GL> )
259
296
260
297
if (IS_64BIT_BUILD EQUAL 1 )
@@ -346,7 +383,6 @@ include_directories("src/pal/prebuilt/inc")
346
383
if (CLR_CMAKE_PLATFORM_UNIX )
347
384
include_directories ("src/pal/inc" )
348
385
include_directories ("src/pal/inc/rt" )
349
- include_directories ("src/pal/inc/rt/cpp" )
350
386
include_directories ("src/pal/src/safecrt" )
351
387
endif (CLR_CMAKE_PLATFORM_UNIX )
352
388
@@ -370,15 +406,25 @@ if (CLR_CMAKE_PLATFORM_UNIX)
370
406
371
407
if (IS_64BIT_BUILD )
372
408
add_definitions (-DBIT64=1 )
373
- add_definitions (-DFEATURE_PAL )
374
- else (IS_64BIT_BUILD )
375
- message (FATAL_ERROR "error: Detected non x86_64 target processor. Not supported!" )
376
409
endif (IS_64BIT_BUILD )
377
410
411
+ add_definitions (-DFEATURE_PAL )
412
+
378
413
if (CLR_CMAKE_PLATFORM_LINUX )
379
414
add_definitions (-D__LINUX__=1 )
380
- message ("Detected Linux x86_64" )
381
- add_definitions (-DLINUX64 )
415
+ if (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 )
416
+ message ("Detected Linux x86_64" )
417
+ add_definitions (-DLINUX64 )
418
+ elseif (CLR_CMAKE_PLATFORM_ARCH_ARM )
419
+ message ("Detected Linux ARM" )
420
+ add_definitions (-DLINUX32 )
421
+ elseif (CLR_CMAKE_PLATFORM_ARCH_ARM64 )
422
+ message ("Detected Linux ARM64" )
423
+ add_definitions (-DLINUX64 )
424
+ else ()
425
+ clr_unknown_arch ()
426
+ endif ()
427
+
382
428
endif (CLR_CMAKE_PLATFORM_LINUX )
383
429
if (CLR_CMAKE_PLATFORM_DARWIN )
384
430
message ("Detected OSX x86_64" )
@@ -404,12 +450,28 @@ add_definitions(-DNTDDI_VERSION=NTDDI_WIN8)
404
450
if (IS_64BIT_BUILD EQUAL 1 )
405
451
if (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 )
406
452
add_definitions (-DDBG_TARGET_AMD64_UNIX )
453
+ add_definitions (-D_TARGET_AMD64_=1 )
454
+ add_definitions (-DDBG_TARGET_AMD64 )
455
+ elseif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64 )
456
+ add_definitions (-DDBG_TARGET_ARM64_UNIX )
457
+ add_definitions (-D_TARGET_ARM64_=1 )
458
+ add_definitions (-DDBG_TARGET_ARM64 )
459
+ else ()
460
+ # Windows is assumed in this path -- fix this
461
+ add_definitions (-DDBG_TARGET_AMD64 )
462
+ add_definitions (-D_TARGET_AMD64_=1 )
407
463
endif (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 )
408
- add_definitions (-D_TARGET_AMD64_=1 )
409
- add_definitions (-DDBG_TARGET_AMD64 )
464
+ elseif (CLR_CMAKE_PLATFORM_ARCH_ARM )
465
+ if (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM )
466
+ add_definitions (-DDBG_TARGET_ARM_UNIX )
467
+ endif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM )
468
+ add_definitions (-D_TARGET_ARM_=1 )
469
+ add_definitions (-DDBG_TARGET_ARM )
470
+ elseif (CLR_CMAKE_PLATFORM_ARCH_I386 )
471
+ add_definitions (-D_TARGET_X86_=1 )
472
+ add_definitions (-DDBG_TARGET_X86 )
410
473
else ()
411
- # TODO: Support this
412
- message (FATAL_ERROR "Not Implemented!" )
474
+ clr_unknown_arch ()
413
475
endif (IS_64BIT_BUILD EQUAL 1 )
414
476
415
477
if (WIN32 )
@@ -425,10 +487,16 @@ if(WIN32)
425
487
add_definitions (-DEnC_SUPPORTED )
426
488
endif (WIN32 )
427
489
add_definitions (-DFEATURE_APPDOMAIN_RESOURCE_MONITORING )
428
- add_definitions (-DFEATURE_ARRAYSTUB_AS_IL )
490
+ if (CLR_CMAKE_PLATFORM_ARCH_AMD64 OR CLR_CMAKE_PLATFORM_ARCH_ARM OR CLR_CMAKE_PLATFORM_ARCH_ARM64 )
491
+ add_definitions (-DFEATURE_ARRAYSTUB_AS_IL )
492
+ endif ()
429
493
if (CLR_CMAKE_PLATFORM_UNIX )
430
494
add_definitions (-DFEATURE_STUBS_AS_IL )
431
- add_definitions (-DUNIX_AMD64_ABI )
495
+ if (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 )
496
+ add_definitions (-DUNIX_AMD64_ABI )
497
+ elseif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM )
498
+ add_definitions (-DUNIX_ARM_ABI )
499
+ endif ()
432
500
endif (CLR_CMAKE_PLATFORM_UNIX )
433
501
add_definitions (-DFEATURE_ASYNC_IO )
434
502
add_definitions (-DFEATURE_BCL_FORMATTING )
@@ -519,16 +587,27 @@ if(CLR_CMAKE_PLATFORM_UNIX)
519
587
add_definitions (-DFEATURE_DBGIPC_TRANSPORT_VM )
520
588
endif (CLR_CMAKE_PLATFORM_UNIX )
521
589
522
- if (IS_64BIT_BUILD EQUAL 1 )
523
- add_definitions (-D_AMD64_ )
524
- add_definitions (-D_AMD64_SIMULATOR_ )
525
- add_definitions (-D_AMD64_SIMULATOR_PERF_ )
526
- add_definitions (-D_AMD64_WORKAROUND_ )
527
- add_definitions (-D_WIN64 )
528
- add_definitions (-DAMD64 )
590
+ if (CLR_CMAKE_PLATFORM_ARCH_AMD64 )
591
+ add_definitions (-D_AMD64_ )
592
+ add_definitions (-D_AMD64_SIMULATOR_ )
593
+ add_definitions (-D_AMD64_SIMULATOR_PERF_ )
594
+ add_definitions (-D_AMD64_WORKAROUND_ )
595
+ add_definitions (-D_WIN64 )
596
+ add_definitions (-DAMD64 )
597
+ elseif (CLR_CMAKE_PLATFORM_ARCH_I386 )
598
+ add_definitions (-D_WIN32 )
599
+ add_definitions (-D_X86_ )
600
+ elseif (CLR_CMAKE_PLATFORM_ARCH_ARM )
601
+ add_definitions (-D_ARM_ )
602
+ add_definitions (-DARM )
603
+ add_definitions (-D_WIN32 )
604
+ elseif (CLR_CMAKE_PLATFORM_ARCH_ARM64 )
605
+ add_definitions (-D_ARM64_ )
606
+ add_definitions (-DARM64 )
607
+ add_definitions (-D_WIN64 )
529
608
else ()
530
- # TODO - Support this
531
- endif (IS_64BIT_BUILD EQUAL 1 )
609
+ clr_unknown_arch ()
610
+ endif ()
532
611
533
612
add_definitions (-D_SKIP_IF_SIMULATOR_ )
534
613
add_definitions (-D_SECURE_SCL=0 )
@@ -540,9 +619,20 @@ add_definitions(-DUNICODE)
540
619
add_definitions (-D_UNICODE )
541
620
542
621
if (IS_64BIT_BUILD EQUAL 1 )
543
- set (ARCH_SOURCES_DIR amd64 )
622
+ if (CLR_CMAKE_PLATFORM_UNIX_TARGET_AMD64 EQUAL 1 )
623
+ set (ARCH_SOURCES_DIR amd64 )
624
+ elseif (CLR_CMAKE_PLATFORM_UNIX_TARGET_ARM64 EQUAL 1 )
625
+ set (ARCH_SOURCES_DIR arm64 )
626
+ else ()
627
+ # Windows is assumed in this path -- fix this
628
+ set (ARCH_SOURCES_DIR amd64 )
629
+ endif ()
544
630
else ()
545
- set (ARCH_SOURCES_DIR i386 )
631
+ if (CLR_CMAKE_PLATFORM_ARCH_ARM )
632
+ set (ARCH_SOURCES_DIR arm )
633
+ else ()
634
+ set (ARCH_SOURCES_DIR i386 )
635
+ endif ()
546
636
endif (IS_64BIT_BUILD EQUAL 1 )
547
637
548
638
add_subdirectory (src )
0 commit comments