-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
165 lines (143 loc) · 5.23 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#
# New Bootstrap
#
cmake_minimum_required(VERSION 3.12)
project(yuni NONE) # Only for selfboot scripts
include(CTest)
set(YUNIROOT ${CMAKE_CURRENT_LIST_DIR})
get_filename_component(YUNIROOT ${YUNIROOT} ABSOLUTE)
include(${YUNIROOT}/config/implinfo.cmake)
set(BOOTDIR ${CMAKE_CURRENT_BINARY_DIR})
list(APPEND CMAKE_MODULE_PATH
# Private modules
${YUNIROOT}/cmake
# Public modules
${YUNIROOT}/cmake/public)
if(YUNI_WITH_YUNIBASE)
include(YuniBaseGenRunners)
set(YUNI_BASEDIR ${YUNIROOT})
if(IS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/vanilla)
message(STATUS "Removing existing vanilla directory...")
file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/vanilla")
endif()
set(YUNIBASE_VANILLA_PATH ${CMAKE_CURRENT_BINARY_DIR}/vanilla)
set(YUNIBASE_YUNIFIED_PATH ${CMAKE_CURRENT_BINARY_DIR}/bogus)
emit_yunibase_runners()
endif()
set(VARFILE ${CMAKE_CURRENT_BINARY_DIR}/_vars.cmake)
get_filename_component(VARFILE ${VARFILE} ABSOLUTE)
function(writeproxy scriptname)
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${scriptname}
"include(${YUNIROOT}/config/implinfo.cmake)\ninclude(${VARFILE})\ninclude(${YUNIROOT}/scripts/${scriptname})\n")
endfunction()
function(writevar varname)
file(APPEND ${VARFILE} "set(${varname} \"${${varname}}\")\n")
endfunction()
macro(checkimpl nam impl)
set(_modpath "")
if(YUNI_${impl})
writevar(YUNI_${impl})
list(APPEND impls ${impl})
if(NOT selfboot_${impl})
message(FATAL_ERROR "Unknown impl: ${impl}")
endif()
if(YUNI_INPLACE_NCCC_MODULES_PREFIX)
set(_modpath "-MODPATH ${YUNI_INPLACE_NCCC_MODULES_PREFIX}")
endif()
if(UNIX)
set(_cmd "${CMAKE_CURRENT_BINARY_DIR}/run-${nam}.sh")
set(_runner "${YUNIROOT}/lib-runtime/selfboot/${selfboot_${impl}}")
if(arg_WAR_LAST_RUNNER_${impl})
set(_war_runner "${_runner}")
else()
set(_war_runner)
endif()
if(arg_post_${impl})
set(_war_argpost ${arg_post_${impl}})
else()
set(_war_argpost)
endif()
file(WRITE ${_cmd}
"#!/bin/sh\nexec ${YUNI_${impl}} ${_arg_root} ${arg_ci_${impl}} ${arg_prog_${impl}} ${_runner} ${_war_argpost} ${_modpath} $* ${_war_runner}\n")
execute_process(
COMMAND chmod +x ${_cmd})
endif()
else()
message(STATUS "Skip: ${impl}")
endif()
endmacro()
macro(checkimpls nam cmd impl yuniname)
set(YUNI_IDENT_${impl} ${yuniname})
if(YUNI_WITH_YUNIBASE)
if(NOT YUNI_${impl})
if(EXISTS ${YUNIBASE_VANILLA_PATH}/${cmd})
message(STATUS "Yunibase: ${YUNIBASE_VANILLA_PATH}/${cmd}")
set(YUNI_${impl} ${YUNIBASE_VANILLA_PATH}/${cmd})
endif()
else()
message(STATUS "YUNI_${impl}: ${YUNI_${impl}}")
endif()
elseif(YUNI_${impl})
message(STATUS "YUNI_${impl}: ${YUNI_${impl}}")
endif()
checkimpl(${nam} ${impl})
set(_test ${ARGN})
if(_test)
# Call next
checkimpls(${ARGN})
else()
# Term
if(UNIX)
set(_cmd "${CMAKE_CURRENT_BINARY_DIR}/run-all.sh")
file(WRITE ${_cmd}
"#!/bin/sh\nexec ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/run-all.cmake $*\n")
execute_process(
COMMAND chmod +x ${_cmd})
endif()
endif()
endmacro()
file(WRITE ${VARFILE} "# Autogenerated. Do not edit.\n")
writevar(YUNIROOT)
writevar(BOOTDIR)
if(YUNI_INPLACE_NCCC_MODULES_PREFIX) # Debug: NCCC module prefix
writevar(YUNI_INPLACE_NCCC_MODULES_PREFIX)
endif()
writeproxy(run-all.cmake)
writeproxy(run.cmake)
set(impls)
checkimpls(
# Impl name Cmd name CMake Varname yuniname
## R6RS+R7RS
digamma digamma DIGAMMA digamma
guile3 guile3 GUILE3 guile # Currently yunibase only
sagittarius sagittarius SAGITTARIUS sagittarius
## R7RS
chibi-scheme chibi-scheme CHIBI_SCHEME chibi-scheme
chicken csi CHICKEN5_CSI chicken
cyclone icyc ICYC cyclone
foment foment FOMENT foment
gauche gosh GOSH gauche
kawa kawa KAWA kawa
## R6RS
chez chez-scheme CHEZ_SCHEME chez
guile guile GUILE guile # Guile2(R6RS only)
ironscheme IRONSCHEME IRON_SCHEME ironscheme # FIXME:
racket racket RACKET racket
## Generic Scheme
bigloo bigloo BIGLOO bigloo
biwascheme biwasyuni BIWASYUNI biwascheme
gambit gsi GSI gambit
mit-scheme mit-scheme MIT_SCHEME mit-scheme
s7 s7yuni S7 s7
scm scm SCM scm
stklos stklos STKLOS stklos
)
file(APPEND ${VARFILE} "set(YUNIBOOT_IMPLS\n")
foreach(e ${impls})
file(APPEND ${VARFILE} " ${e}\n")
endforeach()
file(APPEND ${VARFILE} ")\n")
# Testing
if(NOT YUNI_SKIP_TESTS)
include(tests/tests.cmake)
endif()