diff --git a/CMakeLists.txt b/CMakeLists.txt index db995efa..116cd158 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,63 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.15) -project(pocketpy) +project( + pocketpy + VERSION 2.0.0 + DESCRIPTION "Open Source Python Interpreter for Game Scripting" + HOMEPAGE_URL "https://github.com/pocketpy/pocketpy" + LANGUAGES C CXX +) -set(CMAKE_C_STANDARD 11) -set(CMAKE_C_STANDARD_REQUIRED ON) -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) +# PK_IS_MAIN determines whether the project is being used from root +# or if it is added as a dependency (through add_subdirectory for example). +if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") + set(PK_IS_MAIN TRUE) + option(PK_BUILD_SHARED_LIB "Build shared library" OFF) + option(PK_BUILD_STATIC_LIB "Build static library" OFF) +else() + set(PK_IS_MAIN FALSE) + option(PK_BUILD_SHARED_LIB "Build shared library" OFF) + option(PK_BUILD_STATIC_LIB "Build static library" ON) +endif() +if(PK_BUILD_SHARED_LIB) + add_library(${PROJECT_NAME} SHARED) +elseif(PK_BUILD_STATIC_LIB) + add_library(${PROJECT_NAME} STATIC) +else() + add_executable(main src2/main.cpp) + target_include_directories(main PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include) + target_compile_features(main PRIVATE cxx_std_17) + # shared linked main + add_library(${PROJECT_NAME} SHARED) + target_link_libraries(main PRIVATE ${PROJECT_NAME} ${CMAKE_DL_LIBS}) + # static linked main + # add_library(${PROJECT_NAME} STATIC) + # target_link_libraries(${PROJECT_EXE_NAME} ${PROJECT_NAME}) +endif() + +configure_file("include/pocketpy/common/version.h.in" "pocketpy/common/version.h") + +target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17 c_std_11) + +target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include ${PROJECT_BINARY_DIR}) +file(GLOB_RECURSE POCKETPY_SRC_CPP ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) +file(GLOB_RECURSE POCKETPY_SRC_C ${CMAKE_CURRENT_LIST_DIR}/src/*.c) +target_sources(${PROJECT_NAME} PRIVATE ${POCKETPY_SRC_CPP} ${POCKETPY_SRC_C}) + +set_target_properties( + ${PROJECT_NAME} + PROPERTIES VERSION ${PROJECT_VERSION} + SOVERSION ${PROJECT_VERSION_MAJOR} + DEBUG_POSTFIX d +) + +# TODO: use target_compile_options instead +# because this will change compile options in other projects +# when pocketpy is added as a subdictory if(MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /utf-8 /Ox /jumptablerdata /GS-") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8 /Ox /jumptablerdata /GS-") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /utf-8 /Od /jumptablerdata /GS-") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /utf-8 /Od /jumptablerdata /GS-") add_compile_options(/wd4267 /wd4244) else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions -frtti -O2") @@ -22,11 +70,6 @@ else() endif() endif() -include_directories(${CMAKE_CURRENT_LIST_DIR}/include) -file(GLOB_RECURSE POCKETPY_SRC_CPP ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) -file(GLOB_RECURSE POCKETPY_SRC_C ${CMAKE_CURRENT_LIST_DIR}/src/*.c) -set(POCKETPY_SRC ${POCKETPY_SRC_CPP} ${POCKETPY_SRC_C}) - option(PK_USE_CJSON "" OFF) if(PK_USE_CJSON) add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/3rd/cjson) @@ -48,34 +91,6 @@ if(PK_NO_EXPORT_C_API) add_definitions(-DPK_NO_EXPORT_C_API) endif() -# PK_IS_MAIN determines whether the project is being used from root -# or if it is added as a dependency (through add_subdirectory for example). -if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}") - set(PK_IS_MAIN TRUE) - option(PK_BUILD_SHARED_LIB "Build shared library" OFF) - option(PK_BUILD_STATIC_LIB "Build static library" OFF) -else() - set(PK_IS_MAIN FALSE) - option(PK_BUILD_SHARED_LIB "Build shared library" OFF) - option(PK_BUILD_STATIC_LIB "Build static library" ON) -endif() - -if(PK_BUILD_SHARED_LIB) - add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC}) -elseif(PK_BUILD_STATIC_LIB) - add_library(${PROJECT_NAME} STATIC ${POCKETPY_SRC}) -else() - set(PROJECT_EXE_NAME main) - add_executable(${PROJECT_EXE_NAME} src2/main.cpp) - # shared linked main - add_library(${PROJECT_NAME} SHARED ${POCKETPY_SRC}) - target_link_libraries(${PROJECT_EXE_NAME} ${PROJECT_NAME} ${CMAKE_DL_LIBS}) - # static linked main - # add_library(${PROJECT_NAME} STATIC ${POCKETPY_SRC}) - # target_link_libraries(${PROJECT_EXE_NAME} ${PROJECT_NAME}) -endif() - if(PK_USE_CJSON) target_link_libraries(${PROJECT_NAME} PRIVATE cjson) endif() - diff --git a/include/pocketpy/common/version.h b/include/pocketpy/common/version.h deleted file mode 100644 index b5ab8098..00000000 --- a/include/pocketpy/common/version.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -// clang-format off - -#define PK_VERSION "2.0.0" -#define PK_VERSION_MAJOR 2 -#define PK_VERSION_MINOR 0 -#define PK_VERSION_PATCH 0 diff --git a/include/pocketpy/common/version.h.in b/include/pocketpy/common/version.h.in new file mode 100644 index 00000000..2ca02715 --- /dev/null +++ b/include/pocketpy/common/version.h.in @@ -0,0 +1,7 @@ +#pragma once +// clang-format off + +#define PK_VERSION_MAJOR @pocketpy_VERSION_MAJOR@ +#define PK_VERSION_MINOR @pocketpy_VERSION_MINOR@ +#define PK_VERSION_PATCH @pocketpy_VERSION_PATCH@ +#define PK_VERSION "@pocketpy_VERSION_MAJOR@.@pocketpy_VERSION_MINOR@.@pocketpy_VERSION_PATCH@"