mingw64 build fixes

This commit is contained in:
Scott E. Graves 2024-01-27 12:21:37 -06:00
parent 7698a62c1f
commit f6cdf2914c
5 changed files with 89 additions and 57 deletions

View File

@ -12,9 +12,16 @@ set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_MODULE_PATH set(CMAKE_MODULE_PATH
${CMAKE_MODULE_PATH}
${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules
${CMAKE_MODULE_PATH}
) )
if (MINGW)
set(CMAKE_MODULE_PATH
/mingw64/lib/cmake
/mingw64/lib64/cmake
${CMAKE_MODULE_PATH}
)
endif()
set(THREADS_PREFER_PTHREAD_FLAG ON) set(THREADS_PREFER_PTHREAD_FLAG ON)
if (NOT CMAKE_BUILD_TYPE) if (NOT CMAKE_BUILD_TYPE)

View File

@ -2,6 +2,19 @@
if (REPERTORY_ENABLE_TESTING) if (REPERTORY_ENABLE_TESTING)
enable_testing() enable_testing()
file(GLOB_RECURSE UNITTEST_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/fixtures/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/mocks/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/utils/*.hpp
)
add_project_executable(unittests "${UNITTEST_SOURCES}")
if (MINGW)
find_package(GTest REQUIRED)
else()
set(GTEST_PROJECT_NAME gtest_${GTEST_VERSION}) set(GTEST_PROJECT_NAME gtest_${GTEST_VERSION})
set(GTEST_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${GTEST_PROJECT_NAME}) set(GTEST_BUILD_ROOT ${EXTERNAL_BUILD_ROOT}/builds/${GTEST_PROJECT_NAME})
if (MACOS) if (MACOS)
@ -30,23 +43,12 @@ if (REPERTORY_ENABLE_TESTING)
${GTEST_BUILD_ROOT}/src/gtest_project/googlemock/include ${GTEST_BUILD_ROOT}/src/gtest_project/googlemock/include
) )
if(UNIX)
set(GTEST_LIBRARIES set(GTEST_LIBRARIES
${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgmock.a ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgmock.a
${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest.a ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest.a
${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest_main.a ${GTEST_BUILD_ROOT}/src/gtest_project-build/lib/libgtest_main.a
) )
endif()
file(GLOB_RECURSE UNITTEST_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/tests/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/fixtures/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/mocks/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/utils/*.hpp
)
add_project_executable(unittests "${UNITTEST_SOURCES}")
add_dependencies(unittests add_dependencies(unittests
gtest_project gtest_project
zlib_project zlib_project
@ -56,6 +58,8 @@ if (REPERTORY_ENABLE_TESTING)
GTEST_LINKED_AS_SHARED_LIBRARY=1 GTEST_LINKED_AS_SHARED_LIBRARY=1
REPERTORY_TESTING REPERTORY_TESTING
) )
endif()
target_include_directories(unittests PUBLIC target_include_directories(unittests PUBLIC
${GTEST_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/tests ${CMAKE_CURRENT_SOURCE_DIR}/tests

View File

@ -938,8 +938,25 @@ RUN set -ex \
&& cd ${MY_WORKDIR} \ && cd ${MY_WORKDIR} \
&& rm -r wxWidgets-${MY_WXWIDGETS_VERSION} && rm -r wxWidgets-${MY_WXWIDGETS_VERSION}
ARG GTEST_VERSION=1.14.0
ENV MY_GTEST_VERSION=${GTEST_VERSION}
RUN set -ex \
\
&& wget -q https://github.com/google/googletest/archive/refs/tags/v${GTEST_VERSION}.tar.gz -O - | tar -xz \
&& cd googletest-${MY_GTEST_VERSION} \
&& mkdir build \
&& cd build \
&& cmake .. -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE_CMAKE} \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_STATIC_LIBS=ON \
-DCMAKE_INSTALL_PREFIX=${MY_MINGW} \
&& make -j${MY_NUM_JOBS} \
&& make install \
&& cd ${MY_WORKDIR} \
&& rm -r googletest-${MY_GTEST_VERSION}
RUN set -ex \ RUN set -ex \
\ \
&& mv ${MY_MINGW}/lib/*.dll ${MY_MINGW}/bin \ && mv ${MY_MINGW}/lib/*.dll ${MY_MINGW}/bin \
&& chmod 0777 -R ${MY_MINGW} && chmod 0777 -R ${MY_MINGW}

View File

@ -3,13 +3,12 @@
BUILD_TYPE=$1 BUILD_TYPE=$1
BUILD_CLEAN=$2 BUILD_CLEAN=$2
IS_MINGW=$3 IS_MINGW=$3
IS_WIN32=$4
if [ "${BUILD_TYPE}" == "" ]; then if [ "${BUILD_TYPE}" == "" ]; then
BUILD_TYPE=Release BUILD_TYPE=Release
fi fi
if [ "${IS_MINGW}" == "1" ] || [ "${IS_WIN32}" == "1" ]; then if [ "${IS_MINGW}" == "1" ]; then
BUILD_ROOT=build2 BUILD_ROOT=build2
else else
BUILD_ROOT=build BUILD_ROOT=build
@ -41,7 +40,7 @@ if [ "${IS_MINGW}" == "1" ]; then
CMAKE_ADDITIONAL_OPTS=-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN} CMAKE_ADDITIONAL_OPTS=-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN}
fi fi
if [ "${IS_MINGW}" == "1" ] || [ "${IS_WIN32}" == "1" ]; then if [ "${IS_MINGW}" == "1" ]; then
EXE_EXT=.exe EXE_EXT=.exe
fi fi
@ -55,7 +54,7 @@ pushd ..
ln -sf ${BUILD_FOLDER}/compile_commands.json . ln -sf ${BUILD_FOLDER}/compile_commands.json .
ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} . ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} .
ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} . ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} .
if [ "${IS_MINGW}" == "1" ] || [ "${IS_WIN32}" == "1" ]; then if [ "${IS_MINGW}" == "1" ]; then
ln -sf ${BUILD_FOLDER}/winfsp-x64.dll . ln -sf ${BUILD_FOLDER}/winfsp-x64.dll .
fi fi
popd popd
@ -71,7 +70,7 @@ pushd ../${BUILD_ROOT}
ln -sf ${BUILD_FOLDER}/compile_commands.json . ln -sf ${BUILD_FOLDER}/compile_commands.json .
ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} . ln -sf ${BUILD_FOLDER}/repertory${EXE_EXT} .
ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} . ln -sf ${BUILD_FOLDER}/unittests${EXE_EXT} .
if [ "${IS_MINGW}" == "1" ] || [ "${IS_WIN32}" == "1" ]; then if [ "${IS_MINGW}" == "1" ]; then
ln -sf ${BUILD_FOLDER}/winfsp-x64.dll . ln -sf ${BUILD_FOLDER}/winfsp-x64.dll .
fi fi
popd popd

View File

@ -1,10 +1,15 @@
#!/bin/bash #!/bin/bash
# #!/bin/bash
#
# pushd "$(dirname "$0")/.."
# scripts/make_common.sh "${1}" "${2}" 1
# popd
# #
NUM_JOBS=${MY_NUM_JOBS}
if [[ -z "${NUM_JOBS}" ]]; then
NUM_JOBS=$(getconf _NPROCESSORS_ONLN 2> /dev/null || getconf NPROCESSORS_ONLN 2> /dev/null || echo 1)
if [ "${NUM_JOBS}" -gt "2" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
elif [ "${NUM_JOBS}" -gt "1" ]; then
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
fi
fi
BUILD_TYPE=$1 BUILD_TYPE=$1
BUILD_CLEAN=$2 BUILD_CLEAN=$2
@ -18,6 +23,6 @@ docker stop repertory_${NAME}
docker rm repertory_${NAME} docker rm repertory_${NAME}
docker build --build-arg NUM_JOBS=${MY_NUM_JOBS} -t repertory:${NAME} - < ${SOURCE_DIR}/docker/${BUILD_ARCH}/${NAME} && docker build --build-arg NUM_JOBS=${MY_NUM_JOBS} -t repertory:${NAME} - < ${SOURCE_DIR}/docker/${BUILD_ARCH}/${NAME} &&
docker run -td -u $(id -u):$(id -g) --name repertory_${NAME} -w ${SOURCE_DIR} -v ${SOURCE_DIR}:${SOURCE_DIR}:rw,z repertory:${NAME} && docker run -td -u $(id -u):$(id -g) --name repertory_${NAME} -w ${SOURCE_DIR} -v ${SOURCE_DIR}:${SOURCE_DIR}:rw,z repertory:${NAME} &&
docker exec repertory_${NAME} /bin/bash -c "${SOURCE_DIR}/scripts/make_common.sh ${BUILD_TYPE} "${BUILD_CLEAN}" 1" docker exec repertory_${NAME} /bin/bash -c "${SOURCE_DIR}/scripts/make_common.sh ${BUILD_TYPE} \"${BUILD_CLEAN}\" 1"
docker stop repertory_${NAME} docker stop repertory_${NAME}
docker rm repertory_${NAME} docker rm repertory_${NAME}