@@ -4,38 +4,60 @@ project(pyjion)
44set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
55set (CMAKE_C_STANDARD 11)
66set (CMAKE_C_STANDARD_REQUIRED ON )
7+ set (CMAKE_CXX_STANDARD_REQUIRED ON )
8+
9+ if (UNIX AND NOT APPLE )
10+ message (STATUS "Enabling PIC" )
11+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
12+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic" )
13+ endif ()
714
815find_package (Python3 3.9 COMPONENTS Interpreter Development)
16+ message (STATUS "Use Python libraries " ${Python3_LIBRARIES} )
17+ if (SKBUILD)
18+ find_package (PythonExtensions REQUIRED)
19+ endif (SKBUILD)
20+
921include_directories (${Python3_INCLUDE_DIRS} )
1022
1123set (CLR_DIR CoreCLR/src/coreclr)
1224
1325add_definitions (-DUSE_STL)
1426
1527IF (CMAKE_BUILD_TYPE MATCHES Debug)
16- message (STATUS "Enabling very verbose messages" )
28+ message (STATUS "Enabling verbose messages" )
1729 add_definitions (-DDEBUG)
30+ set (DO_TESTS 1)
1831ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)
1932
33+ if (DUMP_TRACES)
34+ message (STATUS "Enabling very-verbose messages" )
35+ add_definitions (-DDUMP_TRACES)
36+ endif ()
37+
38+ if (DUMP_JIT_TRACES)
39+ message (STATUS "Enabling very-very-verbose messages" )
40+ add_definitions (-DDUMP_JIT_TRACES)
41+ endif ()
42+
2043if (NOT WIN32 )
21- set (CMAKE_CXX_STANDARD 14 )
22- set (CMAKE_CXX_STANDARD_REQUIRED ON )
44+ set (CMAKE_CXX_STANDARD 17 )
45+ set (CMAKE_CXX_FLAGS " ${CMAKE_CXX_FLAGS} -std=c++0x" )
2346 include_directories (CoreCLR/src/coreclr/src/pal/inc/rt CoreCLR/src/coreclr/src/pal/inc CoreCLR/src/coreclr/src/pal/prebuilt/inc)
2447 add_compile_options (-DPAL_STDCPP_COMPAT)
25- add_compile_options (-fdeclspec)
2648 add_compile_options (-fexceptions)
2749 add_compile_options (-fvisibility=hidden)
2850
2951 add_definitions (-DTARGET_UNIX)
3052 message (STATUS "Enabling UNIX Patches" )
31- add_compile_options (-Wswitch)
3253 if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
3354 add_compile_options (-Wno-null-arithmetic)
3455 else (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
3556 add_compile_options (-Wno-conversion-null -Wno-pointer-arith)
3657 endif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
3758else ()
38- add_definitions (-DWINDOWS)
59+ add_definitions (-DWINDOWS=1)
60+ add_definitions (-D_HAS_STD_BYTE=0)
3961 if (MSVC )
4062 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++latest" )
4163 endif (MSVC )
@@ -52,6 +74,8 @@ elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "AMD64")
5274 if (CMAKE_CL_64 )
5375 set (IS_64 1)
5476 endif ()
77+ else ()
78+ message (STATUS "Don't recognise CPU arch " ${CMAKE_SYSTEM_PROCESSOR} )
5579endif ()
5680
5781if (IS_64)
@@ -68,58 +92,114 @@ if (IS_64)
6892 endif ()
6993else ()
7094 add_definitions (-DTARGET_X86)
95+ add_definitions (-D_TARGET_X86_)
7196 message (STATUS "Enabling x86" )
7297endif ()
7398
7499include_directories (CoreCLR/src/coreclr/src/inc CoreCLR/src/coreclr/src/jit)
75100
101+
102+
103+ if (UNIX )
104+ if (DEFINED ENV{DOTNET_ROOT})
105+ file (GLOB DOTNETPATH $ENV{DOTNET_ROOT} /shared/Microsoft.NETCore.App*/5.0.0*/)
106+ else ()
107+ file (GLOB DOTNETPATH /usr/local/share/dotnet/shared/Microsoft.NETCore.App*/5.0.0*/)
108+ endif ()
109+ message (STATUS "Found .NET 5 in " ${DOTNETPATH} )
110+ endif ()
111+
76112if (WIN32 )
77113 set (CLR_OS_BUILD Windows_NT.x64.Debug)
78- set (CLR_JIT_LIB "lib/coreclr_static.lib" )
114+ if (DEFINED ENV{DOTNET_ROOT})
115+ file (GLOB DOTNETPATH $ENV{DOTNET_ROOT} /shared/Microsoft.NETCore.App*/5.0.0*/)
116+ else ()
117+ file (GLOB DOTNETPATH $ENV{LOCALAPPDATA} /Microsoft/dotnet/shared/Microsoft.NETCore.App*/5.0.0*/)
118+ endif ()
119+ message (STATUS "Found .NET 5 in " ${DOTNETPATH} )
79120endif ()
80121
81- if (LINUX )
122+ if (UNIX AND NOT APPLE )
82123 set (CLR_OS_BUILD Linux.x64.Debug)
83124 set (CLR_JIT_LIB "libclrjit.so" )
125+ set (CLR_CMAKE_HOST_UNIX 1)
126+ add_definitions (-DFEATURE_SIMD)
127+ add_definitions (-DFEATURE_HW_INTRINSICS)
128+ add_compile_options (-fPIC)
84129endif ()
85130
86131if (APPLE )
87132 set (CLR_OS_BUILD OSX.x64.Debug)
88- include_directories (Pyjion /compat)
133+ include_directories (pyjion /compat)
89134 set (CLR_CMAKE_HOST_UNIX 1)
90135 set (CLR_JIT_LIB "libclrjit.dylib" )
91136 add_definitions (-D_XOPEN_SOURCE)
92137 add_definitions (-DTARGET_OSX)
93-
138+ add_compile_options (-fdeclspec)
94139 add_definitions (-DFEATURE_SIMD)
95140 add_definitions (-DFEATURE_HW_INTRINSICS)
96141endif ()
97142
98- include_directories (CoreCLR/artifacts/bin/coreclr/${CLR_OS_BUILD} /inc)
99- set (SOURCES Pyjion/absint.cpp Pyjion/absvalue.cpp Pyjion/intrins.cpp Pyjion/jitinit.cpp Pyjion/pycomp.cpp Pyjion/pyjit.cpp Pyjion/disasm.cpp)
143+ if (NET_SRC_LIB) # use the libraries compiled from source
144+ set (DOTNETPATH ${CMAKE_SOURCE_DIR} /CoreCLR/artifacts/bin/coreclr/${CLR_OS_BUILD} )
145+ endif ()
146+
147+ set (SOURCES pyjion/absint.cpp pyjion/absvalue.cpp pyjion/intrins.cpp pyjion/jitinit.cpp pyjion/pycomp.cpp pyjion/pyjit.cpp pyjion/exceptionhandling.cpp pyjion/stack.cpp pyjion/block.cpp)
148+
149+ if (WIN32 )
150+ enable_language (ASM_MASM)
151+ if (IS_64)
152+ set (HOST_ASM_MASM_X86_64 true )
153+ endif ()
154+ set (SOURCES ${SOURCES} pyjion/helpers.asm)
155+ endif ()
100156
101157add_library (pyjionlib OBJECT ${SOURCES} )
102- add_library (pyjion MODULE $<TARGET_OBJECTS:pyjionlib>)
103- install (TARGETS pyjion
104- LIBRARY DESTINATION ${CMAKE_BINARY_DIR} )
158+ add_library (_pyjion MODULE $<TARGET_OBJECTS:pyjionlib>)
159+
160+ if (WIN32 )
161+ add_custom_command (
162+ TARGET _pyjion POST_BUILD
163+ COMMAND ${CMAKE_COMMAND} -E copy
164+ ${DOTNETPATH} /clrjit.dll
165+ ${CMAKE_CURRENT_BINARY_DIR} /clrjit.dll
166+ )
167+ endif (WIN32 )
105168
106169set_target_properties (
107- pyjion
170+ _pyjion
108171 PROPERTIES
109172 PREFIX ""
110- OUTPUT_NAME "pyjion "
173+ OUTPUT_NAME "_pyjion "
111174 LINKER_LANGUAGE C
112175)
113176
114- target_link_libraries (pyjion ${Python3_LIBRARIES} )
115- target_link_libraries (pyjion ${CMAKE_SOURCE_DIR} /CoreCLR/artifacts/bin/coreclr/${CLR_OS_BUILD} /${CLR_JIT_LIB} )
116-
117- # Testing
118- add_subdirectory (Tests/Catch)
119- set (TEST_SOURCES Tests/testing_util.cpp Tests/test_emission.cpp Tests/test_inference.cpp Tests/test_compiler.cpp Tests/test_absint.cpp Tests/Tests.cpp)
120- add_executable (unit_tests ${TEST_SOURCES} $<TARGET_OBJECTS:pyjionlib>)
121- target_compile_definitions (unit_tests PUBLIC -DDUMP_TRACES)
122- target_include_directories (unit_tests PRIVATE Pyjion)
123- target_link_libraries (unit_tests Catch2::Catch2)
124- target_link_libraries (unit_tests ${Python3_LIBRARIES} )
125- target_link_libraries (unit_tests ${CMAKE_SOURCE_DIR} /CoreCLR/artifacts/bin/coreclr/${CLR_OS_BUILD} /${CLR_JIT_LIB} )
177+ target_link_libraries (_pyjion ${Python3_LIBRARIES} )
178+
179+ if (DO_TESTS)
180+ # Testing
181+ add_subdirectory (Tests/Catch)
182+ set (TEST_SOURCES Tests/testing_util.cpp Tests/test_emission.cpp Tests/test_compiler.cpp Tests/test_absint.cpp Tests/Tests.cpp Tests/test_wrappers.cpp Tests/test_exceptions.cpp Tests/test_scopes.cpp)
183+ add_executable (unit_tests ${TEST_SOURCES} $<TARGET_OBJECTS:pyjionlib>)
184+ if (NOT WIN32 )
185+ set_property (TARGET unit_tests PROPERTY CXX_STANDARD 17)
186+ set_property (TARGET unit_tests PROPERTY CXX_EXTENSIONS OFF )
187+ endif (NOT WIN32 )
188+ target_include_directories (unit_tests PRIVATE pyjion)
189+ target_link_libraries (unit_tests Catch2::Catch2)
190+ target_link_libraries (unit_tests ${Python3_LIBRARIES} )
191+
192+ if (NOT WIN32 )
193+ target_link_libraries (unit_tests ${DOTNETPATH} /${CLR_JIT_LIB} )
194+ endif ()
195+ endif (DO_TESTS)
196+
197+ if (NOT WIN32 )
198+ target_link_libraries (_pyjion ${DOTNETPATH} /${CLR_JIT_LIB} )
199+ endif ()
200+
201+ if (SKBUILD)
202+ python_extension_module(_pyjion)
203+ endif (SKBUILD)
204+
205+ install (TARGETS _pyjion LIBRARY DESTINATION pyjion)
0 commit comments