|
1 | | -cmake_minimum_required(VERSION 3.10 FATAL_ERROR) |
2 | | - |
3 | | -project(winflexbison VERSION 2.5.25 LANGUAGES C) |
| 1 | +cmake_minimum_required(VERSION 3.21.0) |
4 | 2 |
|
5 | 3 | # cmake 3.31+ - enable `install` destination paths normalization. |
6 | 4 | if(POLICY CMP0177) |
7 | 5 | cmake_policy(SET CMP0177 OLD) |
8 | 6 | endif() |
9 | 7 |
|
| 8 | +project(winflexbison VERSION 2.5.25 LANGUAGES C) |
| 9 | + |
10 | 10 | if(NOT MSVC) |
11 | 11 | message(WARNING "Only Visual Studio Build is officially supported right now") |
12 | 12 | endif() |
13 | 13 |
|
14 | 14 | add_definitions(-D_CRT_SECURE_NO_WARNINGS) |
15 | | - |
16 | | -if(CMAKE_BUILD_TYPE STREQUAL "Debug") |
17 | | - add_definitions(-D_DEBUG) |
18 | | -endif() |
19 | | - |
20 | 15 | # next line needed for compile in C (nor CPP) mode (ucrt headers bug) |
21 | 16 | add_definitions(-Dinline=__inline) |
22 | 17 | # next line needed for VS2017 only |
23 | 18 | add_definitions(-Drestrict=__restrict) |
24 | 19 |
|
25 | | -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W3 /MD /Od /Zi /EHsc") |
26 | | -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /W3 /GL /Od /Oi /Gy /Zi /EHsc") |
| 20 | +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3 /EHsc") |
| 21 | +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GL /Oi /Gy") |
27 | 22 |
|
28 | 23 | # Define Release by default |
29 | 24 | set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type") |
30 | | - |
31 | 25 | # Only apply to MSVC frontend (not clang frontends) |
32 | 26 | if (MSVC AND NOT CMAKE_C_COMPILER_ID STREQUAL "Clang") |
33 | | - # Make __extension__ expand to nothing on MSVC (so GCC/Clang keep the keyword) |
34 | | - add_compile_definitions("__extension__=") |
| 27 | + # Make __extension__ expand to nothing on MSVC (so GCC/Clang keep the keyword) |
| 28 | + add_compile_definitions("__extension__=") |
35 | 29 | endif() |
36 | 30 |
|
37 | | -if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) |
| 31 | + |
| 32 | +if(PROJECT_IS_TOP_LEVEL) |
38 | 33 | # Output Variables |
39 | | - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_LIST_DIR}/bin/Debug") |
40 | | - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_LIST_DIR}/bin/Release") |
41 | | - |
42 | | - #------------------------------------------------------------------------ |
43 | | - # Static Windows Runtime |
44 | | - # Option to statically link to the Windows runtime. Maybe only |
45 | | - # applies to WIN32/MSVC. |
46 | | - #------------------------------------------------------------------------ |
| 34 | + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_CURRENT_BINARY_DIR}/bin/Debug") |
| 35 | + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_CURRENT_BINARY_DIR}/bin/Release") |
| 36 | + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_CURRENT_BINARY_DIR}/bin/RelWithDebInfo") |
47 | 37 | if (MSVC) |
48 | 38 | add_compile_options("/source-charset:utf-8") |
49 | 39 | option( USE_STATIC_RUNTIME "Set ON to change /MD(DLL) to /MT(static)" OFF ) |
50 | 40 | if (USE_STATIC_RUNTIME) |
51 | | - set(CompilerFlags |
52 | | - CMAKE_CXX_FLAGS |
53 | | - CMAKE_CXX_FLAGS_DEBUG |
54 | | - CMAKE_CXX_FLAGS_RELEASE |
55 | | - CMAKE_C_FLAGS |
56 | | - CMAKE_C_FLAGS_DEBUG |
57 | | - CMAKE_C_FLAGS_RELEASE |
58 | | - ) |
59 | | - foreach(CompilerFlag ${CompilerFlags}) |
60 | | - string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") |
61 | | - endforeach() |
62 | | - message(STATUS "Using /MT STATIC runtime") |
| 41 | + # /MT or /MTd depending on config |
| 42 | + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>") |
| 43 | + else () |
| 44 | + # /MD or /MDd depending on config |
| 45 | + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL") |
63 | 46 | endif () |
64 | 47 | endif () |
65 | 48 | endif () |
66 | 49 |
|
67 | | - |
68 | | - |
69 | 50 | add_subdirectory(common) |
70 | 51 | add_subdirectory(flex) |
71 | 52 | add_subdirectory(bison) |
72 | 53 |
|
73 | | -if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) |
| 54 | +if(PROJECT_IS_TOP_LEVEL) |
74 | 55 | # CPACK |
75 | 56 | if(CMAKE_BUILD_TYPE STREQUAL "Debug") |
76 | 57 | install(DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}/" DESTINATION "./") |
|
0 commit comments