OSDN Git Service

Fix for GCC
[timidity41/timidity41.git] / CMakeLists.txt
1
2 cmake_minimum_required(VERSION 3.9)
3
4 project(timidity41)
5
6 find_package(Git)
7
8 if("${Git_FOUND}" AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
9     add_custom_target(
10         UpdateTim41Version
11         COMMAND "${CMAKE_COMMAND}"
12             -DGIT_EXECUTABLE="${GIT_EXECUTABLE}"
13             -DINFILE="${CMAKE_CURRENT_SOURCE_DIR}/version.h.in"
14             -DOUTFILE="${CMAKE_CURRENT_BINARY_DIR}/version.h"
15             -P "${CMAKE_CURRENT_SOURCE_DIR}/WriteVersion.cmake"
16         WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
17         COMMENT "Updating version info..."
18     )
19 else()
20     set(tim41VersionStr "current")
21     set(tim41Version3Comma "41,0,0")
22     configure_file(version.h.in version.h)
23 endif()
24
25 include_directories("${CMAKE_CURRENT_BINARY_DIR}")
26
27 add_definitions(
28 # TiMidity++ common
29     -DRETSIGTYPE=int
30     -DSTDC_HEADERS
31     -DHAVE_GETCWD
32     -DHAVE_POPEN
33     -DHAVE_SIGNAL
34     -DHAVE_SNPRINTF
35     -DHAVE_STRDUP
36     -DHAVE_STRERROR
37     -DHAVE_STRNCASECMP
38     -DHAVE_STRSTR
39     -DHAVE_VPRINTF
40     -DHAVE_VSNPRINTF
41     -DHAVE_ERRNO_H
42     -DHAVE_LIMITS_H
43     -DHAVE_MALLOC_H
44     -DHAVE_STDLIB_H
45     -DHAVE_SYS_TYPES_H
46     -DHAVE_FCNTL_H
47     -DHAVE_LIBVORBIS
48     -DHAVE_LIBGOGO
49     -DHAVE_MMSYSTEM_H
50     -DENABLE_SHERRY
51     -DENABLE_THREAD
52     -DSUPPORT_SOUNDSPEC
53     -DANOTHER_MAIN
54
55 # TiMidity++ audio
56     -DAU_W32
57     -DAU_WASAPI
58     -DAU_OPUS
59     -DAU_OPUS_DLL
60     -DAU_SPEEX
61     -DAU_LAME
62     -DAU_GOGO
63     -DAU_GOGO_DLL
64     -DAU_VORBIS
65     -DAU_VORBIS_DLL
66     -DVORBIS_DLL_INCLUDE_VORBISENC
67     -DAU_FLAC
68     -DAU_FLAC_DLL
69     -DAU_OGGFLAC
70     -DAU_PORTAUDIO
71     -DAU_PORTAUDIO_DLL
72     -DPORTAUDIO_V19
73     -DPORTAUDIO_V19_6
74     -DVST_LOADER_ENABLE
75     -DVSTWRAP_EXT
76     -DAU_NPIPE
77     -DAU_LIST
78     -DAU_WRITE_MIDI
79     -DAU_MODMIDI
80     -DAU_VOLUME_CALC
81     -DAU_BENCHMARK
82
83 # network
84     -DWINSOCK
85     -DHAVE_SOCKET
86     -DSUPPORT_SOCKET
87
88 # Windows
89     -DWIN32_LEAN_AND_MEAN
90     -D__W32__
91     -D__W32READDIR__
92
93 # MSVCRT
94     -D_CRT_SECURE_NO_WARNINGS
95 )
96
97 if(MSVC)
98     add_compile_options(-W4 -Zi -fp:fast)
99
100     set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GL /GS /guard:cf")
101     set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL /GS /guard:cf")
102
103     set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
104     set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
105     set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
106     set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
107     set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG:incremental")
108     set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG:FASTLINK")
109     set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG:FASTLINK")
110
111     add_definitions(
112         -DSTDOUT_FILENO=1
113     )
114
115 else()
116     add_compile_options(-Wall -Wextra)
117     set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s")
118     set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -s")
119 endif()
120
121 function(DisableMSManifest targetName)
122     if(MSVC)
123         get_property(linkFlags TARGET ${targetName} PROPERTY LINK_FLAGS)
124         set_target_properties(${targetName} PROPERTIES LINK_FLAGS "${linkFlags} /MANIFEST:NO")
125     endif()
126 endfunction()
127
128 include_directories("." interface libarc libunimod pdcurses portaudio/pa_common timidity utils)
129
130 add_subdirectory(pdcurses)
131 add_subdirectory(speex)
132
133 add_subdirectory(interface)
134 add_subdirectory(libarc)
135 add_subdirectory(libunimod)
136 add_subdirectory(timidity)
137 add_subdirectory(utils)