Skip to content

Commit 8ee90c3

Browse files
committed
cmake: find dependencies after setting build flags
This makes splitting up the library build instructions later on more obvious and easier to achieve.
1 parent c363513 commit 8ee90c3

File tree

1 file changed

+158
-157
lines changed

1 file changed

+158
-157
lines changed

CMakeLists.txt

Lines changed: 158 additions & 157 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,164 @@ SET(LIBGIT2_VERSION_STRING "${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}.${
184184
FILE(STRINGS "include/git2/version.h" GIT2_HEADER_SOVERSION REGEX "^#define LIBGIT2_SOVERSION [0-9]+$")
185185
STRING(REGEX REPLACE "^.*LIBGIT2_SOVERSION ([0-9]+)$" "\\1" LIBGIT2_SOVERSION "${GIT2_HEADER_SOVERSION}")
186186

187+
# Enable tracing
188+
IF (ENABLE_TRACE STREQUAL "ON")
189+
SET(GIT_TRACE 1)
190+
ENDIF()
191+
192+
# Platform specific compilation flags
193+
IF (MSVC)
194+
ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS)
195+
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
196+
ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
197+
198+
STRING(REPLACE "/Zm1000" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
199+
200+
# /GF - String pooling
201+
# /MP - Parallel build
202+
SET(CMAKE_C_FLAGS "/GF /MP /nologo ${CMAKE_C_FLAGS}")
203+
204+
IF (STDCALL)
205+
# /Gz - stdcall calling convention
206+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gz")
207+
ENDIF ()
208+
209+
IF (STATIC_CRT)
210+
SET(CRT_FLAG_DEBUG "/MTd")
211+
SET(CRT_FLAG_RELEASE "/MT")
212+
ELSE()
213+
SET(CRT_FLAG_DEBUG "/MDd")
214+
SET(CRT_FLAG_RELEASE "/MD")
215+
ENDIF()
216+
217+
IF (MSVC_CRTDBG)
218+
SET(GIT_MSVC_CRTDBG 1)
219+
SET(CRT_FLAG_DEBUG "${CRT_FLAG_DEBUG}")
220+
SET(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}" "Dbghelp.lib")
221+
ENDIF()
222+
223+
# /Zi - Create debugging information
224+
# /Od - Disable optimization
225+
# /D_DEBUG - #define _DEBUG
226+
# /MTd - Statically link the multithreaded debug version of the CRT
227+
# /MDd - Dynamically link the multithreaded debug version of the CRT
228+
# /RTC1 - Run time checks
229+
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Zi /Od /D_DEBUG /RTC1 ${CRT_FLAG_DEBUG}")
230+
231+
# /DNDEBUG - Disables asserts
232+
# /MT - Statically link the multithreaded release version of the CRT
233+
# /MD - Dynamically link the multithreaded release version of the CRT
234+
# /O2 - Optimize for speed
235+
# /Oy - Enable frame pointer omission (FPO) (otherwise CMake will automatically turn it off)
236+
# /GL - Link time code generation (whole program optimization)
237+
# /Gy - Function-level linking
238+
SET(CMAKE_C_FLAGS_RELEASE "/DNDEBUG /O2 /Oy /GL /Gy ${CRT_FLAG_RELEASE}")
239+
240+
# /Oy- - Disable frame pointer omission (FPO)
241+
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "/DNDEBUG /Zi /O2 /Oy- /GL /Gy ${CRT_FLAG_RELEASE}")
242+
243+
# /O1 - Optimize for size
244+
SET(CMAKE_C_FLAGS_MINSIZEREL "/DNDEBUG /O1 /Oy /GL /Gy ${CRT_FLAG_RELEASE}")
245+
246+
# /DYNAMICBASE - Address space load randomization (ASLR)
247+
# /NXCOMPAT - Data execution prevention (DEP)
248+
# /LARGEADDRESSAWARE - >2GB user address space on x86
249+
# /VERSION - Embed version information in PE header
250+
SET(CMAKE_EXE_LINKER_FLAGS "/DYNAMICBASE /NXCOMPAT /LARGEADDRESSAWARE /VERSION:${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}")
251+
252+
# /DEBUG - Create a PDB
253+
# /LTCG - Link time code generation (whole program optimization)
254+
# /OPT:REF /OPT:ICF - Fold out duplicate code at link step
255+
# /INCREMENTAL:NO - Required to use /LTCG
256+
# /DEBUGTYPE:cv,fixup - Additional data embedded in the PDB (requires /INCREMENTAL:NO, so not on for Debug)
257+
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG")
258+
SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO")
259+
SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG /RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:cv,fixup")
260+
SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO")
261+
262+
# Same linker settings for DLL as EXE
263+
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
264+
SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
265+
SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
266+
SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
267+
SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL}")
268+
269+
SET(WIN_RC "src/win32/git2.rc")
270+
ELSE ()
271+
SET(CMAKE_C_FLAGS "-D_GNU_SOURCE ${CMAKE_C_FLAGS}")
272+
273+
ADD_C_FLAG_IF_SUPPORTED(-Wall)
274+
ADD_C_FLAG_IF_SUPPORTED(-Wextra)
275+
276+
IF (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
277+
SET(CMAKE_C_FLAGS "-std=c99 -D_POSIX_C_SOURCE=200112L -D__EXTENSIONS__ -D_POSIX_PTHREAD_SEMANTICS ${CMAKE_C_FLAGS}")
278+
ENDIF()
279+
280+
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -O0")
281+
282+
IF (MINGW OR MSYS) # MinGW and MSYS always do PIC and complain if we tell them to
283+
STRING(REGEX REPLACE "-fPIC" "" CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
284+
ELSEIF (BUILD_SHARED_LIBS)
285+
ADD_C_FLAG_IF_SUPPORTED(-fvisibility=hidden)
286+
287+
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
288+
ENDIF ()
289+
290+
IF (MINGW)
291+
# MinGW >= 3.14 uses the C99-style stdio functions
292+
# automatically, but forks like mingw-w64 still want
293+
# us to define this in order to use them
294+
ADD_DEFINITIONS(-D__USE_MINGW_ANSI_STDIO=1)
295+
ENDIF ()
296+
297+
ADD_C_FLAG_IF_SUPPORTED(-Wdocumentation)
298+
ADD_C_FLAG_IF_SUPPORTED(-Wno-missing-field-initializers)
299+
ADD_C_FLAG_IF_SUPPORTED(-Wstrict-aliasing=2)
300+
ADD_C_FLAG_IF_SUPPORTED(-Wstrict-prototypes)
301+
ADD_C_FLAG_IF_SUPPORTED(-Wdeclaration-after-statement)
302+
ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-const-variable)
303+
ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-function)
304+
305+
IF (APPLE) # Apple deprecated OpenSSL
306+
ADD_C_FLAG_IF_SUPPORTED(-Wno-deprecated-declarations)
307+
ENDIF()
308+
309+
IF (PROFILE)
310+
SET(CMAKE_C_FLAGS "-pg ${CMAKE_C_FLAGS}")
311+
SET(CMAKE_EXE_LINKER_FLAGS "-pg ${CMAKE_EXE_LINKER_FLAGS}")
312+
ENDIF ()
313+
ENDIF()
314+
315+
CHECK_SYMBOL_EXISTS(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
316+
IF (HAVE_REGCOMP_L)
317+
SET(GIT_USE_REGCOMP_L 1)
318+
ENDIF ()
319+
320+
CHECK_FUNCTION_EXISTS(futimens HAVE_FUTIMENS)
321+
IF (HAVE_FUTIMENS)
322+
SET(GIT_USE_FUTIMENS 1)
323+
ENDIF ()
324+
325+
CHECK_FUNCTION_EXISTS(qsort_r HAVE_QSORT_R)
326+
IF (HAVE_QSORT_R)
327+
ADD_DEFINITIONS(-DHAVE_QSORT_R)
328+
ENDIF ()
329+
330+
CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
331+
IF (HAVE_QSORT_S)
332+
ADD_DEFINITIONS(-DHAVE_QSORT_S)
333+
ENDIF ()
334+
335+
IF( NOT CMAKE_CONFIGURATION_TYPES )
336+
# Build Debug by default
337+
IF (NOT CMAKE_BUILD_TYPE)
338+
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
339+
ENDIF ()
340+
ELSE()
341+
# Using a multi-configuration generator eg MSVC or Xcode
342+
# that uses CMAKE_CONFIGURATION_TYPES and not CMAKE_BUILD_TYPE
343+
ENDIF()
344+
187345
# Find required dependencies
188346

189347
IF(WIN32)
@@ -315,10 +473,6 @@ ELSE()
315473
FILE(GLOB SRC_SHA1 src/hash/hash_generic.c)
316474
ENDIF()
317475

318-
# Enable tracing
319-
IF (ENABLE_TRACE STREQUAL "ON")
320-
SET(GIT_TRACE 1)
321-
ENDIF()
322476

323477
# Include POSIX regex when it is required
324478
IF(WIN32 OR AMIGA OR CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
@@ -396,159 +550,6 @@ IF (ICONV_FOUND)
396550
LIST(APPEND LIBGIT2_PC_LIBS ${ICONV_LIBRARIES})
397551
ENDIF()
398552

399-
# Platform specific compilation flags
400-
IF (MSVC)
401-
ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS)
402-
ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
403-
ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_DEPRECATE)
404-
405-
STRING(REPLACE "/Zm1000" " " CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
406-
407-
# /GF - String pooling
408-
# /MP - Parallel build
409-
SET(CMAKE_C_FLAGS "/GF /MP /nologo ${CMAKE_C_FLAGS}")
410-
411-
IF (STDCALL)
412-
# /Gz - stdcall calling convention
413-
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gz")
414-
ENDIF ()
415-
416-
IF (STATIC_CRT)
417-
SET(CRT_FLAG_DEBUG "/MTd")
418-
SET(CRT_FLAG_RELEASE "/MT")
419-
ELSE()
420-
SET(CRT_FLAG_DEBUG "/MDd")
421-
SET(CRT_FLAG_RELEASE "/MD")
422-
ENDIF()
423-
424-
IF (MSVC_CRTDBG)
425-
SET(GIT_MSVC_CRTDBG 1)
426-
SET(CRT_FLAG_DEBUG "${CRT_FLAG_DEBUG}")
427-
SET(CMAKE_C_STANDARD_LIBRARIES "${CMAKE_C_STANDARD_LIBRARIES}" "Dbghelp.lib")
428-
ENDIF()
429-
430-
# /Zi - Create debugging information
431-
# /Od - Disable optimization
432-
# /D_DEBUG - #define _DEBUG
433-
# /MTd - Statically link the multithreaded debug version of the CRT
434-
# /MDd - Dynamically link the multithreaded debug version of the CRT
435-
# /RTC1 - Run time checks
436-
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Zi /Od /D_DEBUG /RTC1 ${CRT_FLAG_DEBUG}")
437-
438-
# /DNDEBUG - Disables asserts
439-
# /MT - Statically link the multithreaded release version of the CRT
440-
# /MD - Dynamically link the multithreaded release version of the CRT
441-
# /O2 - Optimize for speed
442-
# /Oy - Enable frame pointer omission (FPO) (otherwise CMake will automatically turn it off)
443-
# /GL - Link time code generation (whole program optimization)
444-
# /Gy - Function-level linking
445-
SET(CMAKE_C_FLAGS_RELEASE "/DNDEBUG /O2 /Oy /GL /Gy ${CRT_FLAG_RELEASE}")
446-
447-
# /Oy- - Disable frame pointer omission (FPO)
448-
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "/DNDEBUG /Zi /O2 /Oy- /GL /Gy ${CRT_FLAG_RELEASE}")
449-
450-
# /O1 - Optimize for size
451-
SET(CMAKE_C_FLAGS_MINSIZEREL "/DNDEBUG /O1 /Oy /GL /Gy ${CRT_FLAG_RELEASE}")
452-
453-
# /DYNAMICBASE - Address space load randomization (ASLR)
454-
# /NXCOMPAT - Data execution prevention (DEP)
455-
# /LARGEADDRESSAWARE - >2GB user address space on x86
456-
# /VERSION - Embed version information in PE header
457-
SET(CMAKE_EXE_LINKER_FLAGS "/DYNAMICBASE /NXCOMPAT /LARGEADDRESSAWARE /VERSION:${LIBGIT2_VERSION_MAJOR}.${LIBGIT2_VERSION_MINOR}")
458-
459-
# /DEBUG - Create a PDB
460-
# /LTCG - Link time code generation (whole program optimization)
461-
# /OPT:REF /OPT:ICF - Fold out duplicate code at link step
462-
# /INCREMENTAL:NO - Required to use /LTCG
463-
# /DEBUGTYPE:cv,fixup - Additional data embedded in the PDB (requires /INCREMENTAL:NO, so not on for Debug)
464-
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG")
465-
SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO")
466-
SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/DEBUG /RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO /DEBUGTYPE:cv,fixup")
467-
SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/RELEASE /LTCG /OPT:REF /OPT:ICF /INCREMENTAL:NO")
468-
469-
# Same linker settings for DLL as EXE
470-
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
471-
SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
472-
SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
473-
SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}")
474-
SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL}")
475-
476-
SET(WIN_RC "src/win32/git2.rc")
477-
ELSE ()
478-
SET(CMAKE_C_FLAGS "-D_GNU_SOURCE ${CMAKE_C_FLAGS}")
479-
480-
ADD_C_FLAG_IF_SUPPORTED(-Wall)
481-
ADD_C_FLAG_IF_SUPPORTED(-Wextra)
482-
483-
IF (CMAKE_SYSTEM_NAME MATCHES "(Solaris|SunOS)")
484-
SET(CMAKE_C_FLAGS "-std=c99 -D_POSIX_C_SOURCE=200112L -D__EXTENSIONS__ -D_POSIX_PTHREAD_SEMANTICS ${CMAKE_C_FLAGS}")
485-
ENDIF()
486-
487-
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -O0")
488-
489-
IF (MINGW OR MSYS) # MinGW and MSYS always do PIC and complain if we tell them to
490-
STRING(REGEX REPLACE "-fPIC" "" CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
491-
ELSEIF (BUILD_SHARED_LIBS)
492-
ADD_C_FLAG_IF_SUPPORTED(-fvisibility=hidden)
493-
494-
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
495-
ENDIF ()
496-
497-
IF (MINGW)
498-
# MinGW >= 3.14 uses the C99-style stdio functions
499-
# automatically, but forks like mingw-w64 still want
500-
# us to define this in order to use them
501-
ADD_DEFINITIONS(-D__USE_MINGW_ANSI_STDIO=1)
502-
ENDIF ()
503-
504-
ADD_C_FLAG_IF_SUPPORTED(-Wdocumentation)
505-
ADD_C_FLAG_IF_SUPPORTED(-Wno-missing-field-initializers)
506-
ADD_C_FLAG_IF_SUPPORTED(-Wstrict-aliasing=2)
507-
ADD_C_FLAG_IF_SUPPORTED(-Wstrict-prototypes)
508-
ADD_C_FLAG_IF_SUPPORTED(-Wdeclaration-after-statement)
509-
ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-const-variable)
510-
ADD_C_FLAG_IF_SUPPORTED(-Wno-unused-function)
511-
512-
IF (APPLE) # Apple deprecated OpenSSL
513-
ADD_C_FLAG_IF_SUPPORTED(-Wno-deprecated-declarations)
514-
ENDIF()
515-
516-
IF (PROFILE)
517-
SET(CMAKE_C_FLAGS "-pg ${CMAKE_C_FLAGS}")
518-
SET(CMAKE_EXE_LINKER_FLAGS "-pg ${CMAKE_EXE_LINKER_FLAGS}")
519-
ENDIF ()
520-
ENDIF()
521-
522-
CHECK_SYMBOL_EXISTS(regcomp_l "regex.h;xlocale.h" HAVE_REGCOMP_L)
523-
IF (HAVE_REGCOMP_L)
524-
SET(GIT_USE_REGCOMP_L 1)
525-
ENDIF ()
526-
527-
CHECK_FUNCTION_EXISTS(futimens HAVE_FUTIMENS)
528-
IF (HAVE_FUTIMENS)
529-
SET(GIT_USE_FUTIMENS 1)
530-
ENDIF ()
531-
532-
CHECK_FUNCTION_EXISTS(qsort_r HAVE_QSORT_R)
533-
IF (HAVE_QSORT_R)
534-
ADD_DEFINITIONS(-DHAVE_QSORT_R)
535-
ENDIF ()
536-
537-
CHECK_FUNCTION_EXISTS(qsort_s HAVE_QSORT_S)
538-
IF (HAVE_QSORT_S)
539-
ADD_DEFINITIONS(-DHAVE_QSORT_S)
540-
ENDIF ()
541-
542-
IF( NOT CMAKE_CONFIGURATION_TYPES )
543-
# Build Debug by default
544-
IF (NOT CMAKE_BUILD_TYPE)
545-
SET(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE)
546-
ENDIF ()
547-
ELSE()
548-
# Using a multi-configuration generator eg MSVC or Xcode
549-
# that uses CMAKE_CONFIGURATION_TYPES and not CMAKE_BUILD_TYPE
550-
ENDIF()
551-
552553
IF (SECURITY_FOUND)
553554
SET(GIT_SECURE_TRANSPORT 1)
554555
SET(GIT_HTTPS 1)

0 commit comments

Comments
 (0)