OSDN Git Service

Specify BYPRODUCTS parameter
[timidity41/timidity41.git] / CMakeLists.txt
1
2 cmake_minimum_required(VERSION 3.9)
3
4 project(timidity41)
5
6 set(TIM41_USE_AVX2 FALSE CACHE BOOL "Enable use of Intel AVX2 enhanced instructions")
7
8 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/bin")
9 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/bin")
10 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/bin")
11 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/bin")
12
13 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/lib")
14 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/lib")
15 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/lib")
16 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/lib")
17
18 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/Debug/lib")
19 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/Release/lib")
20 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${CMAKE_BINARY_DIR}/RelWithDebInfo/lib")
21 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${CMAKE_BINARY_DIR}/MinSizeRel/lib")
22
23 find_package(Git)
24
25 if("${Git_FOUND}" AND EXISTS "${CMAKE_SOURCE_DIR}/.git")
26     add_custom_target(
27         UpdateTim41Version
28         COMMAND "${CMAKE_COMMAND}"
29             -DGIT_EXECUTABLE="${GIT_EXECUTABLE}"
30             -DINFILE="${CMAKE_CURRENT_SOURCE_DIR}/version.h.in"
31             -DOUTFILE="${CMAKE_CURRENT_BINARY_DIR}/version.h"
32             -P "${CMAKE_CURRENT_SOURCE_DIR}/WriteVersion.cmake"
33         BYPRODUCTS "${CMAKE_CURRENT_BINARY_DIR}/version.h"
34         WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
35         COMMENT "Updating version info..."
36     )
37 else()
38     set(tim41VersionStr "current")
39     set(tim41Version4Comma "41,0,0,0")
40     configure_file(version.h.in version.h)
41
42     add_custom_target(
43         UpdateTim41Version
44         COMMAND "${CMAKE_COMMAND}" -E echo "automatic version detection is not available"
45     )
46 endif()
47
48 include_directories("${CMAKE_CURRENT_BINARY_DIR}")
49
50 add_definitions(
51 # TiMidity++ common
52     -DRETSIGTYPE=int
53     -DSTDC_HEADERS
54     -DHAVE_GETCWD
55     -DHAVE_POPEN
56     -DHAVE_SIGNAL
57     -DHAVE_SNPRINTF
58     -DHAVE_STRDUP
59     -DHAVE_STRERROR
60     -DHAVE_STRNCASECMP
61     -DHAVE_STRSTR
62     -DHAVE_VPRINTF
63     -DHAVE_VSNPRINTF
64     -DHAVE_ERRNO_H
65     -DHAVE_LIMITS_H
66     -DHAVE_MALLOC_H
67     -DHAVE_STDLIB_H
68         -DHAVE_SYS_STAT_H
69     -DHAVE_SYS_TYPES_H
70     -DHAVE_FCNTL_H
71     -DHAVE_LIBVORBIS
72     -DHAVE_LIBGOGO
73     -DHAVE_LIBMPG123
74     -DHAVE_MMSYSTEM_H
75     -DENABLE_SHERRY
76     -DENABLE_THREAD
77     -DSUPPORT_SOUNDSPEC
78     -DANOTHER_MAIN
79     -D__W32__
80     -D__W32READDIR__
81         -DUSE_TWSYN_BRIDGE
82     -DENABLE_SFZ
83         -DTIMW32G_USE_NEW_CONSOLE
84         -DENABLE_DLS
85
86 # TiMidity++ audio
87     -DAU_W32
88     -DAU_WASAPI
89     -DAU_WDMKS
90     -DAU_OPUS
91     -DAU_OPUS_DLL
92     -DAU_SPEEX
93         -DAU_SPEEX_DLL
94     -DAU_LAME
95     -DAU_GOGO
96     -DAU_GOGO_DLL
97     -DAU_VORBIS
98     -DAU_VORBIS_DLL
99     -DVORBIS_DLL_INCLUDE_VORBISENC
100     -DVORBIS_DLL_INCLUDE_VORBISFILE
101     -DAU_FLAC
102     -DAU_FLAC_DLL
103     -DAU_OGGFLAC
104     -DAU_PORTAUDIO
105     -DAU_PORTAUDIO_DLL
106     -DPORTAUDIO_V19
107     -DPORTAUDIO_V19_6
108     -DVST_LOADER_ENABLE
109     -DVSTWRAP_EXT
110     -DAU_NPIPE
111     -DAU_LIST
112     -DAU_WRITE_MIDI
113     -DAU_MODMIDI
114     -DAU_VOLUME_CALC
115     -DAU_BENCHMARK
116
117 # network
118     -DWINSOCK
119     -DHAVE_SOCKET
120     -DSUPPORT_SOCKET
121
122 # pdcurses
123     -DPDC_DLL_BUILD
124
125 # Windows
126     -DWIN32_LEAN_AND_MEAN
127     -DWINVER=0x0A00
128     -D_WIN32_WINNT=0x0A00
129
130 # MSVCRT
131     -D_CRT_SECURE_NO_WARNINGS
132 )
133
134 if(TIM41_USE_AVX2)
135     add_definitions(-DUSE_AVX2)
136 else()
137     add_definitions(-DUSE_SSE42)
138 endif()
139
140 if(MSVC)
141     add_compile_options(/W4 /Zi /GS /fp:fast /Qspectre)
142     add_compile_options(/we4013)    # '%s' undefined; assuming extern returning int
143     
144     if(TIM41_USE_AVX2)
145         add_compile_options(/arch:AVX2)
146     endif()
147     
148         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /std:c++17")
149
150     set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GL /guard:cf")
151     set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL /guard:cf")
152
153     set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
154     set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
155     set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
156     set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /OPT:REF /OPT:ICF /LTCG:incremental /DEBUG:FULL /GUARD:CF")
157     set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS_RELEASE} /LTCG:incremental")
158     set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG:FASTLINK")
159     set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /OPT:REF /DEBUG:FASTLINK")
160
161     add_definitions(
162         -DSTDOUT_FILENO=1
163     )
164 else()
165     add_compile_options(-Wall -Wextra -Wno-missing-braces -ffast-math)
166
167     if(TIM41_USE_AVX2)
168         add_compile_options(-mavx2 -mfma)
169     else()
170         add_compile_options(-msse4.2)
171     endif()
172
173         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
174     set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -flto")
175     set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -flto")
176     set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s")
177     set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -s")
178     set(CMAKE_RC_FLAGS "-O coff")
179 endif()
180
181 function(DisableMSManifest targetName)
182     if(MSVC)
183         get_property(linkFlags TARGET ${targetName} PROPERTY LINK_FLAGS)
184         set_target_properties(${targetName} PROPERTIES LINK_FLAGS "${linkFlags} /MANIFEST:NO")
185     endif()
186 endfunction()
187
188 include_directories(
189     "."
190     FLAC/include
191     interface
192     lame/DLL
193     lame/include
194     libarc
195     libmpg123/include
196     libunimod
197     ogg/include
198     opus/include
199     pdcurses
200     portaudio/include
201     portmidi/pm_common
202     portmidi/pm_win
203     portmidi/porttime
204     timidity
205         twsyn_bridge
206     utils
207     vorbis/include
208 )
209
210 add_subdirectory(FLAC)
211 add_subdirectory(lame)
212 add_subdirectory(libmpg123)
213 add_subdirectory(ogg)
214 add_subdirectory(opus)
215 add_subdirectory(pdcurses)
216 add_subdirectory(portaudio)
217 add_subdirectory(portmidi)
218 add_subdirectory(speex)
219 add_subdirectory(vorbis)
220
221 add_subdirectory(cfgforsf)
222 add_subdirectory(interface)
223 add_subdirectory(libarc)
224 add_subdirectory(libunimod)
225 add_subdirectory(sf_view_gui)
226 add_subdirectory(timidity)
227 add_subdirectory(twsyn_bridge)
228 add_subdirectory(utils)