From b7f79fc1f55058a849deba2c815d8516adb235e7 Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Tue, 11 Dec 2018 14:43:48 +0100 Subject: [PATCH] add CMakeLists in root directory to simplify build configuration --- bindings_python/.gitignore => .gitignore | 0 CMakeLists.txt | 16 ++++++ appveyor.yml | 34 ++++--------- bindings_python/CMakeLists.txt | 64 ++++-------------------- core/.gitignore | 1 - core/CMakeLists.txt | 53 ++++++-------------- 6 files changed, 51 insertions(+), 117 deletions(-) rename bindings_python/.gitignore => .gitignore (100%) create mode 100644 CMakeLists.txt delete mode 100644 core/.gitignore diff --git a/bindings_python/.gitignore b/.gitignore similarity index 100% rename from bindings_python/.gitignore rename to .gitignore diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6c8e36c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required (VERSION 2.6) + +set(PROJECT_NAME "SourcetrailDB") + +project(${PROJECT_NAME}) + +# configure default build type to Release +set(CMAKE_BUILD_TYPE_INIT "Release") + + +set(LIB_CORE "lib_core") +set(CORE_SOURCE_DIR "${CMAKE_SOURCE_DIR}/core") # can be accessed in subdirectory CMake files +set(CORE_BINARY_DIR "${CMAKE_BINARY_DIR}/core") # can be accessed in subdirectory CMake files + +add_subdirectory(${CORE_SOURCE_DIR} ${CORE_BINARY_DIR}) +add_subdirectory("${CMAKE_SOURCE_DIR}/bindings_python" "${CMAKE_BINARY_DIR}/bindings_python") diff --git a/appveyor.yml b/appveyor.yml index c3f8b9a..104ea91 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -29,31 +29,17 @@ install: before_build: - # Setup core project - - cd core - mkdir build - cd build - - mkdir %ARCHITECTURE% - - cd %ARCHITECTURE% - - cmake -G "%CMAKE_GENERATOR%" ../.. - - cd ../../.. - # Setup bindings_python project - - cd bindings_python - - mkdir build - - cd build - - mkdir %ARCHITECTURE% - - cd %ARCHITECTURE% - - cmake -G "%CMAKE_GENERATOR%" ../.. -DPYTHON_INCLUDE_DIRS="%PYTHON_PATH%/include" -DPYTHON_LIBRARIES="%PYTHON_PATH%/libs/python37.lib" - - cd ../../.. + - cmake -G "%CMAKE_GENERATOR%" ../ + - cmake -G "%CMAKE_GENERATOR%" ../ -DPYTHON_INCLUDE_DIRS="%PYTHON_PATH%/include" -DPYTHON_LIBRARIES="%PYTHON_PATH%/libs/python37.lib" + - cd ../ build_script: - - cd core/build/%ARCHITECTURE% + - cd build - msbuild /p:configuration=Release /v:m ALL_BUILD.vcxproj - - cd ../../.. - - cd bindings_python/build/%ARCHITECTURE% - - msbuild /p:configuration=Release /v:m ALL_BUILD.vcxproj - - cd ../../.. + - cd ../ after_build: @@ -63,17 +49,17 @@ after_build: - mkdir include - cd .. - ps: | - copy core/build/$env:ARCHITECTURE/release/sourcetraildb.lib artifacts_core/lib/ - copy core/build/$env:ARCHITECTURE/include/version.h artifacts_core/include/ + copy build/core/release/sourcetraildb.lib artifacts_core/lib/ + copy build/core/include/version.h artifacts_core/include/ copy core/include/* artifacts_core/include/ - mkdir artifacts_bindings_python - ps: | - copy bindings_python/build/$env:ARCHITECTURE/release/_sourcetraildb.pyd artifacts_bindings_python/ - copy bindings_python/build/$env:ARCHITECTURE/release/sourcetraildb.py artifacts_bindings_python/ + copy build/bindings_python/release/_sourcetraildb.pyd artifacts_bindings_python/ + copy build/bindings_python/release/sourcetraildb.py artifacts_bindings_python/ test_script: - - "core\\build\\%ARCHITECTURE%\\release\\test.exe" + - "build\\core\\release\\test_core.exe" artifacts: diff --git a/bindings_python/CMakeLists.txt b/bindings_python/CMakeLists.txt index 65f1136..638acf0 100644 --- a/bindings_python/CMakeLists.txt +++ b/bindings_python/CMakeLists.txt @@ -1,32 +1,7 @@ cmake_minimum_required (VERSION 2.6) -set(PROJECT_NAME "SourcetrailDBBindingsPython") +set(LIB_BINDINGS_PYTHON "lib_bindings_python") set(PACKAGE_NAME "sourcetraildb") -set(LIB_NAME "_${PACKAGE_NAME}") - -project(${PROJECT_NAME}) - -# check for current architecture -if (NOT "${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)") - set(ARCH 32) -else() - set(ARCH 64) -endif() - -# configure default build type to Release -set(CMAKE_BUILD_TYPE_INIT "Release") - -# configure the output directory -if (UNIX) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/${ARCH}bit/${CMAKE_BUILD_TYPE}/") -else () - foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) - string( TOUPPER ${OUTPUTCONFIG} UPPER_OUTPUTCONFIG ) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${UPPER_OUTPUTCONFIG} "${CMAKE_SOURCE_DIR}/build/${ARCH}bit/${OUTPUTCONFIG}/") - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${UPPER_OUTPUTCONFIG} "${CMAKE_SOURCE_DIR}/build/${ARCH}bit/${OUTPUTCONFIG}/") - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${UPPER_OUTPUTCONFIG} "${CMAKE_SOURCE_DIR}/build/${ARCH}bit/${OUTPUTCONFIG}/") - endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES) -endif () # --- Find Python --- @@ -45,25 +20,10 @@ message(STATUS "Found Python include dirs: ${PYTHON_INCLUDE_DIRS}") message(STATUS "Found Python libraries: ${PYTHON_LIBRARIES}") -# --- Find Core --- - -if (NOT EXISTS "${CORE_INCLUDE_DIRS}") - message(STATUS "Core include dir \"${CORE_INCLUDE_DIRS}\" does not exist, trying to find Core automatically.") - set(CORE_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/../core/include" CACHE FILEPATH "path to core include directory") - message(STATUS "Set Core include dir to \"${CORE_INCLUDE_DIRS}\".") -endif () - -if (NOT EXISTS "${CORE_LIBRARIES}") - message(STATUS "Core library \"${CORE_LIBRARIES}\" does not exist, trying to find Core automatically.") - set(CORE_LIBRARIES "${CMAKE_SOURCE_DIR}/../core/build/${ARCH}bit/Release/sourcetraildb.lib" CACHE FILEPATH "path to core library directory") - message(STATUS "Set Core library to \"${CORE_LIBRARIES}\".") -endif () - - # --- Setup Paths --- -set(RESOURCES_SWIG_DIR "${CMAKE_SOURCE_DIR}/../resources_swig") -set(GENERATED_SRC_DIR "${CMAKE_BINARY_DIR}/src") +set(RESOURCES_SWIG_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../resources_swig") +set(GENERATED_SRC_DIR "${CMAKE_CURRENT_BINARY_DIR}/src") set(SWIG_INTERFACE_FILE "${RESOURCES_SWIG_DIR}/interface/${PACKAGE_NAME}.i") set(GENERATED_WRAPPER_FILE "${GENERATED_SRC_DIR}/${PACKAGE_NAME}_wrap.cxx") @@ -85,24 +45,22 @@ set(HDR_FILES # --- Configure Target --- -add_library(${LIB_NAME} SHARED ${SRC_FILES} ${HDR_FILES} ${SWIG_INTERFACE_FILE}) +add_library(${LIB_BINDINGS_PYTHON} SHARED ${SRC_FILES} ${HDR_FILES} ${SWIG_INTERFACE_FILE}) -set_target_properties(${LIB_NAME} PROPERTIES SUFFIX ".pyd") +set_target_properties(${LIB_BINDINGS_PYTHON} PROPERTIES OUTPUT_NAME "_${PACKAGE_NAME}") +set_target_properties(${LIB_BINDINGS_PYTHON} PROPERTIES SUFFIX ".pyd") add_custom_command( - TARGET ${LIB_NAME} + TARGET ${LIB_BINDINGS_PYTHON} PRE_BUILD - COMMAND if not exist \"${GENERATED_SRC_DIR}\" mkdir \"${GENERATED_SRC_DIR}\" \n swig -c++ -python -I${RESOURCES_SWIG_DIR}/include -o ${GENERATED_WRAPPER_FILE} -outdir ${CMAKE_SOURCE_DIR}/build/${ARCH}bit/$(CONFIGURATION) ${SWIG_INTERFACE_FILE} + COMMAND if not exist \"${GENERATED_SRC_DIR}\" mkdir \"${GENERATED_SRC_DIR}\" \n swig -c++ -python -I${RESOURCES_SWIG_DIR}/include -o ${GENERATED_WRAPPER_FILE} -outdir ${CMAKE_CURRENT_BINARY_DIR}/$(CONFIGURATION) ${SWIG_INTERFACE_FILE} COMMENT "Generating wrapper code file." ) -target_include_directories(${LIB_NAME} PUBLIC +target_include_directories(${LIB_BINDINGS_PYTHON} PUBLIC "${RESOURCES_SWIG_DIR}/include" - "${CORE_INCLUDE_DIRS}" + "${CORE_SOURCE_DIR}/include" ${PYTHON_INCLUDE_DIRS} ) -message("CORE_RELEASE_LIBRARY: ${CORE_LIBRARIES}") - -target_link_libraries(${LIB_NAME} ${PYTHON_LIBRARIES}) -target_link_libraries(${LIB_NAME} ${CORE_LIBRARIES}) +target_link_libraries(${LIB_BINDINGS_PYTHON} ${PYTHON_LIBRARIES} ${LIB_CORE}) diff --git a/core/.gitignore b/core/.gitignore deleted file mode 100644 index 84c048a..0000000 --- a/core/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build/ diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 83b1e90..0d6e24f 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -1,44 +1,17 @@ cmake_minimum_required (VERSION 2.6) -set(PROJECT_NAME "SourcetrailDBCore") -set(LIB_NAME "sourcetraildb") -set(TEST_NAME "test") +set(TEST_CORE "test_core") set(INTERFACE_VERSION 0) set(DATABASE_VERSION 22) set(COMMIT_VERSION 1) set(VERSION_STRING "v${INTERFACE_VERSION}_db${DATABASE_VERSION}_c${COMMIT_VERSION}") -project(${PROJECT_NAME}) - -# check for current architecture -if(NOT "${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)") - set(ARCH 32) -else() - set(ARCH 64) -endif() - -# configure default build type to Release -set(CMAKE_BUILD_TYPE_INIT "Release") - -# configure the output directory -if (UNIX) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/build/${ARCH}bit/${CMAKE_BUILD_TYPE}/") -else () - foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES}) - string( TOUPPER ${OUTPUTCONFIG} UPPER_OUTPUTCONFIG ) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${UPPER_OUTPUTCONFIG} "${CMAKE_SOURCE_DIR}/build/${ARCH}bit/${OUTPUTCONFIG}/") - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_${UPPER_OUTPUTCONFIG} "${CMAKE_SOURCE_DIR}/build/${ARCH}bit/${OUTPUTCONFIG}/") - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${UPPER_OUTPUTCONFIG} "${CMAKE_SOURCE_DIR}/build/${ARCH}bit/${OUTPUTCONFIG}/") - endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES) -endif () - - -set(GENERATED_INCLUDE_DIRECTORY "${CMAKE_BINARY_DIR}/include") +set(GENERATED_INCLUDE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include") set(GENERATED_VERSION_FILE "${GENERATED_INCLUDE_DIRECTORY}/version.h") configure_file( - ${CMAKE_SOURCE_DIR}/version.h.in + ${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${GENERATED_VERSION_FILE} ) @@ -86,11 +59,13 @@ set(LIB_HDR_FILES ${GENERATED_VERSION_FILE} ) -add_library(${LIB_NAME} STATIC ${LIB_SRC_FILES} ${LIB_HDR_FILES}) +add_library(${LIB_CORE} STATIC ${LIB_SRC_FILES} ${LIB_HDR_FILES}) -target_include_directories(${LIB_NAME} PUBLIC - "${CMAKE_SOURCE_DIR}/include" - "${CMAKE_SOURCE_DIR}/external" +set_target_properties(${LIB_CORE} PROPERTIES OUTPUT_NAME "sourcetraildb") + +target_include_directories(${LIB_CORE} PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/include" + "${CMAKE_CURRENT_SOURCE_DIR}/external" "${GENERATED_INCLUDE_DIRECTORY}" ) @@ -99,12 +74,12 @@ set(TEST_SRC_FILES test/test.cpp ) -add_executable(${TEST_NAME} ${TEST_SRC_FILES}) +add_executable(${TEST_CORE} ${TEST_SRC_FILES}) -target_include_directories(${TEST_NAME} PUBLIC - "${CMAKE_SOURCE_DIR}/include" - "${CMAKE_SOURCE_DIR}/external" +target_include_directories(${TEST_CORE} PUBLIC + "${CMAKE_CURRENT_SOURCE_DIR}/include" + "${CMAKE_CURRENT_SOURCE_DIR}/external" "${GENERATED_INCLUDE_DIRECTORY}" ) -target_link_libraries(${TEST_NAME} ${LIB_NAME}) +target_link_libraries(${TEST_CORE} ${LIB_CORE})