cmake_minimum_required(VERSION 3.8)

include(GNUInstallDirs)
#project(assembler C ASM)
#############################################
# opus
#############################################
if (CMAKE_SYSTEM_PROCESSOR MATCHES "(arm)")
	add_definitions(-DARCH_ARM)
	list(APPEND RESAMPLE_FILES libswresample/arm/audio_convert_init.c)
	list(APPEND RESAMPLE_FILES libswresample/arm/resample_init.c)
	#list(APPEND RESAMPLE_FILES arm/fft_init_arm.c)
	list(APPEND RESAMPLE_FILES libavutil/arm/cpu.c)
	list(APPEND RESAMPLE_FILES libavutil/arm/float_dsp_init_arm.c)
	list(APPEND RESAMPLE_FILES libavutil/arm/float_dsp_init_neon.c)
	list(APPEND RESAMPLE_FILES libavutil/arm/float_dsp_init_vfp.c)
	ENABLE_LANGUAGE(C ASM)
	list(APPEND ARM_FILES libswresample/arm/audio_convert_neon.S)
	#list(APPEND ARM_FILES arm/fft_vfp.S)
	list(APPEND ARM_FILES libswresample/arm/resample.S)
	list(APPEND ARM_FILES libavutil/arm/float_dsp_neon.S)
	list(APPEND ARM_FILES libavutil/arm/float_dsp_vfp.S)
else()
	add_definitions(-DARCH_AARCH64)
	list(APPEND RESAMPLE_FILES libswresample/aarch64/audio_convert_init.c)
	list(APPEND RESAMPLE_FILES libswresample/aarch64/resample_init.c)
	#list(APPEND RESAMPLE_FILES aarch64/fft_init_aarch64.c)
	list(APPEND RESAMPLE_FILES libavutil/aarch64/cpu.c)
	list(APPEND RESAMPLE_FILES libavutil/aarch64/float_dsp_init.c)
	list(APPEND RESAMPLE_FILES libavutil/aarch64/tx_float_init.c)
	list(APPEND RESAMPLE_FILES libavcodec/aarch64/opusdsp_init.c)
	ENABLE_LANGUAGE(C ASM)
	list(APPEND ARM_FILES libswresample/aarch64/audio_convert_neon.S)
	list(APPEND ARM_FILES libavutil/aarch64/float_dsp_neon.S)
	list(APPEND ARM_FILES libavutil/aarch64/tx_float_neon.S)
	list(APPEND ARM_FILES libavcodec/aarch64/opusdsp_neon.S)
endif()

#set_property(SOURCE arm/audio_convert_neon.S APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp")

add_library(opus-ahal SHARED
	dsp.c
	dec.c
	celt.c
	dec_celt.c
	pvq.c
	rc.c
	tab.c
	parse.c
	silk.c
	${RESAMPLE_FILES}
	${ARM_FILES}
	./libavutil/cpu.c
	./libavutil/tx.c
	./libavutil/bprint.c
	./libavutil/intmath.c
	./libavutil/tx_double.c
	./libavutil/tx_float.c
	./libavutil/tx_int32.c
	./libavutil/channel_layout.c
	./libavutil/log2_tab.c
	./libavutil/audio_fifo.c
	./libavutil/float_dsp.c
	./libavutil/opt.c
	./libavutil/mem.c
	./libavutil/fifo.c
	./libavutil/samplefmt.c
	./libavutil/rational.c
	./libavutil/error.c
	./libavutil/avstring.c
	./libavutil/avsscanf.c
	./libavutil/mathematics.c
	./libavutil/eval.c
	./libavutil/reverse.c
	./libavutil/log.c
	./libavutil/time.c
	./libavutil/frame.c
	./libavutil/buffer.c
	./libavutil/dict.c
	./libswresample/swresample.c
	./libswresample/resample.c
	./libswresample/audioconvert.c
	./libswresample/rematrix.c
	./libswresample/resample_dsp.c
	./libswresample/dither.c
	./libswresample/options.c
	./libavcodec/vorbis_data.c
	./libavcodec/mathtables.c
	./libavcodec/get_buffer.c
	./libavcodec/refstruct.c
)
if(ANDROID_BUILD)
add_definitions(-DANDROID_BUILD)
add_definitions(-DUSE_LOGCAT)
endif()

target_compile_options(opus-ahal PRIVATE -Wl,-no-undefined -Xlinker --unresolved-symbols=ignore-in-shared-libs -g)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
#add_definitions(-DUSE_DEFAULT_STDLIB  -DUSE_HELIX_AAC_DECODER)

#set_target_properties(opus-ahal PROPERTIES
#	VERSION ${PROJECT_VERSION}
#	SOVERSION 1)
target_include_directories(opus-ahal PRIVATE
	${PROJECT_SOURCE_DIR}
	${PROJECT_SOURCE_DIR}/include
	${PROJECT_SOURCE_DIR}/libavcodec
	${PROJECT_SOURCE_DIR}/libavutil
	${PROJECT_SOURCE_DIR}/compat
	${PROJECT_SOURCE_DIR}/compat/float
	${PROJECT_SOURCE_DIR}/arm
	${PROJECT_SOURCE_DIR}/libswresample
)
if(ANDROID_BUILD)
target_link_options(opus-ahal PRIVATE "-Wl,-soname,libopus-ahal.so")
target_link_libraries(opus-ahal -lm -llog)
else()
target_link_libraries(opus-ahal
	-lcutils -lamaudioutils -llog)
endif()

install(TARGETS opus-ahal
	LIBRARY DESTINATION "lib")
