Skip to content

Commit 8a64e5b

Browse files
committed
Refactor: adjust structure
1 parent 10d7c38 commit 8a64e5b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+4585
-2
lines changed

.gitmodules

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[submodule "libCacheSim"]
2+
path = libCacheSim
3+
url = [email protected]:1a1a11a/libCacheSim.git
4+
[submodule "src/libCacheSim"]
5+
path = src/libCacheSim
6+
url = [email protected]:1a1a11a/libCacheSim.git

CMakeLists.txt

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
cmake_minimum_required(VERSION 3.15...3.27)
2+
3+
# Include exported variables from cache
4+
if(DEFINED LIBCB_BUILD_DIR)
5+
set(PARENT_BUILD_DIR "${LIBCB_BUILD_DIR}")
6+
message(STATUS "Using provided LIBCB_BUILD_DIR: ${LIBCB_BUILD_DIR}")
7+
else()
8+
set(PARENT_BUILD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../build")
9+
endif()
10+
set(EXPORT_FILE "${PARENT_BUILD_DIR}/export_vars.cmake")
11+
12+
if(EXISTS "${EXPORT_FILE}")
13+
include("${EXPORT_FILE}")
14+
message(STATUS "Loaded variables from export_vars.cmake")
15+
else()
16+
message(FATAL_ERROR "export_vars.cmake not found at ${EXPORT_FILE}. Please build the main project first (e.g. cd .. && cmake -G Ninja -B build)")
17+
endif()
18+
19+
# Force enable -fPIC
20+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
21+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
22+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
23+
24+
project(libCacheSim-python VERSION "${LIBCACHESIM_VERSION}")
25+
26+
if(LOG_LEVEL_LOWER STREQUAL "default")
27+
if(CMAKE_BUILD_TYPE_LOWER MATCHES "debug")
28+
add_compile_definitions(LOGLEVEL=6)
29+
else()
30+
add_compile_definitions(LOGLEVEL=7)
31+
endif()
32+
elseif(LOG_LEVEL_LOWER STREQUAL "verbose")
33+
add_compile_definitions(LOGLEVEL=5)
34+
elseif(LOG_LEVEL_LOWER STREQUAL "debug")
35+
add_compile_definitions(LOGLEVEL=6)
36+
elseif(LOG_LEVEL_LOWER STREQUAL "info")
37+
add_compile_definitions(LOGLEVEL=7)
38+
elseif(LOG_LEVEL_LOWER STREQUAL "warn")
39+
add_compile_definitions(LOGLEVEL=8)
40+
elseif(LOG_LEVEL_LOWER STREQUAL "error")
41+
add_compile_definitions(LOGLEVEL=9)
42+
else()
43+
add_compile_definitions(LOGLEVEL=7)
44+
endif()
45+
46+
# Find python and pybind11
47+
find_package(Python REQUIRED COMPONENTS Interpreter Development.Module)
48+
find_package(pybind11 CONFIG REQUIRED)
49+
50+
# Include directories for dependencies
51+
include_directories(${GLib_INCLUDE_DIRS})
52+
include_directories(${GLib_CONFIG_INCLUDE_DIR})
53+
include_directories(${XGBOOST_INCLUDE_DIR})
54+
include_directories(${LIGHTGBM_PATH})
55+
include_directories(${ZSTD_INCLUDE_DIR})
56+
include_directories(${MAIN_PROJECT_SOURCE_DIR}/libCacheSim/bin)
57+
58+
# Find the main libCacheSim library
59+
set(MAIN_PROJECT_BUILD_DIR "${PARENT_BUILD_DIR}")
60+
set(MAIN_PROJECT_LIB_PATH "${MAIN_PROJECT_BUILD_DIR}/liblibCacheSim.a")
61+
62+
if(EXISTS "${MAIN_PROJECT_LIB_PATH}")
63+
message(STATUS "Found pre-built libCacheSim library at ${MAIN_PROJECT_LIB_PATH}")
64+
65+
# Import the main library as an imported target
66+
add_library(libCacheSim_main STATIC IMPORTED)
67+
set_target_properties(libCacheSim_main PROPERTIES
68+
IMPORTED_LOCATION "${MAIN_PROJECT_LIB_PATH}"
69+
INTERFACE_INCLUDE_DIRECTORIES "${MAIN_PROJECT_SOURCE_DIR}/libCacheSim/include;${MAIN_PROJECT_SOURCE_DIR}/libCacheSim/utils/include;${MAIN_PROJECT_SOURCE_DIR}/libCacheSim"
70+
)
71+
link_directories(${GLib_LIBRARY_DIRS})
72+
link_directories(${ZSTD_LIBRARY_DIRS})
73+
set(LIBCACHESIM_TARGET libCacheSim_main)
74+
75+
else()
76+
message(FATAL_ERROR "Pre-built libCacheSim library not found. Please build the main project first: cd .. && cmake -G Ninja -B build && ninja -C build")
77+
endif()
78+
79+
include_directories(src)
80+
81+
python_add_library(libcachesim_python MODULE
82+
src/export.cpp
83+
src/export_cache.cpp
84+
src/export_reader.cpp
85+
src/export_analyzer.cpp
86+
src/export_misc.cpp
87+
src/exception.cpp
88+
${MAIN_PROJECT_SOURCE_DIR}/libCacheSim/bin/cli_reader_utils.c
89+
${MAIN_PROJECT_SOURCE_DIR}/libCacheSim/bin/traceUtils/traceConvLCS.cpp
90+
${MAIN_PROJECT_SOURCE_DIR}/libCacheSim/bin/traceUtils/traceConvOracleGeneral.cpp
91+
${MAIN_PROJECT_SOURCE_DIR}/libCacheSim/bin/traceUtils/utils.cpp
92+
WITH_SOABI
93+
)
94+
95+
set_target_properties(libcachesim_python PROPERTIES
96+
POSITION_INDEPENDENT_CODE ON
97+
INSTALL_RPATH_USE_LINK_PATH TRUE
98+
BUILD_WITH_INSTALL_RPATH TRUE
99+
INSTALL_RPATH "$ORIGIN"
100+
)
101+
102+
target_compile_definitions(libcachesim_python PRIVATE VERSION_INFO=${PROJECT_VERSION})
103+
104+
target_link_libraries(libcachesim_python PRIVATE
105+
${LIBCACHESIM_TARGET}
106+
pybind11::headers
107+
pybind11::module
108+
${GLib_LIBRARIES}
109+
${ZSTD_LIBRARIES}
110+
)
111+
112+
# Add platform-specific link options and libraries
113+
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
114+
# GNU ld option, only available on Linux
115+
target_link_options(libcachesim_python PRIVATE -Wl,--no-as-needed)
116+
target_link_libraries(libcachesim_python PRIVATE dl)
117+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
118+
# macOS doesn't need --no-as-needed
119+
# dl functions are part of the system library on macOS
120+
# No need to explicitly link dl
121+
122+
# Find argp library on macOS
123+
find_library(ARGP_LIBRARY argp PATHS /opt/homebrew/lib /usr/local/lib)
124+
if(ARGP_LIBRARY)
125+
target_link_libraries(libcachesim_python PRIVATE ${ARGP_LIBRARY})
126+
endif()
127+
128+
# Find and link other dependencies that might be needed
129+
find_library(INTL_LIBRARY intl PATHS /opt/homebrew/lib /usr/local/lib)
130+
if(INTL_LIBRARY)
131+
target_link_libraries(libcachesim_python PRIVATE ${INTL_LIBRARY})
132+
endif()
133+
else()
134+
# Other platforms - try to link dl if available
135+
find_library(DL_LIBRARY dl)
136+
if(DL_LIBRARY)
137+
target_link_libraries(libcachesim_python PRIVATE ${DL_LIBRARY})
138+
endif()
139+
endif()
140+
141+
# install to wheel directory
142+
install(TARGETS libcachesim_python LIBRARY DESTINATION libcachesim)

MAINFEST.in

Whitespace-only changes.

0 commit comments

Comments
 (0)