-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
177 lines (150 loc) · 6.04 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
166
167
168
169
170
171
172
173
174
175
176
177
cmake_minimum_required(VERSION 3.17)
include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
include(cmake/clang-18-ubuntu.cmake)
project (PythonWorkbench)
enable_language(C CXX)
set(PYTHON_WORBENCH_BUILD build-debug-clang-18-ubuntu-22.04)
set(PYTHON_WORBENCH_ROOT /mnt/develop2/src/PythonWorkbench)
set(PYTHON_WORBENCH_INSTALL "${PYTHON_WORBENCH_ROOT}/install/${PYTHON_WORBENCH_BUILD}")
set(PYTHON_WORBENCH_INCLUDE "${PYTHON_WORBENCH_INSTALL}/include")
set(PYTHON_WORBENCH_LOCAL_INCLUDE "${PYTHON_WORBENCH_INSTALL}/usr/local/include")
set(PYTHON_WORBENCH_LIB "${PYTHON_WORBENCH_INSTALL}/lib")
set(PYTHON_WORBENCH_CPYTHON python3.12d)
set(PYTHON_WORBENCH_CPYTHON_VER python3.12)
# Libraries
#LibEdit_INCLUDE_DIRS
set(LibEdit_INCLUDE_DIRS ${PYTHON_WORBENCH_INCLUDE})
#ZLIB_INCLUDE_DIR
set(ZLIB_INCLUDE_DIR ${PYTHON_WORBENCH_INCLUDE})
#zstd_INCLUDE_DIR
set(zstd_INCLUDE_DIR ${PYTHON_WORBENCH_INCLUDE})
#FFI_LIBRARIES
set(FFI_LIBRARIES ffi)
#LibEdit_LIBRARIES
set(LibEdit_LIBRARIES edit)
#Terminfo_LIBRARIES
set(Terminfo_LIBRARIES ${PYTHON_WORBENCH_INCLUDE})
#ZLIB_LIBRARY
set(ZLIB_LIBRARY z)
#zstd_LIBRARY
set(zstd_LIBRARY zstd)
#HAVE_FFI_CALL
#Terminfo_LINKABLE
# Check for C++11
set (CMAKE_CXX_STANDARD 11)
# Specify build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug")
endif()
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "RelWithDebInfo" "MinSizeRel")
if (CMAKE_BUILD_TYPE MATCHES "Debug")
set(CPYTHON_BUILD_TYPE Debug)
else ()
set(CPYTHON_BUILD_TYPE Release)
endif()
# Add the cpython as an external project that will be included in the build
if(MSVC)
if(CMAKE_CL_64)
set(CPYTHON_PLATFORM x64)
set(CPYTHON_BUILD_DIR amd64)
else()
set(CPYTHON_PLATFORM x86)
set(CPYTHON_BUILD_DIR win32)
endif()
# ExternalProject_Add(CPYTHON
# DOWNLOAD_COMMAND ""
# SOURCE_DIR ${CMAKE_SOURCE_DIR}/libs/cpython
# CONFIGURE_COMMAND ""
# BUILD_COMMAND cd ${CMAKE_SOURCE_DIR}/libs/cpython && MSBuild.exe /p:Configuration=${CPYTHON_BUILD_TYPE} /property:Platform=${CPYTHON_PLATFORM} "PCBuild/python.vcxproj" /nologo /verbosity:minimal /consoleloggerparameters:summar
# INSTALL_COMMAND ""
# TEST_COMMAND ""
# )
else()
# ExternalProject_Add(CPYTHON
# DOWNLOAD_COMMAND ""
# SOURCE_DIR ${CMAKE_SOURCE_DIR}/libs/cpython
# CONFIGURE_COMMAND cd ${CMAKE_SOURCE_DIR}/libs/cpython && ./configure --disable-static --enable-shared
# BUILD_COMMAND cd ${CMAKE_SOURCE_DIR}/libs/cpython && make
# INSTALL_COMMAND ""
# TEST_COMMAND ""
# )
endif()
set(CPYTHON_STDLIB_DIR ${PYTHON_WORBENCH_LIB}/${PYTHON_WORBENCH_CPYTHON_VER})
if(MSVC)
set(CPYTHON_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/cpython/Include ${CMAKE_SOURCE_DIR}/libs/cpython/PC)
set(CPYTHON_LIBRARY_DIR ${CMAKE_SOURCE_DIR}/libs/cpython/PCBuild/${CPYTHON_BUILD_DIR})
if(CMAKE_BUILD_TYPE MATCHES "Debug")
set(CPYTHON_BIN ${CMAKE_SOURCE_DIR}/libs/cpython/PCBuild/${CPYTHON_BUILD_DIR}/python312_d.dll)
else()
set(CPYTHON_BIN ${CMAKE_SOURCE_DIR}/libs/cpython/PCBuild/${CPYTHON_BUILD_DIR}/python312.dll)
endif()
else()
set(CPYTHON_INCLUDE_DIR ${PYTHON_WORBENCH_INCLUDE}/${PYTHON_WORBENCH_CPYTHON})
set(CPYTHON_LIBRARY_DIR ${PYTHON_WORBENCH_LIB})
set(CPYTHON_LIBRARY ${PYTHON_WORBENCH_CPYTHON})
set(CPYTHON_BIN ${PYTHON_WORBENCH_LIB}/lib${PYTHON_WORBENCH_CPYTHON}.a)
endif()
# Add the pybind11 library (optional)
#ExternalProject_Add(PYBIND
# DOWNLOAD_COMMAND ""
# SOURCE_DIR ${CMAKE_SOURCE_DIR}/libs/pybind11
# CMAKE_ARGS -DPYBIND11_TEST=OFF -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DPYTHONLIBS_FOUND=ON -DPYTHON_MODULE_EXTENSION=.lib -DPYTHON_LIBRARY=${CMAKE_SOURCE_DIR}/libs/cpython/PCBuild/win32/python38_d.lib -DPYTHON_INCLUDE_DIR=${CMAKE_SOURCE_DIR}/libs/cpython/PCBuild/win32
# BUILD_COMMAND cmake --build . --config ${CMAKE_BUILD_TYPE}
# INSTALL_COMMAND ""
# TEST_COMMAND ""
#)
#set(PYBIND_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/pybind11/include)
#set(PYBIND_INCLUDE_DIR ${PYTHON_WORBENCH_LOCAL_INCLUDE}/pybind11)
#set(PYBIND_INCLUDE_DIR ${PYTHON_WORBENCH_LOCAL_INCLUDE})
set(PYBIND_INCLUDE_DIR ${PYTHON_WORBENCH_INCLUDE}/pybind11)
set(PYBIND_INCLUDE_DIR ${PYTHON_WORBENCH_INCLUDE})
# Source and header files
#FILE(GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
#FILE(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h)
# select code for main
set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/app/main.cpp)
#set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/app/main-gemini.cpp)
#set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/app/main-with-repl-4o.cpp)
#set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src/app/main-with-repl-gemini.cpp)
FILE(GLOB_RECURSE HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/src/app/*.h)
# Linking directories
link_directories(${CPYTHON_LIBRARY_DIR})
# The target executable
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
# Add macros
target_compile_definitions(${PROJECT_NAME} PRIVATE NOMINMAX=1)
# Dependencies
#add_dependencies(${PROJECT_NAME} PYBIND)
#add_dependencies(${PROJECT_NAME} CPYTHON)
# Include directories
target_include_directories(${PROJECT_NAME} PRIVATE ${CPYTHON_INCLUDE_DIR})
target_include_directories(${PROJECT_NAME} PRIVATE ${PYBIND_INCLUDE_DIR})
# On MSVC build, the python library is automatically linked (crazy I know)
if(NOT MSVC)
target_link_libraries(${PROJECT_NAME} ${CPYTHON_LIBRARY} stdc++ m dl )
endif()
# Set the executable to console application if MSVC
if(MSVC)
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/SUBSYSTEM:CONSOLE")
endif()
# Copy Python DLL to the build folder if different
#add_custom_command(
# TARGET ${PROJECT_NAME}
# POST_BUILD
# COMMAND ${CMAKE_COMMAND}
# -E copy_if_different ${CPYTHON_BIN} $<TARGET_FILE_DIR:${PROJECT_NAME}>
#)
# Copy our python sources to the build folder
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND}
-E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/app/py $<TARGET_FILE_DIR:${PROJECT_NAME}>/app
)
# Copy the Python stdlib into the build folder (needed by the embedded python)
add_custom_command(
TARGET ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_COMMAND}
-E copy_directory ${CPYTHON_STDLIB_DIR} $<TARGET_FILE_DIR:${PROJECT_NAME}>/lib
)