1717#
1818################################################################################
1919
20- cmake_minimum_required (VERSION 2.8.12 )
20+ cmake_minimum_required (VERSION 3.15 )
2121
2222# In-source builds are not possible and so disabled.
2323if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR} )
@@ -84,6 +84,8 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${output_dir})
8484if (MSVC OR XCODE)
8585 set (output_dir ${output_dir} /$<CONFIG>)
8686 set (boot_dir ${boot_dir} /$<CONFIG>)
87+ elseif (MINGW)
88+ set (output_dir ${CMAKE_BINARY_DIR} )
8789endif ()
8890
8991if (MSVC AND DEFAULT_CONFIGURATION)
@@ -98,7 +100,7 @@ if (XCODE)
98100 string (TOUPPER ${conf} conf2)
99101 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_${conf2} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /${conf} /bin)
100102 endforeach ()
101- elseif (UNIX )
103+ elseif (UNIX OR MINGW )
102104 set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${output_dir} /bin)
103105 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${output_dir} /bin)
104106endif ()
@@ -147,8 +149,8 @@ endif()
147149
148150include (Configure)
149151
150- if (FREEBSD)
151- # temporary
152+ if (FREEBSD OR MINGW )
153+ # Build-time temporary installation path
152154 set (CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR} )
153155endif ()
154156
@@ -159,10 +161,33 @@ set(FB_SERVICE_NAME "gds_db")
159161set (FB_SERVICE_PORT 3050)
160162
161163if (WIN32 )
162- set (FB_PREFIX "c:\\\\ Program Files\\\\ Firebird\\\\ " )
164+ if (MSVC )
165+ set (FB_PREFIX "c:\\\\ Program Files\\\\ Firebird\\\\ " )
166+ else ()
167+ set (FB_PREFIX ${CMAKE_INSTALL_PREFIX} )
168+ endif ()
163169 set (FB_IPC_NAME "FIREBIRD" )
164170endif ()
165171
172+ if (MINGW)
173+ set (FB_BINDIR "${FB_PREFIX} /bin" )
174+ set (FB_SBINDIR "${FB_PREFIX} /bin" )
175+ set (FB_INCDIR "${FB_PREFIX} /include" )
176+ set (FB_LIBDIR "${FB_PREFIX} /lib" )
177+ set (FB_CONFDIR "${FB_PREFIX} /etc/firebird" )
178+ set (FB_GUARDDIR "${FB_PREFIX} /etc/firebird" )
179+ set (FB_LOGDIR "${FB_PREFIX} /etc/firebird" )
180+ set (FB_MSGDIR "${FB_PREFIX} /etc/firebird" )
181+ set (FB_SECDBDIR "${FB_PREFIX} /etc/firebird" )
182+ set (FB_DOCDIR "${FB_PREFIX} /share/firebird/doc" )
183+ set (FB_INTLDIR "${FB_PREFIX} /share/firebird/intl" )
184+ set (FB_MISCDIR "${FB_PREFIX} /share/firebird/misc" )
185+ set (FB_PLUGDIR "${FB_PREFIX} /share/firebird/plugins" )
186+ set (FB_SAMPLEDBDIR "${FB_PREFIX} /share/firebird/examples/empbuild" )
187+ set (FB_SAMPLEDIR "${FB_PREFIX} /share/firebird/examples" )
188+ set (FB_TZDATADIR "${FB_PREFIX} /share/firebird/tzdata" )
189+ endif ()
190+
166191set (AUTOCONFIG_SRC ${CMAKE_SOURCE_DIR} /src/include /gen/autoconfig.h.in)
167192set (AUTOCONFIG ${CMAKE_BINARY_DIR} /src/include /gen/autoconfig.h)
168193configure_file (${AUTOCONFIG_SRC} ${AUTOCONFIG} @ONLY)
@@ -173,7 +198,9 @@ configure_file(${AUTOCONFIG_SRC} ${AUTOCONFIG} @ONLY)
173198#
174199################################################################################
175200
176- add_definitions (-DDEV_BUILD)
201+ if ("${CMAKE_BUILD_TYPE} " STREQUAL "Debug" )
202+ add_definitions (-DDEV_BUILD)
203+ endif ()
177204
178205if (WIN32 )
179206 set (OS_DIR win32 )
@@ -192,20 +219,71 @@ if (WIN32)
192219 endif ()
193220 endif (MSVC )
194221
195- set (LIB_Ws2_32 Ws2_32 )
222+ set (LIB_ws2_32 ws2_32 )
196223 set (LIB_comctl32 comctl32)
197224 set (LIB_mpr mpr)
198225 set (LIB_version version )
199226endif (WIN32 )
200227
201228if (MINGW)
202- # clear unix-style prefixes
229+ # Clear unix-style prefixes
203230 set (CMAKE_SHARED_LIBRARY_PREFIX )
204231 set (CMAKE_SHARED_MODULE_PREFIX )
205232 set (CMAKE_STATIC_LIBRARY_PREFIX )
206233
207- add_definitions (-D_WIN32_WINNT=0x0600)
234+ if ("${CMAKE_BUILD_TYPE} " STREQUAL "Debug" )
235+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb" )
236+ set (CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DDEBUG" )
237+ else ()
238+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3" )
239+ set (CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DNDEBUG" )
240+ endif ()
241+
242+ add_definitions (-DMINGW_HAS_SECURE_API -DTTMATH_NOASM)
243+
244+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-shift-count-overflow" )
208245 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4 -std=c++17" )
246+
247+ # Suppress myriad of warnings
248+ set (cxx_flags "" )
249+ list (APPEND cxx_flags
250+ -Wundef
251+ -Wno-format
252+ -Wno-deprecated-declarations
253+ -Wno-ignored-attributes
254+ -Wno-invalid-offsetof
255+ -Wno-long-long
256+ -Wno-non-virtual-dtor
257+ -Wno-parentheses
258+ -Wno-shift-count-overflow
259+ -Wno-sign-compare
260+ -Wno-switch
261+ -Wno-unused-variable
262+ -Wno-write-strings
263+ )
264+ if (CLANG)
265+ list (APPEND cxx_flags
266+ -Wno-varargs
267+ -Wno-constant-conversion
268+ -Wno-inconsistent-missing-override
269+ -Wno-tautological-constant-out-of-range-compare
270+ -Wno-c++11-narrowing
271+ )
272+ else ()
273+ list (APPEND cxx_flags
274+ -Wno-class-memaccess
275+ -Wno-overflow
276+ -Wno-return-local-addr
277+ -Wno-stringop-overflow
278+ -Wno-stringop-overread
279+ -Wno-narrowing
280+ )
281+ endif ()
282+ string (REPLACE ";" " " cxx_flags "${cxx_flags} " )
283+ set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${cxx_flags} " )
284+
285+ set (LIB_iconv iconv)
286+ set (LIB_re2 re2)
209287endif ()
210288
211289if (UNIX )
@@ -214,8 +292,12 @@ if (UNIX)
214292 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC" )
215293 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -msse4 -std=c++17" )
216294
295+ set (FB_INTERNAL_TOMMATH ON )
296+ set (FB_INTERNAL_EDITLINE ON )
297+
298+ set (LIB_re2 re2)
217299 if (NOT CMAKE_CROSSCOMPILING )
218- set (LIB_readline readline )
300+ set (LIB_editline editline )
219301 endif ()
220302 if (NOT FREEBSD)
221303 set (LIB_dl dl)
@@ -251,7 +333,7 @@ endif()
251333#
252334################################################################################
253335
254- if (WIN32 )
336+ if (MSVC )
255337 # icu
256338 if (NOT ICU_EXTRACT)
257339 message (STATUS "Extracting pre-built ICU" )
@@ -324,29 +406,49 @@ if (NOT CMAKE_CROSSCOMPILING)
324406create_boot_commands()
325407create_master_commands()
326408
327- endif () # if (NOT CMAKE_CROSSCOMPILING)
409+ endif () # (NOT CMAKE_CROSSCOMPILING)
328410
329411crosscompile_prebuild_steps()
330412
331- include_directories ("extern/libtommath" )
332- include_directories ("extern/libtomcrypt/src/headers" )
413+ if (FB_INTERNAL_TOMMATH)
414+ include_directories ("extern/libtommath" )
415+ include_directories ("extern/libtomcrypt/src/headers" )
416+ set (LIB_tommath libtommath)
417+ set (LIB_tomcrypt libtomcrypt)
418+ else ()
419+ set (LIB_tommath tommath)
420+ set (LIB_tomcrypt tomcrypt)
421+ endif ()
422+
423+ if (UNIX )
424+ if (FB_INTERNAL_EDITLINE)
425+ include_directories ("extern/editline" )
426+ endif ()
427+
333428include_directories ("extern/decNumber" )
334- include_directories ("extern/icu/include" )
335- include_directories ("extern/zlib" )
429+ include_directories ("extern/libcds" )
430+ include_directories ("extern/re2" )
431+
432+ if (MSVC OR ANDROID)
433+ include_directories ("extern/icu/include" )
434+ include_directories ("extern/zlib" )
435+ endif ()
336436
337437include_directories ("src/include" )
338438include_directories ("src/include/gen" )
339439include_directories ("${CMAKE_CURRENT_BINARY_DIR} /src/include" )
340440include_directories ("${CMAKE_CURRENT_BINARY_DIR} /src/include/gen" )
341441
442+
443+ if (FB_INTERNAL_TOMMATH)
342444########################################
343445# LIBRARY libtommath
344446########################################
345447
346448file (GLOB libtommath_src "extern/libtommath/*.c" "extern/libtommath/*.h" )
347449
348- add_library (libtommath ${libtommath_src} )
349- project_group (libtommath Extern)
450+ add_library (libtommath ${libtommath_src} )
451+ project_group (libtommath Extern)
350452
351453
352454########################################
@@ -362,6 +464,8 @@ add_library (libtomcrypt ${libtomcrypt_src})
362464target_compile_definitions (libtomcrypt PRIVATE LTC_NO_ROLC LTC_SOURCE)
363465project_group (libtomcrypt Extern)
364466
467+ endif () # (FB_INTERNAL_TOMMATH)
468+
365469
366470########################################
367471# LIBRARY decNumber
@@ -375,6 +479,30 @@ add_library (decNumber ${decNumber_src})
375479project_group (decNumber Extern)
376480
377481
482+ if (FB_INTERNAL_EDITLINE)
483+ ########################################
484+ # LIBRARY editline
485+ ########################################
486+
487+ file (GLOB editline_src "extern/editline/src/*.c" "extern/editline/src/*.h" )
488+
489+ add_library (editline ${editline_src} )
490+ project_group (editline Extern)
491+
492+ endif () # (FB_INTERNAL_EDITLINE)
493+
494+
495+ ########################################
496+ # LIBRARY libcds
497+ ########################################
498+
499+ file (GLOB_RECURSE libcds_src "extern/libcds/src/*.cpp" )
500+
501+ add_library (libcds ${libcds_src} )
502+ target_compile_definitions (libcds PUBLIC CDS_BUILD_STATIC_LIB)
503+ project_group (libcds Extern)
504+
505+
378506########################################
379507# EXECUTABLE btyacc
380508########################################
@@ -383,25 +511,27 @@ file(GLOB btyacc_src "extern/btyacc/*.c" "extern/btyacc/*.h")
383511
384512if (NOT CMAKE_CROSSCOMPILING )
385513
386- add_executable (btyacc ${btyacc_src} )
387- project_group (btyacc Extern )
388- set_output_directory (btyacc . CURRENT_DIR )
514+ add_executable (btyacc ${btyacc_src} )
515+ set_output_directory (btyacc src CURRENT_DIR )
516+ project_group (btyacc Extern )
389517
390- endif () # if (NOT CMAKE_CROSSCOMPILING)
518+ endif () # (NOT CMAKE_CROSSCOMPILING)
391519
392520########################################
393521# EXECUTABLE cloop
394522########################################
395523
396524file (GLOB cloop_src "extern/cloop/src/cloop/*.cpp" "extern/cloop/src/cloop/*.h" )
397525
398- add_executable (cloop ${cloop_src} )
399- project_group (cloop Extern)
526+ add_executable (cloop ${cloop_src} )
527+ set_output_directory (cloop src CURRENT_DIR)
528+ project_group (cloop Extern)
400529
401530########################################
402531# subdirectories
403532########################################
404533
534+ add_subdirectory ("extern/re2" )
405535add_subdirectory ("examples" )
406536add_subdirectory ("src" )
407537
0 commit comments