@@ -30,28 +30,22 @@ cmake_minimum_required(VERSION 3.22)
30
30
project (com.oracle.graal.python.cext )
31
31
32
32
function (require_var var )
33
- if (NOT ${var} )
34
- message (FATAL_ERROR "${var} needs to be set" )
35
- endif ()
36
- endfunction ()
37
-
38
- function (check_var var )
39
- set (${var} PARENT_SCOPE )
40
- require_var (${var} )
33
+ if (NOT DEFINED ${var} )
34
+ message (FATAL_ERROR "${var} needs to be set" )
35
+ endif ()
41
36
endfunction ()
42
37
43
- # set variable from environement variable if the latter exists
44
- function (setFromEnv varname envname )
45
- if (DEFINED ENV{${envname}} )
46
- set (${varname} $ENV{${envname}} PARENT_SCOPE )
47
- endif ()
48
- endfunction ()
38
+ if (WIN32 )
39
+ require_var (GRAALVM_LLVM_LIB_DIR )
40
+ endif ()
41
+ require_var (TRUFFLE_H_INC )
42
+ require_var (GRAALPY_EXT )
49
43
50
- require_var (LLVM_MODE )
51
- require_var (BZ2_LIB_DIR )
44
+ if (NOT DEFINED SRC_DIR )
45
+ set (SRC_DIR "." )
46
+ endif ()
52
47
53
48
set (TARGET_LIBPYTHON "python" )
54
- set (LIB_OUTPUT_DIR "${PROJECT_OUTPUT_DIR} /lib" )
55
49
56
50
######################################################################
57
51
# common variables and compile/link options (for all build targets)
@@ -92,29 +86,32 @@ endif()
92
86
# don't install into the system but into the MX project's output dir
93
87
set (CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} )
94
88
95
- check_var (GRAALVM_LLVM_LIB_DIR )
96
- check_var (TRUFFLE_H_INC )
97
-
98
- require_var (GRAALPY_EXT )
89
+ set (CAPI_SRC "${SRC_DIR} /src" )
99
90
100
91
# using glob patterns is not recommended: https://cmake.org/cmake/help/latest/command/file.html#glob
101
- set (SRC_FILES src/codecs.c src/setobject.c src/compile.c src/thread.c src/moduleobject.c src/preconfig.c
102
- src/getbuildinfo.c src/object.c src/dtoa.c src/pystrhex.c src/capi.c src/complexobject.c src/capsule.c
103
- src/typeobject.c src/obmalloc.c src/descrobject.c src/memoryobject.c src/traceback.c src/unicodeobject.c
104
- src/pythonrun.c src/funcobject.c src/codeobject.c src/unicodectype.c src/structseq.c src/import.c
105
- src/pytime.c src/bytearrayobject.c src/listobject.c src/bytesobject.c src/object_shared.c src/longobject.c
106
- src/sysmodule.c src/pystrtod.c src/tupleobject.c src/iterobject.c src/sliceobject.c src/classobject.c
107
- src/floatobject.c src/namespaceobject.c src/_warnings.c src/dictobject.c src/pystate.c src/mysnprintf.c
108
- src/ceval.c src/getcompiler.c src/pyhash.c src/fileutils.c src/descrobject_shared.c src/modsupport.c
109
- src/context.c src/abstract.c src/frameobject.c src/posixmodule.c src/longobject_shared.c src/exceptions.c
110
- src/pyctype.c src/typeobject_shared.c src/mystrtoul.c src/weakrefobject.c src/modsupport_shared.c
111
- src/fileobject.c src/pystrcmp.c src/getversion.c src/genobject.c src/methodobject.c src/boolobject.c
112
- src/pylifecycle.c src/errors.c src/signals.c src/datetime.c
92
+ set (SRC_FILES ${CAPI_SRC} /codecs.c ${CAPI_SRC} /setobject.c ${CAPI_SRC} /compile.c ${CAPI_SRC} /thread.c
93
+ ${CAPI_SRC} /moduleobject.c ${CAPI_SRC} /preconfig.c ${CAPI_SRC} /getbuildinfo.c ${CAPI_SRC} /object.c
94
+ ${CAPI_SRC} /dtoa.c ${CAPI_SRC} /pystrhex.c ${CAPI_SRC} /capi.c ${CAPI_SRC} /complexobject.c
95
+ ${CAPI_SRC} /capsule.c ${CAPI_SRC} /typeobject.c ${CAPI_SRC} /obmalloc.c ${CAPI_SRC} /descrobject.c
96
+ ${CAPI_SRC} /memoryobject.c ${CAPI_SRC} /traceback.c ${CAPI_SRC} /unicodeobject.c ${CAPI_SRC} /pythonrun.c
97
+ ${CAPI_SRC} /funcobject.c ${CAPI_SRC} /codeobject.c ${CAPI_SRC} /unicodectype.c ${CAPI_SRC} /structseq.c
98
+ ${CAPI_SRC} /import.c ${CAPI_SRC} /pytime.c ${CAPI_SRC} /bytearrayobject.c ${CAPI_SRC} /listobject.c
99
+ ${CAPI_SRC} /bytesobject.c ${CAPI_SRC} /object_shared.c ${CAPI_SRC} /longobject.c ${CAPI_SRC} /sysmodule.c
100
+ ${CAPI_SRC} /pystrtod.c ${CAPI_SRC} /tupleobject.c ${CAPI_SRC} /iterobject.c ${CAPI_SRC} /sliceobject.c
101
+ ${CAPI_SRC} /classobject.c ${CAPI_SRC} /floatobject.c ${CAPI_SRC} /namespaceobject.c ${CAPI_SRC} /_warnings.c
102
+ ${CAPI_SRC} /dictobject.c ${CAPI_SRC} /pystate.c ${CAPI_SRC} /mysnprintf.c ${CAPI_SRC} /ceval.c
103
+ ${CAPI_SRC} /getcompiler.c ${CAPI_SRC} /pyhash.c ${CAPI_SRC} /fileutils.c ${CAPI_SRC} /descrobject_shared.c
104
+ ${CAPI_SRC} /modsupport.c ${CAPI_SRC} /context.c ${CAPI_SRC} /abstract.c ${CAPI_SRC} /frameobject.c
105
+ ${CAPI_SRC} /posixmodule.c ${CAPI_SRC} /longobject_shared.c ${CAPI_SRC} /exceptions.c ${CAPI_SRC} /pyctype.c
106
+ ${CAPI_SRC} /typeobject_shared.c ${CAPI_SRC} /mystrtoul.c ${CAPI_SRC} /weakrefobject.c
107
+ ${CAPI_SRC} /modsupport_shared.c ${CAPI_SRC} /fileobject.c ${CAPI_SRC} /pystrcmp.c ${CAPI_SRC} /getversion.c
108
+ ${CAPI_SRC} /genobject.c ${CAPI_SRC} /methodobject.c ${CAPI_SRC} /boolobject.c ${CAPI_SRC} /pylifecycle.c
109
+ ${CAPI_SRC} /errors.c ${CAPI_SRC} /signals.c ${CAPI_SRC} /datetime.c
113
110
)
114
111
115
112
include_directories (
116
- "src"
117
- "include"
113
+ ${CAPI_SRC}
114
+ "${SRC_DIR} / include"
118
115
"${TRUFFLE_H_INC} "
119
116
)
120
117
@@ -126,7 +123,7 @@ function(native_module name core src_files)
126
123
endif ()
127
124
if (${core} )
128
125
target_compile_definitions (${name} PRIVATE Py_BUILD_CORE )
129
- target_include_directories (${name} PRIVATE "include/internal" )
126
+ target_include_directories (${name} PRIVATE "${SRC_DIR} / include/internal" )
130
127
endif ()
131
128
set_target_properties (${name} PROPERTIES SUFFIX "${GRAALPY_EXT} " )
132
129
set_target_properties (${name} PROPERTIES PREFIX "" )
@@ -135,13 +132,9 @@ function(native_module name core src_files)
135
132
endfunction ()
136
133
137
134
function (simple_native_module name )
138
- native_module (${name} TRUE "modules/${name} .c" )
135
+ native_module (${name} TRUE "${SRC_DIR} / modules/${name} .c" )
139
136
endfunction ()
140
137
141
- #file(GLOB_RECURSE GLOBBED_SRC_FILES
142
- # LIST_DIRECTORIES FALSE
143
- # "src/*.c")
144
-
145
138
######################################################################
146
139
# BUILD TARGETS
147
140
######################################################################
@@ -153,33 +146,34 @@ simple_native_module("_cpython_unicodedata")
153
146
simple_native_module ("_cpython_struct" )
154
147
155
148
if (NOT WIN32 )
156
- native_module ("_testcapi" FALSE "modules/_testcapi.c" )
149
+ native_module ("_testcapi" FALSE "${SRC_DIR} / modules/_testcapi.c" )
157
150
simple_native_module ("_testmultiphase" )
158
151
simple_native_module ("_ctypes_test" )
159
152
160
153
###################### BZIP2 ########################
161
- set ( TARGET_BZ2 "_bz2" )
162
- simple_native_module ( ${TARGET_BZ2} )
163
- set_target_properties ( ${ TARGET_BZ2} PROPERTIES
164
- # BUILD_WITH_INSTALL_RPATH FALSE
165
- # BUILD_RPATH_USE_ORIGIN TRUE
166
- BUILD_RPATH "../lib/ ${LLVM_MODE} /"
167
- )
168
- target_link_directories (${TARGET_BZ2} PRIVATE " ${BZ2_LIB_DIR} " )
169
- target_link_libraries ( ${TARGET_BZ2} bz2 )
154
+ if ( DEFINED LIBBZ2_BUILD_FILE )
155
+ include ( " ${LIBBZ2_BUILD_FILE} " )
156
+ set ( TARGET_BZ2 "_bz2" )
157
+ simple_native_module ( ${TARGET_BZ2} )
158
+ # variable 'BZIP2_SRC' is defined in file 'LIBBZ2_BUILD_FILE'
159
+ target_include_directories ( ${TARGET_BZ2} PRIVATE ${BZIP2_SRC} )
160
+ # variable 'TARGET_LIBBZ2' is defined in file 'LIBBZ2_BUILD_FILE'
161
+ target_link_libraries (${TARGET_BZ2} ${TARGET_LIBBZ2} )
162
+ endif ( )
170
163
171
164
172
165
###################### PYEXPAT ######################
173
166
set (TARGET_PYEXPAT "pyexpat" )
174
167
simple_native_module (${TARGET_PYEXPAT} )
168
+ set (EXPAT_SRC "${SRC_DIR} /expat" )
175
169
set (PYEXPAT_HEADERS
176
- "expat /ascii.h" "expat /asciitab.h" "expat /expat.h" "expat /expat_config.h" "expat/expat_external.h"
177
- "expat/internal.h" "expat/latin1tab.h" "expat/utf8tab.h" "expat/xmlrole.h" "expat/xmltok.h"
178
- "expat/ xmltok_impl.h"
170
+ ${EXPAT_SRC} /ascii.h ${EXPAT_SRC} /asciitab.h ${EXPAT_SRC} /expat.h ${EXPAT_SRC} /expat_config.h
171
+ ${EXPAT_SRC} /expat_external.h ${EXPAT_SRC} /internal.h ${EXPAT_SRC} /latin1tab.h ${EXPAT_SRC} /utf8tab.h
172
+ ${EXPAT_SRC} /xmlrole.h ${EXPAT_SRC} /xmltok.h ${EXPAT_SRC} / xmltok_impl.h
179
173
)
180
174
target_sources (${TARGET_PYEXPAT} PRIVATE ${PYEXPAT_HEADERS} )
181
- target_sources (${TARGET_PYEXPAT} PRIVATE "expat /xmlparse.c" "expat /xmlrole.c" "expat /xmltok.c" )
182
- target_include_directories (${TARGET_PYEXPAT} PRIVATE "expat" )
175
+ target_sources (${TARGET_PYEXPAT} PRIVATE ${EXPAT_SRC} /xmlparse.c ${EXPAT_SRC} /xmlrole.c ${EXPAT_SRC} /xmltok.c )
176
+ target_include_directories (${TARGET_PYEXPAT} PRIVATE ${EXPAT_SRC} )
183
177
# bpo-30947: Python uses best available entropy sources to call XML_SetHashSalt(),
184
178
# expat entropy sources are not needed
185
179
target_compile_definitions (${TARGET_PYEXPAT} PRIVATE
@@ -193,23 +187,18 @@ set_target_properties(${TARGET_LIBPYTHON} PROPERTIES SUFFIX "${GRAALPY_EXT}")
193
187
194
188
target_sources (${TARGET_LIBPYTHON} PRIVATE ${SRC_FILES} )
195
189
target_include_directories (${TARGET_LIBPYTHON} PRIVATE
196
- "include/internal"
190
+ "${SRC_DIR} / include/internal"
197
191
)
198
192
199
193
######################################################################
200
194
# target-specific compile and link options
201
195
######################################################################
202
196
203
- #target_link_directories(${TARGET_LIBPYTHON} PRIVATE ${GRAALVM_LLVM_LIB_DIR})
204
- #target_link_libraries(${TARGET_LIBPYTHON} graalvm-llvm)
205
197
target_compile_options (${TARGET_LIBPYTHON} PRIVATE ${CFLAGS_WARNINGS} )
206
198
207
199
if (WIN32 )
208
- target_link_libraries (${TARGET_LIBPYTHON} sulong-native )
200
+ target_link_directories (${TARGET_LIBPYTHON} PRIVATE ${GRAALVM_LLVM_LIB_DIR} )
201
+ target_link_libraries (${TARGET_LIBPYTHON} sulong-native graalvm-llvm )
209
202
endif ()
210
203
211
- #if(APPLE)
212
- # target_link_options(${TARGET_LIBPYTHON} PRIVATE -undefined dynamic_lookup)
213
- #endif()
214
-
215
204
install (TARGETS ${TARGET_LIBPYTHON} DESTINATION bin )
0 commit comments