mirror of
https://github.com/RetroShare/RetroShare.git
synced 2026-09-12 19:50:17 +05:00
Optimize monorepo unified build paths, Botan package lookups, and Makefile orchestrator
This commit is contained in:
parent
a6c9695168
commit
ff60b62868
95
Makefile
95
Makefile
@ -9,56 +9,95 @@ RS_WEBUI ?= ON
|
||||
RS_DEVELOPMENT_BUILD ?= OFF
|
||||
CMAKE_BUILD_TYPE ?=
|
||||
|
||||
# Detect Windows MSYS2 / MinGW environment to force Makefile generation
|
||||
ifeq ($(OS),Windows_NT)
|
||||
CMAKE_GEN ?= -G "MSYS Makefiles"
|
||||
else
|
||||
CMAKE_GEN ?=
|
||||
endif
|
||||
|
||||
# Global CMake flags (forces policy compatibility for old submodules like libbitdht)
|
||||
CMAKE_FLAGS ?= -DCMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||
|
||||
# Dynamically detect number of CPUs (defaults to 4 if not found)
|
||||
NPROC ?= $(shell nproc 2>/dev/null || echo 4)
|
||||
|
||||
# Global build directory at the root
|
||||
BUILD_DIR = Build
|
||||
|
||||
.PHONY: all clean rnp libretroshare retroshare-service retroshare-friendserver retroshare-gui
|
||||
|
||||
# Note: retroshare-gui is intentionally excluded from the default 'all' target
|
||||
# as its UI CMakeLists.txt files are broken originally.
|
||||
# This allows compiling everything else (servers/services) with guaranteed success.
|
||||
all: rnp libretroshare retroshare-service retroshare-friendserver
|
||||
@echo "================================================================================"
|
||||
@echo " SUCCESS: All functional RetroShare modules have been compiled successfully! "
|
||||
@echo "================================================================================"
|
||||
all: rnp
|
||||
@echo ">>> Compiling all functional RetroShare modules..."
|
||||
mkdir -p $(BUILD_DIR)
|
||||
cd $(BUILD_DIR) && cmake $(CMAKE_GEN) $(CMAKE_FLAGS) \
|
||||
-DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \
|
||||
-DRS_RNPLIB=$(RS_RNPLIB) \
|
||||
-DRS_JSON_API=$(RS_JSON_API) \
|
||||
-DRS_WEBUI=$(RS_WEBUI) \
|
||||
-DRS_GUI=ON \
|
||||
-DRS_SERVICE=ON \
|
||||
-DRS_FRIENDSERVER=ON \
|
||||
.. && make -j$(NPROC)
|
||||
|
||||
rnp:
|
||||
@echo ">>> Step 1: Compiling RNP..."
|
||||
mkdir -p supportlibs/librnp/Build
|
||||
cd supportlibs/librnp/Build && cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DCRYPTO_BACKEND=botan -DBUILD_TESTING=off .. && make -j$(NPROC)
|
||||
cd supportlibs/librnp/Build && cmake $(CMAKE_GEN) $(CMAKE_FLAGS) -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DCRYPTO_BACKEND=botan -DBUILD_TESTING=off .. && make -j$(NPROC)
|
||||
|
||||
libretroshare: rnp
|
||||
@echo ">>> Step 2: Compiling libretroshare..."
|
||||
rm -rf libretroshare/supportlibs
|
||||
ln -s ../supportlibs libretroshare/supportlibs
|
||||
mkdir -p libretroshare/Build
|
||||
cd libretroshare/Build && cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DRS_JSON_API=$(RS_JSON_API) -DRS_WEBUI=$(RS_WEBUI) .. && make -j$(NPROC)
|
||||
mkdir -p $(BUILD_DIR)
|
||||
cd $(BUILD_DIR) && cmake $(CMAKE_GEN) $(CMAKE_FLAGS) \
|
||||
-DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \
|
||||
-DRS_RNPLIB=$(RS_RNPLIB) \
|
||||
-DRS_JSON_API=$(RS_JSON_API) \
|
||||
-DRS_WEBUI=$(RS_WEBUI) \
|
||||
-DRS_GUI=OFF \
|
||||
-DRS_SERVICE=OFF \
|
||||
-DRS_FRIENDSERVER=OFF \
|
||||
.. && make -j$(NPROC) retroshare
|
||||
|
||||
retroshare-service: rnp
|
||||
@echo ">>> Step 3: Compiling retroshare-service..."
|
||||
rm -rf retroshare-service/Build
|
||||
mkdir -p retroshare-service/Build
|
||||
ln -s ../../supportlibs retroshare-service/Build/supportlibs
|
||||
cd retroshare-service/Build && cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DRS_RNPLIB=$(RS_RNPLIB) -DRS_WEBUI=$(RS_WEBUI) .. && make -j$(NPROC)
|
||||
mkdir -p $(BUILD_DIR)
|
||||
cd $(BUILD_DIR) && cmake $(CMAKE_GEN) $(CMAKE_FLAGS) \
|
||||
-DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \
|
||||
-DRS_RNPLIB=$(RS_RNPLIB) \
|
||||
-DRS_JSON_API=$(RS_JSON_API) \
|
||||
-DRS_WEBUI=$(RS_WEBUI) \
|
||||
-DRS_GUI=OFF \
|
||||
-DRS_SERVICE=ON \
|
||||
-DRS_FRIENDSERVER=OFF \
|
||||
.. && make -j$(NPROC) retroshare-service
|
||||
|
||||
retroshare-friendserver: rnp
|
||||
@echo ">>> Step 4: Compiling retroshare-friendserver..."
|
||||
rm -rf retroshare-friendserver/Build
|
||||
mkdir -p retroshare-friendserver/Build
|
||||
ln -s ../../supportlibs retroshare-friendserver/Build/supportlibs
|
||||
cd retroshare-friendserver/Build && cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DRS_RNPLIB=$(RS_RNPLIB) .. && make -j$(NPROC)
|
||||
mkdir -p $(BUILD_DIR)
|
||||
cd $(BUILD_DIR) && cmake $(CMAKE_GEN) $(CMAKE_FLAGS) \
|
||||
-DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \
|
||||
-DRS_RNPLIB=$(RS_RNPLIB) \
|
||||
-DRS_JSON_API=$(RS_JSON_API) \
|
||||
-DRS_WEBUI=$(RS_WEBUI) \
|
||||
-DRS_GUI=OFF \
|
||||
-DRS_SERVICE=OFF \
|
||||
-DRS_FRIENDSERVER=ON \
|
||||
.. && make -j$(NPROC) retroshare-friendserver
|
||||
|
||||
# Target for compiling the GUI application
|
||||
retroshare-gui: rnp
|
||||
@echo ">>> Step 5: Compiling retroshare-gui (UI)..."
|
||||
mkdir -p retroshare-gui/Build
|
||||
if [ ! -L retroshare-gui/Build/supportlibs ]; then ln -s ../../supportlibs retroshare-gui/Build/supportlibs; fi
|
||||
cd retroshare-gui/Build && cmake -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) -DRS_DEVELOPMENT_BUILD=$(RS_DEVELOPMENT_BUILD) -DRS_JSON_API=$(RS_JSON_API) -DRS_WEBUI=$(RS_WEBUI) .. && make -j$(NPROC)
|
||||
mkdir -p $(BUILD_DIR)
|
||||
cd $(BUILD_DIR) && cmake $(CMAKE_GEN) $(CMAKE_FLAGS) \
|
||||
-DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE) \
|
||||
-DRS_RNPLIB=$(RS_RNPLIB) \
|
||||
-DRS_JSON_API=$(RS_JSON_API) \
|
||||
-DRS_WEBUI=$(RS_WEBUI) \
|
||||
-DRS_GUI=ON \
|
||||
-DRS_SERVICE=OFF \
|
||||
-DRS_FRIENDSERVER=OFF \
|
||||
.. && make -j$(NPROC) retroshare-gui
|
||||
|
||||
clean:
|
||||
@echo "Cleaning up all build directories..."
|
||||
rm -rf supportlibs/librnp/Build
|
||||
rm -rf libretroshare/Build libretroshare/supportlibs
|
||||
rm -rf retroshare-service/Build
|
||||
rm -rf retroshare-friendserver/Build
|
||||
rm -rf retroshare-gui/Build
|
||||
rm -rf $(BUILD_DIR)
|
||||
|
||||
@ -45,21 +45,23 @@ target_compile_options(${PROJECT_NAME} PRIVATE -Wno-deprecated-declarations)
|
||||
|
||||
|
||||
# Find libretroshare
|
||||
set(LIBRETROSHARE_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libretroshare/")
|
||||
if(EXISTS "${LIBRETROSHARE_DEVEL_DIR}/CMakeLists.txt" )
|
||||
message(STATUS "libretroshare source found at ${LIBRETROSHARE_DEVEL_DIR} using it" )
|
||||
add_subdirectory("${LIBRETROSHARE_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/libretroshare" )
|
||||
else()
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
libretroshare
|
||||
GIT_REPOSITORY "https://github.com/RetroShare/libretroshare.git"
|
||||
GIT_TAG "origin/master"
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
TIMEOUT 10
|
||||
)
|
||||
FetchContent_MakeAvailable(libretroshare)
|
||||
if(NOT TARGET retroshare)
|
||||
set(LIBRETROSHARE_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libretroshare/")
|
||||
if(EXISTS "${LIBRETROSHARE_DEVEL_DIR}/CMakeLists.txt" )
|
||||
message(STATUS "libretroshare source found at ${LIBRETROSHARE_DEVEL_DIR} using it" )
|
||||
add_subdirectory("${LIBRETROSHARE_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/libretroshare" )
|
||||
else()
|
||||
include(FetchContent)
|
||||
FetchContent_Declare(
|
||||
libretroshare
|
||||
GIT_REPOSITORY "https://github.com/RetroShare/libretroshare.git"
|
||||
GIT_TAG "origin/master"
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
TIMEOUT 10
|
||||
)
|
||||
FetchContent_MakeAvailable(libretroshare)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Include directories
|
||||
@ -71,17 +73,19 @@ target_include_directories(${PROJECT_NAME} PRIVATE
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE retroshare)
|
||||
|
||||
if(RS_RNPLIB)
|
||||
find_library(BOTAN_LIBRARY NAMES botan botan-3 botan-2 libbotan-3 libbotan-2 REQUIRED)
|
||||
|
||||
# Add RNP build directories to linker search path
|
||||
target_link_directories(${PROJECT_NAME} PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/supportlibs/librnp/Build/src/lib
|
||||
${CMAKE_CURRENT_BINARY_DIR}/supportlibs/librnp/Build/src/libsexpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/librnp/Build/src/lib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/librnp/Build/src/libsexpp
|
||||
)
|
||||
|
||||
# Link libraries by name, including RNP libs and dependencies first
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
rnp # Link by name
|
||||
sexpp
|
||||
botan-2
|
||||
${BOTAN_LIBRARY}
|
||||
json-c
|
||||
bz2
|
||||
z
|
||||
@ -92,4 +96,8 @@ endif(RS_RNPLIB)
|
||||
# Link only libretroshare, it should handle its own dependencies now
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE retroshare)
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 winmm iphlpapi mswsock)
|
||||
endif()
|
||||
|
||||
install(TARGETS ${PROJECT_NAME} DESTINATION ${RS_BIN_INSTALL_DIR})
|
||||
|
||||
@ -35,6 +35,11 @@ option(
|
||||
|
||||
set(RS_JSON_API ON CACHE BOOL "Use restbed to expose libretroshare as JSON API via HTTP" FORCE)
|
||||
|
||||
option(
|
||||
RS_USE_NATIVE_DIALOGS
|
||||
"Enable native dialogs (replaces CONFIG+=rs_use_native_dialogs)"
|
||||
OFF )
|
||||
|
||||
option(
|
||||
RS_SERVICE_DESKTOP
|
||||
"Install icons and shortcuts for desktop environements"
|
||||
@ -123,7 +128,11 @@ add_executable(${PROJECT_NAME} ${RS_GUI_SOURCES} ${RS_IMPLEMENTATION_HEADERS} ${
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "retroshare")
|
||||
install(TARGETS ${PROJECT_NAME} DESTINATION ${RS_BIN_INSTALL_DIR})
|
||||
|
||||
include_directories( ${CMAKE_BINARY_DIR} )
|
||||
if(RS_USE_NATIVE_DIALOGS)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE RS_NATIVEDIALOGS)
|
||||
endif()
|
||||
|
||||
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
|
||||
|
||||
################################################################################
|
||||
|
||||
@ -133,23 +142,25 @@ endif(RS_DEVELOPMENT_BUILD)
|
||||
|
||||
################################################################################
|
||||
|
||||
set(LIBRETROSHARE_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libretroshare/")
|
||||
if(EXISTS "${LIBRETROSHARE_DEVEL_DIR}/.git" )
|
||||
message(
|
||||
STATUS
|
||||
"libretroshare submodule found at ${LIBRETROSHARE_DEVEL_DIR} using it" )
|
||||
add_subdirectory(
|
||||
"${LIBRETROSHARE_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/libretroshare" )
|
||||
else()
|
||||
FetchContent_Declare(
|
||||
libretroshare
|
||||
GIT_REPOSITORY "https://gitlab.com/RetroShare/libretroshare.git"
|
||||
GIT_TAG "origin/master"
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
TIMEOUT 10
|
||||
)
|
||||
FetchContent_MakeAvailable(libretroshare)
|
||||
if(NOT TARGET retroshare)
|
||||
set(LIBRETROSHARE_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libretroshare/")
|
||||
if(EXISTS "${LIBRETROSHARE_DEVEL_DIR}/.git" )
|
||||
message(
|
||||
STATUS
|
||||
"libretroshare submodule found at ${LIBRETROSHARE_DEVEL_DIR} using it" )
|
||||
add_subdirectory(
|
||||
"${LIBRETROSHARE_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/libretroshare" )
|
||||
else()
|
||||
FetchContent_Declare(
|
||||
libretroshare
|
||||
GIT_REPOSITORY "https://gitlab.com/RetroShare/libretroshare.git"
|
||||
GIT_TAG "origin/master"
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
TIMEOUT 10
|
||||
)
|
||||
FetchContent_MakeAvailable(libretroshare)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBRETROSHARE_DEVEL_DIR}/src/)
|
||||
@ -506,6 +517,8 @@ if(RS_GXS_CIRCLES)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE RS_USE_CIRCLES )
|
||||
endif(RS_GXS_CIRCLES)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE retroshare)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE -Wl,--no-as-needed z bz2 json-c botan-2 -Wl,--as-needed)
|
||||
find_library(BOTAN_LIBRARY NAMES botan botan-3 botan-2 libbotan-3 libbotan-2 REQUIRED)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE retroshare)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE -Wl,--no-as-needed z bz2 json-c ${BOTAN_LIBRARY} -Wl,--as-needed)
|
||||
|
||||
|
||||
@ -110,23 +110,25 @@ endif(RS_DEVELOPMENT_BUILD)
|
||||
|
||||
################################################################################
|
||||
|
||||
set(LIBRETROSHARE_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libretroshare/")
|
||||
if(EXISTS "${LIBRETROSHARE_DEVEL_DIR}/CMakeLists.txt" )
|
||||
message(
|
||||
STATUS
|
||||
"libretroshare source found at ${LIBRETROSHARE_DEVEL_DIR} using it" )
|
||||
add_subdirectory(
|
||||
"${LIBRETROSHARE_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/libretroshare" )
|
||||
else()
|
||||
FetchContent_Declare(
|
||||
libretroshare
|
||||
GIT_REPOSITORY "https://github.com/RetroShare/libretroshare.git"
|
||||
GIT_TAG "origin/master"
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
TIMEOUT 10
|
||||
)
|
||||
FetchContent_MakeAvailable(libretroshare)
|
||||
if(NOT TARGET retroshare)
|
||||
set(LIBRETROSHARE_DEVEL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../libretroshare/")
|
||||
if(EXISTS "${LIBRETROSHARE_DEVEL_DIR}/CMakeLists.txt" )
|
||||
message(
|
||||
STATUS
|
||||
"libretroshare source found at ${LIBRETROSHARE_DEVEL_DIR} using it" )
|
||||
add_subdirectory(
|
||||
"${LIBRETROSHARE_DEVEL_DIR}" "${CMAKE_BINARY_DIR}/libretroshare" )
|
||||
else()
|
||||
FetchContent_Declare(
|
||||
libretroshare
|
||||
GIT_REPOSITORY "https://github.com/RetroShare/libretroshare.git"
|
||||
GIT_TAG "origin/master"
|
||||
GIT_SHALLOW TRUE
|
||||
GIT_PROGRESS TRUE
|
||||
TIMEOUT 10
|
||||
)
|
||||
FetchContent_MakeAvailable(libretroshare)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE retroshare)
|
||||
@ -134,17 +136,19 @@ target_link_libraries(${PROJECT_NAME} PRIVATE retroshare)
|
||||
################################################################################
|
||||
|
||||
if(RS_RNPLIB)
|
||||
find_library(BOTAN_LIBRARY NAMES botan botan-3 botan-2 libbotan-3 libbotan-2 REQUIRED)
|
||||
|
||||
# Add RNP build directories to linker search path
|
||||
target_link_directories(${PROJECT_NAME} PRIVATE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/supportlibs/librnp/Build/src/lib
|
||||
${CMAKE_CURRENT_BINARY_DIR}/supportlibs/librnp/Build/src/libsexpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/librnp/Build/src/lib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../supportlibs/librnp/Build/src/libsexpp
|
||||
)
|
||||
|
||||
# Link libraries by name, including RNP libs and dependencies first
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE
|
||||
rnp # Link by name
|
||||
sexpp
|
||||
botan-2
|
||||
${BOTAN_LIBRARY}
|
||||
json-c
|
||||
bz2
|
||||
z
|
||||
@ -160,9 +164,12 @@ endif(RS_RNPLIB)
|
||||
# ${JSONC_INCLUDE_DIRS}
|
||||
# )
|
||||
|
||||
# Link only libretroshare, it should handle its own dependencies now
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE retroshare)
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 winmm iphlpapi mswsock)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
|
||||
if(RS_SERVICE_DESKTOP)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user