-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathCMakeLists.txt
134 lines (112 loc) · 4.46 KB
/
CMakeLists.txt
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
cmake_minimum_required(VERSION 3.19)
string(REGEX REPLACE "(.*)/" "" THIS_FOLDER_NAME "${CMAKE_CURRENT_SOURCE_DIR}")
project(${THIS_FOLDER_NAME})
option(C74_BUILD_FAT "Build Universal Externals" OFF) # not supported (you're on your own! :-)
option(ENABLE_LTO "enable link-time / interprocedural optimization" OFF)
# grouped build options
option(BUILD_PYTHON3_CORE_EXTERNALS "Enable building python3 core externals" OFF)
option(BUILD_PYTHON3_EXPERIMENTAL_EXTERNALS "Enable building python3 experimental externals" OFF)
option(BUILD_POCKETPY_EXTERNALS "Enable building pocketpy-based externals" OFF)
option(BUILD_THIRDPARTY_EXTERNALS "Enable building third-party externals" OFF)
option(BUILD_NET_EXTERNALS "Enable building networking externals" OFF)
option(BUILD_DEMO_EXTERNALS "Enable demo (scratch) externals" OFF)
# micropython external build options
option(FETCH_MICROPYTHON "Download latest micropython and use that to build external" OFF)
option(BUILD_MICROPYTHON_EXTERNAL "Build the micropython external" OFF)
# string options
set(BUILD_VARIANT "" CACHE STRING "specify build variant")
set(BUILD_TARGETS "" CACHE STRING "specify build targets")
# use ccache if available
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
message(STATUS "Found ccache in ${CCACHE_PROGRAM}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
endif()
if (ENABLE_LTO_IPO)
include(CheckIPOSupported)
check_ipo_supported(RESULT ipo_lto_supported OUTPUT check_lto_ipo_error)
if(ipo_lto_supported)
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
message(STATUS "IPO / LTO enabled")
else()
message(STATUS "IPO / LTO not supported: <${check_lto_ipo_error}>")
endif()
endif()
message(STATUS "CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
if (${CMAKE_GENERATOR} MATCHES "Xcode")
if (${XCODE_VERSION} VERSION_LESS 10)
message(STATUS "Xcode 10 or higher is required. Please install from the Mac App Store.")
return ()
# elseif(${XCODE_VERSION} VERSION_GREATER_EQUAL 12)
# set(C74_BUILD_FAT YES)
endif ()
endif ()
if (NOT CMAKE_OSX_ARCHITECTURES)
if(C74_BUILD_FAT)
set(CMAKE_OSX_ARCHITECTURES "x86_64;arm64" CACHE STRING "macOS architecture" FORCE)
else()
set(CMAKE_OSX_ARCHITECTURES ${CMAKE_SYSTEM_PROCESSOR} CACHE STRING "macOS architecture" FORCE)
endif()
message("CMAKE_OSX_ARCHITECTURES set to ${CMAKE_OSX_ARCHITECTURES}")
endif()
# i.e check if homebrew is used, set local prefix accordingly
set(local_prefix "/usr/local")
execute_process(
COMMAND brew --prefix
OUTPUT_VARIABLE homebrew_prefix
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(DEFINED homebrew_prefix)
set(HAS_HOMEBREW 1)
set(local_prefix ${homebrew_prefix})
endif()
endif()
# include functions to use later
include(${CMAKE_SOURCE_DIR}/source/scripts/cmake/fn_python3_external.cmake)
if(BUILD_PYTHON3_CORE_EXTERNALS)
list(APPEND BUILD_TARGETS py pyjs)
endif()
if(BUILD_PYTHON3_EXPERIMENTAL_EXTERNALS)
list(APPEND BUILD_TARGETS krait cobra mamba mxpy)
endif()
if(BUILD_POCKETPY_EXTERNALS)
list(APPEND BUILD_TARGETS pktpy pktpy2)
endif()
if(BUILD_NETWORKING_EXTERNALS)
list(APPEND BUILD_TARGETS zedit zpy ztp jmx)
endif()
set(THIRDPARTY_EXTERNALS shell jit.fill2 jit.foo)
if(BUILD_THIRDPARTY_EXTERNALS)
list(APPEND BUILD_TARGETS ${THIRDPARTY_EXTERNALS})
endif()
set(DEMO_EXTERNALS mx pyx cmx demo)
if(BUILD_DEMO_EXTERNALS)
list(APPEND BUILD_TARGETS ${DEMO_EXTERNALS})
endif()
if(BUILD_MICROPYTHON_EXTERNAL)
list(APPEND BUILD_TARGETS mpy)
endif()
foreach(proj ${BUILD_TARGETS})
message(STATUS "to build: ${proj}")
if(proj IN_LIST THIRDPARTY_EXTERNALS)
add_subdirectory(${CMAKE_SOURCE_DIR}/source/thirdparty/${proj})
elseif(proj IN_LIST DEMO_EXTERNALS)
add_subdirectory(${CMAKE_SOURCE_DIR}/source/demos/${proj})
else()
add_subdirectory(${CMAKE_SOURCE_DIR}/source/projects/${proj})
endif()
endforeach()
# cache cleanup at end of build
unset(C74_BUILD_FAT CACHE)
unset(ENABLE_LTO CACHE)
unset(BUILD_TARGETS CACHE)
unset(BUILD_VARIANT CACHE)
unset(BUILD_PYTHON3_CORE_EXTERNALS CACHE)
unset(BUILD_PYTHON3_EXPERIMENTAL_EXTERNALS CACHE)
unset(BUILD_POCKETPY_EXTERNALS CACHE)
unset(BUILD_THIRDPARTY_EXTERNALS CACHE)
unset(BUILD_NET_EXTERNALS CACHE)
unset(BUILD_DEMO_EXTERNALS CACHE)
unset(FETCH_MICROPYTHON CACHE)
unset(BUILD_MICROPYTHON_EXTERNAL CACHE)