PROJECT(BFilter)

FILE(READ VERSION raw_version)
STRING(REGEX MATCH \\S+ version ${raw_version})

SUBDIRS(mkskel foundation boost reactor lexgen libjs main)

IF(MSVC)
	SET(wds "/wd4258 /wd4355 /wd4244 /wd4800")
	
	# What we really need here, is "/O2 /Gy-" (to prevent crashes in libjs),
	# but /Gy- is only supported since Visual Studio 8, and CMake has
	# problems parsing it.  "/O2 /Gy-" is more or less equivalent to
	# "/Og /Oi /Ot /Oy /Ob2 /Gs /GF".
	SET(CMAKE_C_FLAGS_RELEASE "/Og /Oi /Ot /Oy /Ob2 /Gs /GF /GL /MT ${wds}")
	SET(CMAKE_C_FLAGS_MINSIZEREL "/Og /Oi /Os /Oy /Ob2 /Gs /GF /GL /MT ${wds}")
	SET(CMAKE_C_FLAGS_RELWITHDEBINFO "/Og /Oi /Ot /Oy /Ob2 /Gs /GF /Zi /MT ${wds}")
	SET(CMAKE_C_FLAGS_DEBUG "/Od /Zi /MT ${wds}")
	
	SET(CMAKE_CXX_FLAGS_RELEASE "/O2 /EHsc /GR /GL /MT /Zc:forScope ${wds}")
	SET(CMAKE_CXX_FLAGS_MINSIZEREL "/O1 /Oi /EHsc /GR /GL /MT /Zc:forScope ${wds}")
	SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "/O2 /Zi /EHsc /GR /MT /Zc:forScope ${wds}")
	SET(CMAKE_CXX_FLAGS_DEBUG "/Od /Zi /EHsc /GR /MT /Zc:forScope /wd4258 ${wds}")
	
	SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "/OPT:ICF /OPT:REF /LTCG /INCREMENTAL:NO")
	SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/OPT:ICF /OPT:REF /LTCG /INCREMENTAL:NO")
	SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/OPT:REF /OPT:NOICF /DEBUG /INCREMENTAL:YES")
	SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/OPT:NOREF /OPT:NOICF /DEBUG /INCREMENTAL:YES")
	
	SET(CMAKE_MODULE_LINKER_FLAGS_RELEASE "/OPT:ICF /OPT:REF /LTCG /INCREMENTAL:NO")
	SET(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "/OPT:ICF /OPT:REF /LTCG /INCREMENTAL:NO")
	SET(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "/OPT:REF /OPT:NOICF /DEBUG /INCREMENTAL:YES")
	SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "/OPT:NOREF /OPT:NOICF /DEBUG /INCREMENTAL:YES")
	
	SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/OPT:ICF /OPT:REF /LTCG /INCREMENTAL:NO")
	SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "/OPT:ICF /OPT:REF /LTCG /INCREMENTAL:NO")
	SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "/OPT:REF /OPT:NOICF /DEBUG /INCREMENTAL:YES")
	SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/OPT:NOREF /OPT:NOICF /DEBUG /INCREMENTAL:YES")
	
	SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "/OPT:ICF /OPT:REF /LTCG")
	SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "/OPT:ICF /OPT:REF /LTCG")
	SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "/OPT:REF /OPT:NOICF /DEBUG")
	SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/OPT:NOREF /OPT:NOICF /DEBUG")
	
	INCLUDE_DIRECTORIES(../wxWidgets/lib/vc_lib/msw)
ENDIF(MSVC)

IF(WIN32)
	ADD_DEFINITIONS(-D_X86_)
ENDIF(WIN32)

ADD_DEFINITIONS(
	-DNOMINMAX -D_SECURE_SCL=0 -D_HAS_ITERATOR_DEBUGGING=0
	-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
	-DBOOST_REGEX_NO_LIB -DBOOST_REGEX_NON_RECURSIVE
	-DBOOST_MULTI_INDEX_DISABLE_SERIALIZATION
	-DBFILTER_VERSION=\\"${version}\\"
	-DwxNO_THREADS
)

INCLUDE_DIRECTORIES(
	. foundation boost reactor libjs/environment main main/confio
	../ACE_wrappers ../libsigc++ ../zlib ../wxWidgets/include
)