Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 70 additions & 45 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,114 +1,139 @@
cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.19)

# Get the absolute path and normalize it to avoid junction/space issues
# Junctions with spaces breaks the build process....
get_filename_component(BIN_DIR "${CMAKE_BINARY_DIR}" REALPATH)

if (NOT MAIN_RUN)
project(dependencies)

include(ExternalProject)
include(FetchContent)

ExternalProject_Add(samp-plugin-sdk
PREFIX "samp-plugin-sdk"
GIT_REPOSITORY "https://github.com/Y-Less/samp-plugin-sdk.git"
GIT_TAG "master"
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
SOURCE_DIR "${BIN_DIR}/external/samp-plugin-sdk-src"
BINARY_DIR "${BIN_DIR}/external/samp-plugin-sdk-build"
STAMP_DIR "${BIN_DIR}/external/samp-plugin-sdk-stamp"
BUILD_COMMAND ""
INSTALL_COMMAND ""
CMAKE_ARGS
"-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
)

if (NOT WIN32)
set(SAMPGDK_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/sampgdk_install")
ExternalProject_Add(sampgdk
PREFIX "sampgdk"
GIT_REPOSITORY "https://github.com/Zeex/sampgdk.git"
GIT_REPOSITORY "https://github.com/Just-Archives/sampgdk.git"
GIT_TAG "master"
UPDATE_COMMAND ""
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release
INSTALL_COMMAND ""
CMAKE_ARGS "-DSAMP_SDK_ROOT=${CMAKE_SOURCE_DIR}/samp-plugin-sdk/src/samp-plugin-sdk"
SOURCE_DIR "${BIN_DIR}/external/sampgdk-src"
BINARY_DIR "${BIN_DIR}/external/sampgdk-build"
STAMP_DIR "${BIN_DIR}/external/sampgdk-stamp"
CMAKE_ARGS
"-DCMAKE_INSTALL_PREFIX=${SAMPGDK_INSTALL_DIR}"
"-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
"-DSAMP_SDK_ROOT=${BIN_DIR}/external/samp-plugin-sdk-src/src/samp-plugin-sdk"
"-DINSTALL_PDB=OFF"
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release
INSTALL_COMMAND ""
)
endif ()

ExternalProject_Add(cmake-modules
PREFIX "cmake-modules"
GIT_REPOSITORY "https://github.com/Zeex/cmake-modules.git"
GIT_TAG "master"
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
FetchContent_Declare(
cmake_modules
GIT_REPOSITORY https://github.com/Just-Archives/cmake-modules.git
GIT_TAG main
SOURCE_DIR "${BIN_DIR}/external/cmake-modules"
)
FetchContent_MakeAvailable(cmake_modules)

ExternalProject_Add(subhook
PREFIX "subhook"
GIT_REPOSITORY "https://github.com/Zeex/subhook.git"
GIT_TAG "master"
GIT_REPOSITORY "https://github.com/Just-Archives/subhook.git"
GIT_TAG "main"
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
SOURCE_DIR "${BIN_DIR}/external/subhook-src"
BINARY_DIR "${BIN_DIR}/external/subhook-build"
STAMP_DIR "${BIN_DIR}/external/subhook-stamp"
BUILD_COMMAND ""
INSTALL_COMMAND ""
CMAKE_ARGS
"-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
)

if (WIN32)
# Windows seems to go top-to-bottom. Linux the other way...
set(SAMPGDK_INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/sampgdk_install")
ExternalProject_Add(sampgdk
PREFIX "sampgdk"
GIT_REPOSITORY "https://github.com/Zeex/sampgdk.git"
GIT_REPOSITORY "https://github.com/Just-Archives/sampgdk.git"
GIT_TAG "master"
UPDATE_COMMAND ""
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --config Release --target Install
CMAKE_ARGS "-DSAMP_SDK_ROOT=${CMAKE_SOURCE_DIR}/samp-plugin-sdk/src/samp-plugin-sdk"
SOURCE_DIR "${BIN_DIR}/external/sampgdk-src"
BINARY_DIR "${BIN_DIR}/external/sampgdk-build"
STAMP_DIR "${BIN_DIR}/external/sampgdk-stamp"
CMAKE_ARGS
"-DCMAKE_INSTALL_PREFIX=${SAMPGDK_INSTALL_DIR}"
"-DCMAKE_POLICY_VERSION_MINIMUM=3.5"
"-DSAMP_SDK_ROOT=${BIN_DIR}/external/samp-plugin-sdk-src/src/samp-plugin-sdk"
"-DINSTALL_PDB=OFF"
BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config Release
INSTALL_COMMAND ""
)
endif ()

add_custom_command(TARGET sampgdk POST_BUILD
COMMAND "${CMAKE_COMMAND}" ${CMAKE_SOURCE_DIR} -DMAIN_RUN=TRUE
COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_SOURCE_DIR}
COMMAND "${CMAKE_COMMAND}" --build ${CMAKE_SOURCE_DIR} --config Release
)
else ()
project(pawn-natives)

# Now that we have them, use them.
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake-modules/src/cmake-modules)
list(APPEND CMAKE_MODULE_PATH ${BIN_DIR}/external/cmake-modules)
include(AMXConfig)
include(AddSAMPPlugin)

include_directories(
samp-plugin-sdk/src/samp-plugin-sdk/
samp-plugin-sdk/src/samp-plugin-sdk/amx
subhook/src/
sampgdk/src/sampgdk/include/
sampgdk/src/sampgdk-build/include/
add_samp_plugin(pawn-natives
${BIN_DIR}/external/subhook-src/subhook.c
${BIN_DIR}/external/samp-plugin-sdk-src/amxplugin.cpp
${BIN_DIR}/external/samp-plugin-sdk-src/amxplugin2.cpp
)

target_include_directories(pawn-natives
PRIVATE
$<BUILD_INTERFACE:${BIN_DIR}/external/samp-plugin-sdk-src>
$<BUILD_INTERFACE:${BIN_DIR}/external/samp-plugin-sdk-src/amx>
$<INSTALL_INTERFACE:amx>
)

target_include_directories(pawn-natives
PRIVATE
$<BUILD_INTERFACE:${BIN_DIR}/external/sampgdk-src>
$<BUILD_INTERFACE:${BIN_DIR}/external/sampgdk-src/include>
$<INSTALL_INTERFACE:sampgdk>
)

add_definitions(-D_CRT_SECURE_NO_WARNINGS)
add_definitions(-DSUBHOOK_IMPLEMENTATION)
add_definitions(-DHAVE_STDINT_H=1)

add_samp_plugin(pawn-natives
test.cpp
subhook/src/subhook/subhook.c
samp-plugin-sdk/src/samp-plugin-sdk/amxplugin.cpp
samp-plugin-sdk/src/samp-plugin-sdk/amxplugin2.cpp
)

if (WIN32)
target_link_libraries(pawn-natives
${CMAKE_SOURCE_DIR}/sampgdk/src/sampgdk-build/Release/sampgdk4.lib
${BIN_DIR}/external/sampgdk-build/Release/sampgdk3.lib
)

set_target_properties(pawn-natives PROPERTIES LINKER_LANGUAGE CXX)
else ()
target_link_libraries(pawn-natives
${CMAKE_SOURCE_DIR}/sampgdk/src/sampgdk-build/libsampgdk.so
${BIN_DIR}/external/sampgdk-build/libsampgdk.so
)

set(CMAKE_CXX_FLAGS "-std=gnu++0x")
if(TARGET_BUILD_ARCH MATCHES "(i[3-6]86|x86)" AND NOT TARGET_BUILD_ARCH MATCHES "(x64|x86_64|amd64)")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32")
endif()
set(CMAKE_CXX_FLAGS "-std=gnu++0x -m32")
endif ()
endif ()