diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f2a7aca --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,184 @@ +cmake_minimum_required (VERSION 2.8.11) +project (libADLMIDI) + +#=========================================================================================== +# Strip garbage +if(APPLE) + set(LINK_FLAGS_RELEASE "${LINK_FLAGS_RELEASE} -dead_strip") +ELSEIF(NOT MSVC) + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Os -s -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-s") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os -s -fdata-sections -ffunction-sections -Wl,--gc-sections -Wl,-s") + set(LINK_FLAGS_RELEASE "${LINK_FLAGS_RELEASE} -Wl,--gc-sections -Wl,-s") +ENDIF() + +# Global optimization flags +IF(NOT MSVC) + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -fno-omit-frame-pointer") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -fno-omit-frame-pointer") +ENDIF() + +if (CMAKE_BUILD_TYPE EQUAL "RELEASE") + add_definitions(-DNDEBUG) +ENDIF() + +# Disable bogus MSVC warnings +if(MSVC) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) +ENDIF() + +# -fPIC thing +IF(NOT WIN32) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") +ENDIF() +#=========================================================================================== + +option(WITH_MIDIPLAY "Build also demo MIDI player" OFF) +option(WITH_OLD_UTILS "Build also old utilities" OFF) +option(WITH_EMBEDDED_BANKS "Use embedded banks" ON) +option(USE_DOSBOX_EMULATOR "Use DosBox emulator" OFF) + +option(libADLMIDI_STATIC "Build static library of libADLMIDI" ON) +option(libADLMIDI_SHARED "Build shared library of libADLMIDI" OFF) + + + +set(libADLMIDI_INSTALLS) + +include_directories(${libADLMIDI_SOURCE_DIR}/include) +include_directories(${libADLMIDI_SOURCE_DIR}/src/) +link_directories(${libADLMIDI_BINARY_DIR}/) + +if(WITH_OLD_UTILS) + # Old utility to dump AdLib bank files + add_executable(adldumpbank + ${libADLMIDI_SOURCE_DIR}/utils/dumpbank/dumpbank.cpp + ) + list(APPEND libADLMIDI_INSTALLS adldumpbank) + + # Old utility to dump AIL bank files + add_executable(adldumpmiles + ${libADLMIDI_SOURCE_DIR}/utils/dumpmiles/dumpmiles.cpp + ) + list(APPEND libADLMIDI_INSTALLS adldumpmiles) +endif() + +if(WITH_EMBEDDED_BANKS) + add_executable(gen_adldata + ${libADLMIDI_SOURCE_DIR}/utils/gen_adldata/gen_adldata.cc + ${libADLMIDI_SOURCE_DIR}/utils/gen_adldata/progs_cache.cpp + ${libADLMIDI_SOURCE_DIR}/utils/gen_adldata/measurer.cpp + ${libADLMIDI_SOURCE_DIR}/utils/gen_adldata/ini/ini_processing.cpp + ${libADLMIDI_SOURCE_DIR}/src/nukedopl3.c + ${libADLMIDI_SOURCE_DIR}/src/dbopl.cpp + ) + target_link_libraries(gen_adldata pthread) + + add_custom_target ( + gen-adldata-run + COMMAND ${libADLMIDI_BINARY_DIR}/gen_adldata ${libADLMIDI_SOURCE_DIR}/src/adldata.cpp + WORKING_DIRECTORY ${libADLMIDI_SOURCE_DIR} + ) + add_dependencies(gen-adldata-run gen_adldata) +endif() + + +set(libADLMIDI_SOURCES) + +list(APPEND libADLMIDI_SOURCES + ${libADLMIDI_SOURCE_DIR}/src/adlmidi.cpp + ${libADLMIDI_SOURCE_DIR}/src/adlmidi_load.cpp + ${libADLMIDI_SOURCE_DIR}/src/adlmidi_midiplay.cpp + ${libADLMIDI_SOURCE_DIR}/src/adlmidi_opl3.cpp + ${libADLMIDI_SOURCE_DIR}/src/adlmidi_private.cpp + ${libADLMIDI_SOURCE_DIR}/src/adlmidi_mus2mid.c + ${libADLMIDI_SOURCE_DIR}/src/adlmidi_xmi2mid.c +) + +if(USE_DOSBOX_EMULATOR) + add_definitions(-DADLMIDI_USE_DOSBOX_OPL) + list(APPEND libADLMIDI_SOURCES + ${libADLMIDI_SOURCE_DIR}/src/dbopl.cpp + ) +else() + list(APPEND libADLMIDI_SOURCES + ${libADLMIDI_SOURCE_DIR}/src/nukedopl3.c + ) +endif() + +if(WITH_EMBEDDED_BANKS) + list(APPEND libADLMIDI_SOURCES + ${libADLMIDI_SOURCE_DIR}/src/adldata.cpp + ) +else() + add_definitions(-DDISABLE_EMBEDDED_BANKS) +endif() + +if(libADLMIDI_STATIC) + add_library(ADLMIDI_static STATIC ${libADLMIDI_SOURCES}) + set_target_properties(ADLMIDI_static PROPERTIES OUTPUT_NAME ADLMIDI) + target_include_directories(ADLMIDI_static PUBLIC ${SDLMixerX_SOURCE_DIR}/include) + list(APPEND libADLMIDI_INSTALLS ADLMIDI_static) + if(WITH_EMBEDDED_BANKS) + add_dependencies(ADLMIDI_static gen-adldata-run) + endif() +endif() + +if(libADLMIDI_SHARED) + add_library(ADLMIDI_shared SHARED ${libADLMIDI_SOURCES}) + set_target_properties(ADLMIDI_shared PROPERTIES OUTPUT_NAME ADLMIDI) + target_include_directories(ADLMIDI_shared PUBLIC ${SDLMixerX_SOURCE_DIR}/include) + list(APPEND libADLMIDI_INSTALLS ADLMIDI_shared) + if(WITH_EMBEDDED_BANKS) + add_dependencies(ADLMIDI_shared gen-adldata-run) + endif() +endif() + +if(WITH_MIDIPLAY) + find_library(SDL2_LIBRARY SDL2 REQUIRED) + include_directories(${SDL2_INCLUDE_DIR}) + message("Found ${SDL2_LIBRARY}") + + add_executable(adlmidiplay + ${libADLMIDI_SOURCE_DIR}/utils/midiplay/adlmidiplay.cpp + ${libADLMIDI_SOURCE_DIR}/utils/midiplay/wave_writer.c + ) + + if(WIN32) + target_link_libraries(adlmidiplay ADLMIDI ${SDL2_LIBRARY} pthread) + else() + target_link_libraries(adlmidiplay ADLMIDI ${SDL2_LIBRARY} pthread dl) + endif() + + if(libADLMIDI_SHARED) + add_dependencies(adlmidiplay ADLMIDI_shared) + # ========= WIP ========= + # set_target_properties(adlmidiplay PROPERTIES COMPILE_FLAGS "-Wl,-rpath='$$ORIGIN/../lib'") + else() + if(NOT libADLMIDI_STATIC) + message(FATAL_ERROR "libADLMIDI is required to be built!") + endif() + add_dependencies(adlmidiplay ADLMIDI_static) + endif() + + list(APPEND libADLMIDI_INSTALLS adlmidiplay) +endif() + +install(TARGETS ${libADLMIDI_INSTALLS} + RUNTIME DESTINATION "bin" + LIBRARY DESTINATION "lib" + ARCHIVE DESTINATION "lib" + INCLUDES DESTINATION "include") + +install(FILES + include/adlmidi.h + DESTINATION include/) + +message("==== libADLMIDI options ====") +message("WITH_MIDIPLAY = ${WITH_MIDIPLAY}") +message("WITH_EMBEDDED_BANKS = ${WITH_EMBEDDED_BANKS}") +message("USE_DOSBOX_EMULATOR = ${USE_DOSBOX_EMULATOR}") +message("libADLMIDI_STATIC = ${libADLMIDI_STATIC}") +message("libADLMIDI_SHARED = ${libADLMIDI_SHARED}") + + |