Foreign import with _windows and _darwin

I have mqtt_windows.odin

package mqtt

import "core:sys/windows"


foreign import lib {
    "lib/mqtt.lib",
    "lib/mqtt_pal.lib",
}

pal_mutex_t       :: windows.CRITICAL_SECTION

... PLUS_ONE_MORE_THING!!! ...

And mqtt_darwin.odin


package mqtt

import "core:sys/posix"

foreign import lib {
	"lib/libmqtt.a",
	"lib/libmqtt_pal.a",
}

pal_mutex_t       :: posix.pthread_mutex_t

... PLUS_ONE_MORE_THING!!! ...

Then for the PLUS_ONE_MORE_THING that we saw two times above, that is exactly the following twice:


@(link_prefix="mqtt_", default_calling_convention="c")
foreign lib{
	error_str                :: proc(error : Errors) -> cstring ---
	unpack_fixed_header      :: proc(response: ^response, buf: ^u8, bufsz: size_t)-> ssize_t---
	unpack_connack_response  :: proc(response: ^response, buf: ^u8)->ssize_t---
	unpack_publish_response  :: proc(response: ^response, buf: ^u8)->ssize_t---
	unpack_pubxxx_response   :: proc(response: ^response, buf: ^u8)->ssize_t---
	unpack_suback_response   :: proc(response: ^response, buf: ^u8)->ssize_t---
	unpack_unsuback_response :: proc(response: ^response, buf: ^u8)->ssize_t---
	unpack_response          :: proc(response: ^response, buf: ^u8, bufsz: size_t)->ssize_t---
	pack_fixed_header        :: proc(buf: ^u8, bufsz: size_t, fixed_header: ^fixed_header)->ssize_t---
	pack_connection_request  :: proc(buf: ^u8, bufsz: size_t, client_id: cstring, will_topic: cstring,
		will_message: rawptr, will_message_size: size_t, user_name: cstring,
		password: cstring, connect_flags: u8, keep_alive: u16,
		)->ssize_t---

	pack_publish_request :: proc(buf: ^u8, bufsz: size_t,
		topic_name: cstring,
		packet_id: u16,
		application_message: rawptr,
		application_message_size: size_t,
		publish_flags: u8
		)->ssize_t---

	pack_pubxxx_request :: proc(buf: u8, bufsz: size_t,
		control_type: ControlPacketType,
		packet_id: u16,
		)->ssize_t---

	pack_subscribe_request   :: proc(buf: ^u8, bufsz: size_t, packet_id: u16, )->ssize_t---
	pack_unsubscribe_request :: proc(buf: ^u8, bufsz: size_t, packet_id: u16, )->ssize_t---
	pack_ping_request        :: proc(buf: ^u8, bufsz: size_t,)->ssize_t---
	pack_disconnect          :: proc(buf: ^u8, bufsz: size_t,)->ssize_t---
	mq_init 	         :: proc(mq: ^message_queue, buf: ^u8, bufsz: i32,)---
	mq_clean                 :: proc(mq: ^message_queue,)---
	mq_register              :: proc(mq: ^message_queue, nbytes: i32)-> ^queued_message ---
	mq_find                  :: proc(mq: ^message_queue, control_type : ControlPacketType, packet_id: ^u16)-> ^queued_message ---
	sync                     :: proc(client: ^Client) -> Errors ---
	init                     :: proc(client: ^Client, sockfd: pal_socket_handle, 
		sendbuf: ^u8, sendbufsz: size_t,
		recvbuf: ^u8, recvbufsz: size_t,
		publish_response_callback : proc "c" (
			state: ^rawptr, publish: ^response_publish
			)
		)-> Errors---

	init_reconnect :: proc(client: ^Client, 
		reconnect_callback : proc(
			client: ^Client, state: ^rawptr),
		reconnect_state: rawptr,
		publish_response_callback : proc(
			state: ^rawptr, publish: ^response_publish)
		)---

	reinit :: proc(client: ^Client, sockfd: pal_socket_handle, 
		sendbuf: ^u8, sendbufsz: i32,
		recvbuf: ^u8, recvbufsz: i32,
		)---

	connect :: proc(client: ^Client,
		client_id: cstring,
		will_topic: cstring,
		will_message: rawptr ,
		will_message_size: i32,
		user_name: cstring,
		password: cstring,
		connect_flags: u8,
		keep_alive: u16)-> Errors ---

	publish :: proc(client: ^Client,
		topic_name: cstring,
		application_message: rawptr,
		application_message_size: i32,
		publish_flags: u8)-> Errors ---

	subscribe   :: proc(client: ^Client, topic_name: cstring, max_qos_level: i32)->Errors ---
	unsubscribe :: proc(client: ^Client, topic_name: cstring, )->Errors ---
	ping        :: proc(client: ^Client, )->Errors ---
	disconnect  :: proc(client: ^Client, )->Errors ---
	reconnect   :: proc(client: ^Client, )->Errors ---
}

I use to have this in mqtt.odin but after moving things in the _windows and _darwin file, I got the error Undeclared name: lib.

Is there a way to have this foreign lib block not twice but instead declare it once?
(And is that wise, or is this actually a good way to go)